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/modules | |
parent | e2a2f6d595d7df5ddeecbfed830692fd8ee68697 (diff) | |
download | nixlib-123dd9f4e748f64affc2cf77976174444b394705.tar nixlib-123dd9f4e748f64affc2cf77976174444b394705.tar.gz nixlib-123dd9f4e748f64affc2cf77976174444b394705.tar.bz2 nixlib-123dd9f4e748f64affc2cf77976174444b394705.tar.lz nixlib-123dd9f4e748f64affc2cf77976174444b394705.tar.xz nixlib-123dd9f4e748f64affc2cf77976174444b394705.tar.zst nixlib-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/modules')
-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 d43147a16f31..e6e04248854e 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; + }; + }; }; } |