109 个版本 (9 个破坏性版本)
0.10.1 | 2024年7月29日 |
---|---|
0.9.7 | 2024年6月12日 |
0.7.2 | 2024年3月28日 |
0.1.11 | 2023年12月21日 |
0.1.1 | 2023年11月29日 |
#612 在 开发工具
每月下载量137次
用于 node-launchpad
1MB
19K SLoC
安全节点管理器
安全节点管理器是一个命令行应用程序,用于安装、管理和以服务形式运行 safenode
。
它支持 Linux、macOS 和 Windows 系统。
安装
最新版本可以通过 safeup 安装
safeup node-manager
您还可以从本仓库的发行版中获取适用于您平台的二进制文件。
作为服务的节点
Safenode 管理器的主要用例是将 safenode
设置为长期运行的背景服务,使用操作系统提供的服务基础设施。
在macOS和大多数Linux发行版中,支持用户模式服务。传统上,服务是系统级的基础设施,需要提升权限来创建和使用。然而,使用用户模式服务,它们可以在不使用sudo的情况下定义和使用。主要区别在于,用户模式服务需要一个活跃的用户会话,而系统级服务可以在没有任何活跃会话的情况下完全在后台运行。选择哪种更适合他们的用例是用户的决定。在Linux上,一些服务管理器,如用于Alpine的OpenRC,不支持用户模式服务。大多数发行版使用Systemd,它确实支持它们。
本指南中定义的命令将基于用户模式服务运行,因此将不会使用sudo
。如果您想运行系统级服务,可以按照相同的指南进行,但只需在每个命令前加上sudo
。
Windows根本不支持用户模式服务,因此节点管理器必须始终在提升的、管理会话中使用。
创建服务
首先,使用add
命令创建一些服务
$ safenode-manager add --count 3 --peer /ip4/139.59.168.228/udp/56309/quic-v1/p2p/12D3KooWFTMtaqu24ddDSXk9v5YxnuhJmTLFRunER1CG4wZ2XLUU
这将下载最新的safenode
二进制文件并创建三个服务,这些服务最初将连接到指定的节点。很快,将不再需要指定节点。
有许多参数可用于自定义服务。例如,您可以选择节点运行的端口或safenode
的版本。运行safenode-manager add --help
以查看所有可用选项。
注意:在所有平台上创建服务都需要提升权限。
现在运行status
命令
$ safenode-manager status
=================================================
Safenode Services
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode1 - ADDED -
safenode2 - ADDED -
safenode3 - ADDED -
我们可以看到已添加服务,但它们尚未运行。
启动服务
使用start
命令启动每个服务
$ safenode-manager start
不提供任何参数将启动所有可用的服务。如果需要,可以使用--service-name
参数单独启动服务。
服务启动后,再次运行status
命令
$ safenode-manager status
=================================================
Safenode Services
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode1 12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING 81
safenode2 12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING 82
safenode3 12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING 79
我们可以看到我们的服务正在运行,节点已与其他节点建立连接。
现在,再次运行status
命令,但带有--details
标志
=================================================
Safenode Services
=================================================
Refreshing the node registry...
============================
safenode1 - RUNNING
============================
Version: 0.105.0
Peer ID: 12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq
RPC Socket: 127.0.0.1:41785
Listen Addresses: Some["/ip4/127.0.0.1/udp/34653/quic-v1/p2p/12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq", "/ip4/192.168.121.7/udp/34653/quic-v1/p2p/12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq"]
PID: 3137
Data path: /var/safenode-manager/services/safenode1
Log path: /var/log/safenode/safenode1
Bin path: /var/safenode-manager/services/safenode1/safenode
Connected peers: 10
<remaining output snipped>
我们将为每个节点获得更多详细信息,包括其日志路径。使用提供的位置,您可以自由查看节点生成的日志。
节点现在可以像这样运行,但出于本指南的目的,我们将做一些更多的事情。
添加更多节点
可以像之前一样再次运行add
命令
safenode-manager add --count 3 --peer /ip4/46.101.80.187/udp/58070/quic-v1/p2p/12D3KooWKgJQedzCxrp33u3dBD1mUZ9HTjEjgrxskEBvzoQWkRT9
后续的status
命令将显示额外的三个节点,共计六个
$ safenode-manager status
=================================================
Safenode Services
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode1 12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING 4
safenode2 12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING 4
safenode3 12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING 3
safenode4 - ADDED -
safenode5 - ADDED -
safenode6 - ADDED -
同样,新节点尚未启动。
运行start
命令启动它们,然后观察状态
$ safenode-manager status
=================================================
Safenode Services
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode1 12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING 138
safenode2 12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING 177
safenode3 12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING 144
safenode4 12D3KooWLH9VRAoUMj4bUjtzcKS3mqfzyc46TxBkBzvUXfV1bjaT RUNNING 2
safenode5 12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG RUNNING 1
safenode6 12D3KooWBip2g5FakT1dZHdrhdmnctgKqhbRBQA5ZpvtHh4XPRXJ RUNNING 30
删除节点
如果我们想删除我们的节点之一,可以使用remove
命令。
假设我们想删除第5个服务。首先,我们需要停止该服务。运行以下命令
$ safenode-manager stop --service-name safenode5
观察safenode5
已被停止,但其他服务仍在运行
$ safenode-manager status
=================================================
Safenode Services
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode1 12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING 10
safenode2 12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING 5
safenode3 12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING 2
safenode4 12D3KooWLH9VRAoUMj4bUjtzcKS3mqfzyc46TxBkBzvUXfV1bjaT RUNNING 2
safenode5 12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG STOPPED -
safenode6 12D3KooWBip2g5FakT1dZHdrhdmnctgKqhbRBQA5ZpvtHh4XPRXJ RUNNING 29
现在它已停止,删除它
$ safenode-manager remove --service-name safenode5
status
命令将不再显示该服务
vagrant@ubuntu2204:~$ safenode-manager status
=================================================
Safenode Services
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode1 12D3KooWGQu92xCXuiK6AysbHn6kHyfXqyzNDxNGnnDTgd56eveq RUNNING 2
safenode2 12D3KooWQGVfcwrPFvC6PyCva1cJu8NZVhdZCuPHJ4vY79yuKC3A RUNNING 96
safenode3 12D3KooWMqRH6EF1Km61TAW9wTuv9LgDabKMY9DJSGyrxUafXP6b RUNNING 127
safenode4 12D3KooWLH9VRAoUMj4bUjtzcKS3mqfzyc46TxBkBzvUXfV1bjaT RUNNING 76
safenode6 12D3KooWBip2g5FakT1dZHdrhdmnctgKqhbRBQA5ZpvtHh4XPRXJ RUNNING 133
然而,我们仍将在详细视图中看到它
$ safenode-manager status --details
=================================================
Safenode Services
=================================================
Refreshing the node registry...
<output snipped>
============================
safenode5 - REMOVED
============================
Version: 0.105.0
Peer ID: 12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG
RPC Socket: 127.0.0.1:38579
Listen Addresses: Some(["/ip4/127.0.0.1/udp/58354/quic-v1/p2p/12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG", "/ip4/192.168.121.7/udp/58354/quic-v1/p2p/12D3KooWEcbpvSSTmSyuzqP3gE9bE7uqYFatHhkJXr8PBiqmESEG"])
PID: -
Data path: /var/safenode-manager/services/safenode5
Log path: /var/log/safenode/safenode5
Bin path: /var/safenode-manager/services/safenode5/safenode
Connected peers: -
<output snipped>
升级
可以使用节点管理器不断升级节点服务。
假设我们有五个服务
$ safenode-manager status
=================================================
Safenode Services
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode1 12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap RUNNING 1
safenode2 12D3KooWNbRBR43rdFR44EAbwzBrED3jWUiWKkHD2oabw2jKZ9eF RUNNING 1
safenode3 12D3KooWGYEuqXRhKVF2WK499oCBpkh9c6K7jy8BNSfqGosSzNZ8 RUNNING 1
safenode4 12D3KooWS6WGnhbSfLywaepfZbbqgxTLhr66N1PXU4GVLWDBRZRF RUNNING 1
safenode5 12D3KooWNdEYQAutzcGo26rZayew2rzE24y5VFVxTnsefNevc1Ly RUNNING 1
使用--details
标志,我们可以看到它们不是最新版本
$ safenode-manager status --details
=================================================
Safenode Services
=================================================
Refreshing the node registry...
============================
safenode1 - RUNNING
============================
Version: 0.104.38
Peer ID: 12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap
RPC Socket: 127.0.0.1:37931
Listen Addresses: Some(["/ip4/127.0.0.1/udp/39890/quic-v1/p2p/12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap", "/ip4/192.168.121.114/udp/39890/quic-v1/p2p/12D3KooWKaNFPoRf8E2vsdSwBNyhWpe7csNkqwXaunNVxXGarxap"])
PID: 3285
Data path: /var/safenode-manager/services/safenode1
Log path: /var/log/safenode/safenode1
Bin path: /var/safenode-manager/services/safenode1/safenode
Connected peers: 0
<remaining output snipped>
为了简洁,剩余的输出已被省略,但其他四个也是0.104.38
。在撰写本文时,最新版本是0.105.3
。
我们可以使用upgrade
命令将每个服务升级到最新版本
$ safenode-manager upgrade
=================================================
Upgrade Safenode Services
=================================================
Retrieving latest version of safenode...
Latest version is 0.105.3
Downloading safenode version 0.105.3...
Download completed: /tmp/ae310e50-d104-45bc-9619-22e1328d8c8b/safenode
Refreshing the node registry...
<output snipped>
Upgrade summary:
✓ safenode1 upgraded from 0.104.38 to 0.105.3
✓ safenode2 upgraded from 0.104.38 to 0.105.3
✓ safenode3 upgraded from 0.104.38 to 0.105.3
✓ safenode4 upgraded from 0.104.38 to 0.105.3
✓ safenode5 upgraded from 0.104.38 to 0.105.3
同样,为了简洁,一些命令输出已被省略,但摘要表明每个服务都是从0.104.38
升级到0.105.3
。
与其他命令一样,如果没有提供参数,upgrade
将作用于所有服务,但可以使用--service-name
或--peer-id
参数来升级特定服务。这两个参数都可以多次使用以作用于多个服务。
节点管理器将确定safenode
的最新版本,下载它,然后对于每个运行中的服务,如果该服务比最新版本旧,它将停止该服务,用新二进制文件覆盖旧文件,并再次启动该服务。
降级
在某些情况下,可能需要将safenode
降级到以前的版本。通过提供--version
和--force
参数,upgrade
命令支持此功能,以便强制节点管理器接受较低的版本。
本地网络
Safenode管理器还可以创建本地网络,这对于开发和快速实验非常有用。在本地网络中,节点将作为进程而不是服务运行。本地操作定义在local
子命令下。
要创建本地网络,请使用run
命令
$ safenode-manager local run
=================================================
Launching Local Network
=================================================
Retrieving latest version for faucet...
Downloading faucet version 0.4.3...
Download completed: /tmp/4dc310dd-74ef-4dc5-af36-3bc92a882db1/faucet
Retrieving latest version for safenode...
Downloading safenode version 0.105.3...
Download completed: /tmp/f63d3ca8-2b8e-4630-9df5-a13418d5f826/safenode
Launching node 1...
Logging to directory: "/home/chris/.local/share/safe/node/12D3KooWPArH2XAw2sapcthNNcJRbbSuUtC3eBZrJtxi8DfcN1Yn/logs"
Node started
<remaining output snipped>
注意:本地网络不需要提升权限。
检查status
命令的输出
$ safenode-manager status
=================================================
Local Network
=================================================
Refreshing the node registry...
Service Name Peer ID Status Connected Peers
safenode-local1 12D3KooWPArH2XAw2sapcthNNcJRbbSuUtC3eBZrJtxi8DfcN1Yn RUNNING 7
safenode-local2 12D3KooWShWom22VhgkDX7APqSzCmXPNsfZA17Y2GSJpznunAp8M RUNNING 0
safenode-local3 12D3KooWJwLaqsHvVaBkTHLn8Zf5hZdBaoC9pUNtgANymjF3XEmR RUNNING 0
safenode-local4 12D3KooWP1dwBpCQa6mNY62h9LYN5w4gsTqpQfsH1789pvbNVkSQ RUNNING 0
safenode-local5 12D3KooWADWar7uP8pgxahjcgNsvpzVdp2HxtwQoc5ytvgjjFN8r RUNNING 0
safenode-local6 12D3KooWEvPZzdGXPFNGBR5xjt55tSTFJa9ByqLvZAWZ9uYRqYh1 RUNNING 0
safenode-local7 12D3KooWAbLW3UfF9VdeTxtha7TMuMmFyhZGpXi9Anv9toNLQgfv RUNNING 0
safenode-local8 12D3KooWMYhdDsp2eUjGGgqGrStGxyVzoZsui9YQH4N9B6Fh36H3 RUNNING 2
safenode-local9 12D3KooWFMQ9rumJKjayipPgfnCP355oXcD6uzoBFZq985ij1MZP RUNNING 7
safenode-local10 12D3KooWEN8bW2yPfBhJPG9w5xT3zkWGqA9JYY7qkgc1LmuWJshF RUNNING 0
safenode-local11 12D3KooWSUi43YFYQxoRk8iyh7XE3SSeFvLYvANjRjSTS2CAXTwF RUNNING 0
safenode-local12 12D3KooWNhwMVs8jBSwsfM6gD4vhwksVUaP2EMmwReNiibMqPBYT RUNNING 0
safenode-local13 12D3KooWDqgKpbrenxeWyAAw2j45wW7tCpiHYxNnTL7tFioBCTSv RUNNING 1
safenode-local14 12D3KooWAxzJjhxrr2QD4UwkrovVTy5PnjWCFkBPrUJdPVzdNmDP RUNNING 0
safenode-local15 12D3KooWCE3Ccp1GEiXLU8pQdYJued5G6xAiRiarSSgXRhHwG6XJ RUNNING 7
safenode-local16 12D3KooWRC9wjjsnUTEjP8F6pNVu4LacgPMYNP8p3WNeBcgqEGZH RUNNING 0
safenode-local17 12D3KooWKNnLBkDXvdyPV8FALGApnZjtyuxhfzBED4boBQX8gwvD RUNNING 7
safenode-local18 12D3KooWGvMXmnGU3s7g8XZXSExmscXfV8cqHrAQkVKicRxJrx5E RUNNING 1
safenode-local19 12D3KooWHFzdXEiajdSbJRRLnJq56qw2pke9HvneeziuWZB7TTsD RUNNING 2
safenode-local20 12D3KooWMWuuiPwz1mASasxDuT2QpkDFg46RjNiY6FXprFrgFAbT RUNNING 7
safenode-local21 12D3KooWAkgCaCPMBG2gkZJRQJwfM5XYyJ66LmCSidXK6R8x2b7q RUNNING 6
safenode-local22 12D3KooWPep6B7YfsXWdmjDtyNvm8TZ3bvmn9dZ9w9CPtssW2Wtz RUNNING 7
safenode-local23 12D3KooWF486Rjn5DZ7VXcZi99bTabZsWNf73dnnfmpdjusdeEu9 RUNNING 0
safenode-local24 12D3KooWLLWGzyFtB3i1WNrsdu2eW4k3gT7Wewf9D8srgb1dNwcj RUNNING 0
safenode-local25 12D3KooWPpVim2rRHeAYTrM8mSkZjUt5SjQ4v5xPF2h7wi8H1jRj RUNNING 0
faucet - RUNNING -
因此,默认情况下,已启动了25个节点进程,以及一个水龙头。水龙头在上传文件时发放代币。现在我们可以对本地网络运行safe
命令。
使用本地网络最常见的情况是开发,但您也可以在本地测试许多功能。有关更多详细信息,请参阅主README中的“使用本地网络”部分。
完成后,运行safenode-manager local kill
来销毁本地网络。
运行集成测试
有时需要在本地设置中运行集成测试。问题是,系统级测试需要root权限才能运行,它们还会创建真实的服务,这您可能不希望在开发机器上使用。
可以在由sn_node_manager
存档目录中的Vagrantfile
提供的虚拟机(VM)中运行测试。该机器被定义为使用libvirt而不是Virtualbox,因此需要安装该软件,但这超出了本文档的范围。
假设您已经安装了libvirt,可以通过运行vagrant up
来获取虚拟机。一旦机器可用,运行vagrant ssh
以在内部获得shell会话。为了运行测试,使用sudo su -
切换到root用户。作为配置过程的一部分,当前的safe_network
代码被复制到root用户的主目录。要运行测试
cd safe_network
just node-man-integration-tests
Justfile
中的目标是创建一个本地网络,然后测试将针对该网络运行。
依赖项
~46-83MB
~1.5M SLoC