diff options
author | Maximilian Güntner <code@sourcediver.org> | 2017-01-26 17:33:26 +0100 |
---|---|---|
committer | Maximilian Güntner <code@sourcediver.org> | 2017-01-27 00:27:50 +0100 |
commit | 123dd9f4e748f64affc2cf77976174444b394705 (patch) | |
tree | cdb7d9983eb572156c1a19ff434637b52734b5a9 /nixos | |
parent | e2a2f6d595d7df5ddeecbfed830692fd8ee68697 (diff) | |
download | nixpkgs-123dd9f4e748f64affc2cf77976174444b394705.tar nixpkgs-123dd9f4e748f64affc2cf77976174444b394705.tar.gz nixpkgs-123dd9f4e748f64affc2cf77976174444b394705.tar.bz2 nixpkgs-123dd9f4e748f64affc2cf77976174444b394705.tar.lz nixpkgs-123dd9f4e748f64affc2cf77976174444b394705.tar.xz nixpkgs-123dd9f4e748f64affc2cf77976174444b394705.tar.zst nixpkgs-123dd9f4e748f64affc2cf77976174444b394705.zip |
services: ipfs: separate system units, add offline mode
Offline mode: When adding a lot of data, start this service. It will will not flood the DHT since it only exposes the API. When you are done simply reverse the process.
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/services/network-filesystems/ipfs.nix | 62 |
1 files changed, 52 insertions, 10 deletions
diff --git a/nixos/modules/services/network-filesystems/ipfs.nix b/nixos/modules/services/network-filesystems/ipfs.nix index d43147a16f3..e6e04248854 100644 --- a/nixos/modules/services/network-filesystems/ipfs.nix +++ b/nixos/modules/services/network-filesystems/ipfs.nix @@ -104,31 +104,73 @@ in }; }; - systemd.services.ipfs = { - description = "IPFS Daemon"; + systemd.services.ipfs-init = { + description = "IPFS Initializer"; + + after = [ "local-fs.target" ]; + before = [ "ipfs.service" "ipfs-offline.service" ]; - wantedBy = [ "multi-user.target" ]; - after = [ "network.target" "local-fs.target" ]; path = [ pkgs.ipfs pkgs.su pkgs.bash ]; preStart = '' install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir} + ''; + + script = '' if [[ ! -d ${cfg.dataDir}/.ipfs ]]; then cd ${cfg.dataDir} - ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c \ - "${ipfs}/bin/ipfs init ${if cfg.emptyRepo then "-e" else ""}" + ${ipfs}/bin/ipfs init ${optionalString cfg.emptyRepo "-e"} fi - ${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c \ - "${ipfs}/bin/ipfs --local config Addresses.API ${cfg.apiAddress} && \ - ${ipfs}/bin/ipfs --local config Addresses.Gateway ${cfg.gatewayAddress}" + ${ipfs}/bin/ipfs --local config Addresses.API ${cfg.apiAddress} + ${ipfs}/bin/ipfs --local config Addresses.Gateway ${cfg.gatewayAddress} ''; serviceConfig = { - ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags}"; User = cfg.user; Group = cfg.group; + Type = "oneshot"; + RemainAfterExit = true; PermissionsStartOnly = true; }; }; + + systemd.services.ipfs = { + description = "IPFS Daemon"; + + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" "local-fs.target" "ipfs-init.service" ]; + + conflicts = [ "ipfs-offline.service" ]; + wants = [ "ipfs-init.service" ]; + + path = [ pkgs.ipfs ]; + + serviceConfig = { + ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags}"; + User = cfg.user; + Group = cfg.group; + Restart = "on-failure"; + RestartSec = 1; + }; + }; + + systemd.services.ipfs-offline = { + description = "IPFS Daemon (offline mode)"; + + after = [ "local-fs.target" "ipfs-init.service" ]; + + conflicts = [ "ipfs.service" ]; + wants = [ "ipfs-init.service" ]; + + path = [ pkgs.ipfs ]; + + serviceConfig = { + ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags} --offline"; + User = cfg.user; + Group = cfg.group; + Restart = "on-failure"; + RestartSec = 1; + }; + }; }; } |