Merge pull request #29133 from elitak/ipfs

ipfs: workaround for upstream bug; other small fixes
This commit is contained in:
Franz Pletz 2017-09-18 13:26:39 +02:00 committed by GitHub
commit decaa2e7bf
2 changed files with 26 additions and 32 deletions

View File

@ -6,7 +6,7 @@ let
cfg = config.services.ipfs; cfg = config.services.ipfs;
ipfsFlags = toString ([ ipfsFlags = toString ([
#(optionalString cfg.autoMount "--mount") (optionalString cfg.autoMount "--mount")
(optionalString cfg.autoMigrate "--migrate") (optionalString cfg.autoMigrate "--migrate")
(optionalString cfg.enableGC "--enable-gc") (optionalString cfg.enableGC "--enable-gc")
(optionalString (cfg.serviceFdlimit != null) "--manage-fdlimit=false") (optionalString (cfg.serviceFdlimit != null) "--manage-fdlimit=false")
@ -37,9 +37,10 @@ let
baseService = recursiveUpdate commonEnv { baseService = recursiveUpdate commonEnv {
wants = [ "ipfs-init.service" ]; wants = [ "ipfs-init.service" ];
preStart = '' preStart = ''
ipfs repo fsck # workaround for BUG #4212 (https://github.com/ipfs/go-ipfs/issues/4214)
ipfs --local config Addresses.API ${cfg.apiAddress} ipfs --local config Addresses.API ${cfg.apiAddress}
ipfs --local config Addresses.Gateway ${cfg.gatewayAddress} ipfs --local config Addresses.Gateway ${cfg.gatewayAddress}
'' + optionalString false/*cfg.autoMount*/ '' '' + optionalString cfg.autoMount ''
ipfs --local config Mounts.FuseAllowOther --json true ipfs --local config Mounts.FuseAllowOther --json true
ipfs --local config Mounts.IPFS ${cfg.ipfsMountDir} ipfs --local config Mounts.IPFS ${cfg.ipfsMountDir}
ipfs --local config Mounts.IPNS ${cfg.ipnsMountDir} ipfs --local config Mounts.IPNS ${cfg.ipnsMountDir}
@ -91,24 +92,22 @@ in {
}; };
defaultMode = mkOption { defaultMode = mkOption {
description = "systemd service that is enabled by default";
type = types.enum [ "online" "offline" "norouting" ]; type = types.enum [ "online" "offline" "norouting" ];
default = "online"; default = "online";
description = "systemd service that is enabled by default";
}; };
autoMigrate = mkOption { autoMigrate = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = '' description = "Whether IPFS should try to migrate the file system automatically";
Whether IPFS should try to migrate the file system automatically.
'';
}; };
#autoMount = mkOption { autoMount = mkOption {
# type = types.bool; type = types.bool;
# default = false; default = false;
# description = "Whether IPFS should try to mount /ipfs and /ipns at startup."; description = "Whether IPFS should try to mount /ipfs and /ipns at startup.";
#}; };
ipfsMountDir = mkOption { ipfsMountDir = mkOption {
type = types.str; type = types.str;
@ -137,26 +136,22 @@ in {
enableGC = mkOption { enableGC = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = '' description = "Whether to enable automatic garbage collection";
Whether to enable automatic garbage collection.
'';
}; };
emptyRepo = mkOption { emptyRepo = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = '' description = "If set to true, the repo won't be initialized with help files";
If set to true, the repo won't be initialized with help files
'';
}; };
extraConfig = mkOption { extraConfig = mkOption {
type = types.attrs; type = types.attrs;
description = toString [ description = ''
"Attrset of daemon configuration to set using `ipfs config`, every time the daemon starts." Attrset of daemon configuration to set using <command>ipfs config</command>, every time the daemon starts.
"These are applied last, so may override configuration set by other options in this module." These are applied last, so may override configuration set by other options in this module.
"Keep in mind that this configuration is stateful; i.e., unsetting anything in here does not reset the value to the default!" Keep in mind that this configuration is stateful; i.e., unsetting anything in here does not reset the value to the default!
]; '';
default = {}; default = {};
example = { example = {
Datastore.StorageMax = "100GB"; Datastore.StorageMax = "100GB";
@ -179,10 +174,8 @@ in {
serviceFdlimit = mkOption { serviceFdlimit = mkOption {
type = types.nullOr types.int; type = types.nullOr types.int;
default = null; default = null;
description = '' description = "The fdlimit for the IPFS systemd unit or <literal>null</literal> to have the daemon attempt to manage it";
The fdlimit for the IPFS systemd unit or `null` to have the daemon attempt to manage it. example = 64*1024;
'';
example = 256*1024;
}; };
}; };
@ -192,6 +185,9 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ wrapped ]; environment.systemPackages = [ wrapped ];
environment.etc."fuse.conf" = mkIf cfg.autoMount { text = ''
user_allow_other
''; };
users.extraUsers = mkIf (cfg.user == "ipfs") { users.extraUsers = mkIf (cfg.user == "ipfs") {
ipfs = { ipfs = {
@ -211,11 +207,11 @@ in {
description = "IPFS Initializer"; description = "IPFS Initializer";
after = [ "local-fs.target" ]; after = [ "local-fs.target" ];
before = [ "ipfs.service" "ipfs-offline.service" ]; before = [ "ipfs.service" "ipfs-offline.service" "ipfs-norouting.service" ];
preStart = '' preStart = ''
install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir} install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir}
'' + optionalString false/*cfg.autoMount*/ '' '' + optionalString cfg.autoMount ''
install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.ipfsMountDir} install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.ipfsMountDir}
install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.ipnsMountDir} install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.ipnsMountDir}
''; '';

View File

@ -23,8 +23,7 @@ import ./make-test.nix ({ pkgs, ...} : {
services.ipfs = { services.ipfs = {
enable = true; enable = true;
defaultMode = "norouting"; defaultMode = "norouting";
# not yet. See #28621 autoMount = true;
#autoMount = true;
}; };
networking.firewall.allowedTCPPorts = [ 4001 ]; networking.firewall.allowedTCPPorts = [ 4001 ];
}; };
@ -51,7 +50,6 @@ import ./make-test.nix ({ pkgs, ...} : {
$getter->mustSucceed("ipfs --api /ip4/127.0.0.1/tcp/5001 swarm connect /ip4/$addrIp/tcp/4001/ipfs/$addrId"); $getter->mustSucceed("ipfs --api /ip4/127.0.0.1/tcp/5001 swarm connect /ip4/$addrIp/tcp/4001/ipfs/$addrId");
$getter->mustSucceed("[ -n \"\$(ipfs --api /ip4/127.0.0.1/tcp/5001 cat /ipfs/$ipfsHash | grep fnord)\" ]"); $getter->mustSucceed("[ -n \"\$(ipfs --api /ip4/127.0.0.1/tcp/5001 cat /ipfs/$ipfsHash | grep fnord)\" ]");
# not yet. See #28621 $getter->mustSucceed("[ -n \"$(cat /ipfs/$ipfsHash | grep fnord)\" ]");
# $getter->mustSucceed("[ -n \"$(cat /ipfs/$ipfsHash | grep fnord)\" ]");
''; '';
}) })