在守护进程服务中更改 IPFS 存储库位置

问题描述 投票:0回答:1

我正在努力创建一个维护 IPFS 守护进程的服务,作为私有 IPFS 网络的一部分。

为了尝试让所有用户都能轻松使用 IPFS,我选择在 /opt 文件夹中初始化 IPFS 存储库。我在

/etc/bash.bashrc
中设置了 IPFS_PATH,以便所有用户的默认位置都在此 /opt 文件夹中:

18:53:02 [foo@server ~]
$ echo $IPFS_PATH
/opt/ipfsNode/.ipfs

完成此操作后,我成功初始化了 IPFS 存储库并能够按预期启动守护进程。

$ ipfs daemon
Initializing daemon...
go-ipfs version: 0.12.2
Repo version: 12
System version: amd64/linux
Golang version: go1.16.15
Swarm is limited to private network of peers with the swarm key
Swarm key fingerprint: [redacted]
Swarm listening on /ip4/<ip>/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/<ip>/tcp/4001
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/<ip>/tcp/5001
WebUI: http://<ip>:5001/webui
Gateway (readonly) server listening on /ip4/<ip>/tcp/8080
Daemon is ready

为了将其转换为服务,我使用

Eleks 实验室
中的示例在 /etc/systemd/system/ipfs.service 创建了此服务定义:

[Unit]
 Description=IPFS Daemon
 After=syslog.target network.target remote-fs.target nss-lookup.target
 [Service]
 Type=simple
 ExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsub
 User=foo
 [Install]
 WantedBy=multi-user.target

但是,在服务启动时,似乎尝试使用在我的主目录顶部初始化的存储库

~/.ipfs
而不是
${IPFS_PATH}/.ipfs
。我如何更改它以找到我已经初始化的存储库?

● ipfs.service - IPFS Daemon
     Loaded: loaded (/etc/systemd/system/ipfs.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2022-06-01 18:43:03 UTC; 17min ago
    Process: 227966 ExecStart=/usr/local/bin/ipfs daemon --enable-namesys-pubsub (code=exited, status=1/FAILURE)
   Main PID: 227966 (code=exited, status=1/FAILURE)

Jun 01 18:43:03 <server> systemd[1]: Started IPFS Daemon.
Jun 01 18:43:03 <server> ipfs[227966]: Initializing daemon...
Jun 01 18:43:03 <server> ipfs[227966]: go-ipfs version: 0.12.2
Jun 01 18:43:03 <server> ipfs[227966]: Repo version: 12
Jun 01 18:43:03 <server> ipfs[227966]: System version: amd64/linux
Jun 01 18:43:03 <server> ipfs[227966]: Golang version: go1.16.15
Jun 01 18:43:03 <server> ipfs[227966]: Error: no IPFS repo found in /home/foo/.ipfs.
Jun 01 18:43:03 <server> ipfs[227966]: please run: 'ipfs init'
Jun 01 18:43:03 <server> systemd[1]: ipfs.service: Main process exited, code=exited, status=1/FAILURE
Jun 01 18:43:03 <server> systemd[1]: ipfs.service: Failed with result 'exit-code'.
linux service ipfs
1个回答
0
投票

这是一个相当老的问题,所以我想你已经弄清楚了 - 但由于没有答案,而且我花了很多时间来克服同样的情况,以下是我为使其发挥作用所做的工作:

  • 由于该服务需要用户,因此您需要将其创建为用户服务:
    ~/.config/systemd/user/ipfs.service
  • 设置服务文件的
    After=
    条件等待外部磁盘挂载,例如
    After=network.target dev-disk-by\x2dlabel-<DEVICELABEL>.device
    (请记住将此设备设置为在启动期间自动安装)
  • 在系统启动期间启用用户服务,无论用户是否登录
    loginctl enable-linger <USER>

然后应该可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.