创建不使用 Docker 的原生 Rocket Pool 节点
注意
本指南适用于 Smartnode v1.6.5 及更高版本。
如果您使用的是旧版本,必须先升级到 v1.6.5 或更高版本,然后再配置原生模式。
在本节中,我们将介绍如何在系统上原生安装 Rocket Pool Smartnode 堆栈,而不使用 Docker 容器。
总体计划如下:
- 创建一个标准的独立质押设置,为执行客户端、共识客户端/信标节点和验证器客户端配置
systemd 服务
- 为 Rocket Pool 组件(即 node 和 watchtower 进程)创建系统服务
- 配置 Rocket Pool 以与您的客户端服务通信
- 更新验证器客户端服务定义,以使用 Rocket Pool 的费用接收者和验证器密钥
这是一个相当复杂的设置,因此需要一些时间才能完成。
由于可用的操作系统和发行版众多,为所有系统提供指南并不实际。本指南中的说明针对基于 Debian 的系统(包括 Ubuntu)量身定制。对于其他发行版或操作系统,您可以遵循指南中描述的高级步骤,但必须根据需要将某些命令替换为您的系统使用的命令。
Danger
本指南面向熟悉 Linux 系统管理和使用的用户。这包括使用终端、创建系统帐户、管理权限和安装服务。我们假设您熟悉这些活动 - 由于您将自己管理大部分基础设施,我们仅为原生安装提供有限的支持。如果您不熟悉这些活动,我们不建议您使用原生模式。
步骤 1:设置执行客户端和共识客户端
原生模式实际上是对标准独立质押设置的扩展,只需允许 Smartnode 软件连接到它已经运行的客户端(需要进行一些小的修改)。
为此,我们建议您首先遵循社区提供的一些常规独立质押指南:
请注意,您实际上不会按照这些指南中定义的方式创建验证器 - Rocket Pool 会为您完成这项工作。您可以忽略涉及质押存款 CLI 工具的部分。
您只需按照指南进行操作,直到安装了执行客户端服务、共识客户端/信标节点服务和验证器客户端服务,并且它们都在同步链。跳过涉及为验证器提供资金和记录其助记词的步骤。
此外,费用接收者有一个特殊情况 - 当您进入指南中指定验证器客户端配置中费用接收者的部分时,暂时将其留空。我们将在下面描述如何为 Rocket Pool 验证器设置它。
一旦安装了客户端,并且您可以在其日志中看到它们正在正确同步链,就可以按照后续步骤设置 Rocket Pool Smartnode 并将其连接到您的客户端。
步骤 2:安装 Rocket Pool
创建服务帐户
第一步是为 Rocket Pool 服务创建一个新的系统帐户,并禁用其登录和 shell 访问权限:
sudo useradd -r -s /sbin/nologin rp
现在,将您自己添加到 rp 组。您需要这样做才能使用 Rocket Pool CLI,因为它和 Rocket Pool 守护进程都需要访问执行层钱包文件。
sudo usermod -aG rp $USER
最后,还要将您的验证器客户端的用户帐户添加到 rp 组。该用户帐户的名称取决于您遵循的设置 VC 服务的指南。
例如,如果您的 VC 以用户 lighthousevalidator 身份运行,您可以执行以下操作:
sudo usermod -aG rp lighthousevalidator
完成后,注销并重新登录以使更改生效。
设置二进制文件
首先为 Rocket Pool 创建一个文件夹和一个数据子文件夹。您可以将其放在任何位置;在本指南中,我将把它放在 /srv 中:
sudo mkdir -p /srv/rocketpool
sudo chown $USER:$USER /srv/rocketpool
现在,下载 CLI 和守护进程二进制文件(如果您愿意,可以忽略此步骤并从源代码构建它们)。从下面的选项卡中选择您的系统使用的平台。
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-cli-linux-amd64 -O /usr/local/bin/rocketpool
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-daemon-linux-amd64 -O /usr/local/bin/rocketpoold
sudo chmod +x /usr/local/bin/rocketpool
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-cli-linux-arm64 -O /usr/local/bin/rocketpool
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-daemon-linux-arm64 -O /usr/local/bin/rocketpoold
sudo chmod +x /usr/local/bin/rocketpool
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-cli-darwin-amd64 -O /usr/local/bin/rocketpool
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-daemon-darwin-amd64 -O /usr/local/bin/rocketpoold
sudo chmod +x /usr/local/bin/rocketpool
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-cli-darwin-arm64 -O /usr/local/bin/rocketpool
sudo wget https://github.com/rocket-pool/smartnode/releases/latest/download/rocketpool-daemon-darwin-arm64 -O /usr/local/bin/rocketpoold
sudo chmod +x /usr/local/bin/rocketpool
现在,将守护进程的所有者和组设置为 rp:
sudo chown rp:rp /usr/local/bin/rocketpoold
最后,在守护进程二进制文件上设置 suid 位和其他权限位:
sudo chmod u+sx,g+sx,o-rwx /usr/local/bin/rocketpoold
这将确保守护进程始终以 rp 用户身份运行,因此它始终具有正确的权限集。
注意
如果您不执行此操作,Smartnode 很可能会因权限错误而失败。请务必运行此命令!
设置安装文件夹
安装了 CLI 和守护进程后,您需要设置 Smartnode 期望存在的文件夹结构和附带文件。首先创建以下文件夹:
mkdir -p /srv/rocketpool/data/validators && sudo chmod 775 /srv/rocketpool/data/validators
mkdir /srv/rocketpool/data/rewards-trees
mkdir /srv/rocketpool/data/custom-keys
sudo chown -R rp:rp /srv/rocketpool/data
接下来,下载以下脚本 - 当需要停止或重新启动验证器客户端以更改其费用接收者(稍后讨论)或在创建新 minipool 后加载新密钥时,Rocket Pool 将使用它们:
wget https://github.com/rocket-pool/smartnode/raw/master/shared/services/rocketpool/assets/install/scripts/restart-vc.sh -O /srv/rocketpool/restart-vc.sh
wget https://github.com/rocket-pool/smartnode/raw/master/shared/services/rocketpool/assets/install/scripts/stop-validator.sh -O /srv/rocketpool/stop-validator.sh
chmod +x /srv/rocketpool/restart-vc.sh
chmod +x /srv/rocketpool/stop-validator.sh
现在使用您选择的编辑器打开 ~/.profile,并在末尾添加这一行:
alias rp="rocketpool -d /usr/local/bin/rocketpoold -c /srv/rocketpool"
保存它,然后重新加载您的配置文件:
这将允许您使用 rp 命令与 Rocket Pool 的 CLI 交互,这是一个很好的快捷方式。
创建服务
接下来,我们将为 Rocket Pool 节点守护进程创建一个 systemd 服务。这是将在每个检查点后自动检查并领取 RPL 奖励的服务,并在您通过 node deposit 创建 minipool 后对其进行质押。
我们还将创建一个 watchtower 服务。如果您是 Oracle DAO 成员,或者如果您想生成自己的奖励间隔树(稍后在领取奖励部分讨论),将使用它。
创建 rp-node 服务:
sudo nano /etc/systemd/system/rp-node.service
内容:
[Unit]
Description=rp-node
After=network.target
[Service]
Type=simple
User=rp
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/rocketpoold --settings /srv/rocketpool/user-settings.yml node
[Install]
WantedBy=multi-user.target
为服务创建一个日志文件,以便您可以查看其输出 - 这将替代 rocketpool service logs node 的行为:
nano /srv/rocketpool/node-log.sh
内容:
#!/bin/bash
journalctl -u rp-node -b -f
保存它,然后使其可执行:
chmod +x /srv/rocketpool/node-log.sh
现在您可以通过简单运行以下命令来查看节点的日志:
sudo /srv/rocketpool/node-log.sh
为 watchtower 创建一个服务:
sudo nano /etc/systemd/system/rp-watchtower.service
内容:
[Unit]
Description=rp-node
After=network.target
[Service]
Type=simple
User=rp
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/rocketpoold --settings /srv/rocketpool/user-settings.yml watchtower
[Install]
WantedBy=multi-user.target
为 watchtower 创建一个日志文件:
nano /srv/rocketpool/watchtower-log.sh
内容:
#!/bin/bash
journalctl -u rp-watchtower -b -f
保存它,然后使其可执行:
chmod +x /srv/rocketpool/watchtower-log.sh
现在您可以通过简单运行以下命令来查看 watchtower 的日志:
sudo /srv/rocketpool/watchtower-log.sh
服务现在已安装。
设置无密码脚本访问
下一步是为 rp 用户提供在创建新验证器密钥时重新启动验证器客户端的能力,以及在检测到紧急情况时停止验证器客户端的能力。
使用 visudo 创建一个新的 sudoers 文件:
sudo visudo -f /etc/sudoers.d/rocketpool
向其中添加以下行:
Cmnd_Alias RP_RESTART = /usr/bin/systemctl restart <validator service name>
Cmnd_Alias RP_STOP = /usr/bin/systemctl stop <validator service name>
rp ALL=(ALL) NOPASSWD: RP_RESTART, RP_STOP
其中 <validator service name> 是您的 VC 服务的名称(例如 lighthousevalidator)
现在,修改 /srv/rocketpool/restart-vc.sh:
- 取消注释末尾的行并将其更改为
sudo systemctl restart <validator service name>
同时修改 /srv/rocketpool/stop-validator.sh:
- 取消注释末尾的行并将其更改为
sudo systemctl stop <validator service name>
完成!node 进程现在可以根据需要自动重新启动或停止您的 VC。
步骤 3:配置 Smartnode
现在所有服务都已创建,是时候配置 Smartnode 堆栈了。
请访问配置 Smartnode 堆栈(原生模式)指南,完成后返回这里。
启用和运行服务
安装完所有服务后,是时候:
- 启用它们,以便它们在出现故障时自动重新启动,并在重新启动时自动启动
- 启动它们全部
sudo systemctl daemon-reload
sudo systemctl enable rp-node rp-watchtower
sudo systemctl start rp-node rp-watchtower
设置钱包
接下来,创建一个新的节点钱包或恢复现有钱包。请仔细按照指南的设置钱包部分中的说明操作,然后完成后返回这里。
完成后,使用服务日志文件脚本验证它们是否成功加载了您的新钱包。您还应使用以下命令进行验证:
如果工作正常,它应该产生以下输出:
Your Smartnode is currently using the Hoodi Test Network.
The node wallet is initialized.
Node account: <address>
步骤 4:更新 VC 服务定义
与独立质押设置不同,Rocket Pool 会自动生成和管理其验证器密钥。您需要对刚刚创建的 VC 服务定义文件进行一些调整,以便它能够正确使用 Rocket Pool,包括:
- 费用接收者
- VC 的数据或钱包目录
- VC 的密钥和秘密目录
我们将逐步介绍每个客户端的这些步骤。
设置费用接收者文件
注意
遵循这些步骤至关重要 - 如果不这样做并使用错误的费用接收者,将导致对您的验证器应用惩罚,并从您的信标链余额中扣除!
费用接收者是您提供给验证器客户端的参数,用于指定执行层上您希望优先费用和 MEV 奖励发送到的地址。Rocket Pool 有两个不同的费用接收者地址:
- 如果您已选择加入平滑池,它必须是平滑池的地址
- 如果您已选择退出平滑池,它必须是您节点的费用分配器地址
要了解有关平滑池和费用分配器的更多信息,请参阅指南的费用分配器和平滑池部分。
Rocket Pool 的 node 服务将通过检测需要哪个地址并在配置文件中设置它,然后重新启动验证器客户端服务以接收更改,从而自动为您设置此项。您的验证器客户端服务可以自动使用该配置文件,因此您无需硬编码费用接收者。
打开您刚刚为验证器客户端创建的 systemd 服务定义文件。在 ExecStart 行之前,添加这一行:
EnvironmentFile=/srv/rocketpool/data/validators/rp-fee-recipient-env.txt
然后修改您的费用接收者参数如下;从下面的选项卡中选择您选择的客户端:
将 --suggested-fee-recipient address 更改为 --suggested-fee-recipient ${FEE_RECIPIENT}
将 --suggested-fee-recipient=address 更改为 --suggested-fee-recipient=${FEE_RECIPIENT}
将 --suggested-fee-recipient address 更改为 --suggested-fee-recipient ${FEE_RECIPIENT}
将 --validators-proposer-default-fee-recipient=address 更改为 --validators-proposer-default-fee-recipient=${FEE_RECIPIENT}
注意
如果您在 Rocket Pool 服务之前启动验证器客户端,它可能会出错,因为此文件尚不存在。不用担心,一旦您初始化并启动了 Rocket Pool 服务,此文件将由 Rocket Pool 创建。
设置数据和密钥目录
接下来,您必须告诉 VC 在哪里存储其数据并加载 Rocket Pool 生成的验证器密钥。点击下面选项卡中您使用的客户端:
创建以下目录并将其所有者设置为 rp:
sudo mkdir -p /srv/rocketpool/data/validators/lighthouse/validators
sudo mkdir -p /srv/rocketpool/data/validators/lighthouse/secrets
sudo chown -R rp:rp /srv/rocketpool/data/validators/lighthouse
sudo chmod -R 775 /srv/rocketpool/data/validators/lighthouse
现在,在 Lighthouse VC 的服务定义文件中添加或更改以下参数为这些新值:
--datadir /srv/rocketpool/data/validators/lighthouse
创建以下目录并将其所有者设置为 rp:
sudo mkdir -p /srv/rocketpool/data/validators/nimbus/validators
sudo mkdir -p /srv/rocketpool/data/validators/nimbus/secrets
sudo chown -R rp:rp /srv/rocketpool/data/validators/nimbus
sudo chmod -R 775 /srv/rocketpool/data/validators/nimbus
现在,在 Nimbus 的服务定义文件中添加或更改以下参数为以下内容:
--validators-dir=/srv/rocketpool/data/validators/nimbus/validators --secrets-dir=/srv/rocketpool/data/validators/nimbus/secrets
创建以下目录并将其所有者设置为 rp:
sudo mkdir -p /srv/rocketpool/data/validators/prysm-non-hd/direct/accounts
sudo chown -R rp:rp /srv/rocketpool/data/validators/prysm-non-hd
sudo chmod -R 775 /srv/rocketpool/data/validators/prysm-non-hd
在 Prysm VC 的服务定义文件中添加或更改以下参数为这些新值:
--wallet-dir /srv/rocketpool/data/validators/prysm-non-hd --wallet-password-file /srv/rocketpool/data/validators/prysm-non-hd/direct/accounts/secret
在您创建新的 Rocket Pool minipool(稍后在指南中描述)之前,VC 将无法启动,因为在那之前不会创建这些文件,但信标节点将能够正确同步。
创建以下目录并将其所有者设置为 rp:
sudo mkdir -p /srv/rocketpool/data/validators/teku/keys
sudo mkdir -p /srv/rocketpool/data/validators/teku/passwords
sudo chown -R rp:rp /srv/rocketpool/data/validators
sudo chmod -R 775 /srv/rocketpool/data/validators/teku
现在,在 Teku VC 的服务定义文件中添加或更改以下参数为以下内容:
--data-path=/srv/rocketpool/data/validators/teku --validator-keys=/srv/rocketpool/data/validators/teku/keys:/srv/rocketpool/data/validators/teku/passwords
放宽 umask
默认情况下,您的系统通常会附带一个 umask 配置,每当 node 守护进程创建新文件夹时,它都会从组权限中剥离 +w 位。这对于几个共识客户端来说是有问题的,因为当 Smartnode 在 minipool 存款期间生成新验证器密钥时,它们实际上会将锁文件或其他元数据等内容写入到 Smartnode 创建的目录中。
为了解决这个问题并确保您的 VC 正常工作,请放宽您的 umask 设置。例如,您应该考虑将 rp 用户的 umask 从 0022 设置为 0002。
每个系统都不同,因此请查阅涵盖您的操作系统的指南,了解如何执行此操作。
警告
此步骤对于确保正确处理自动质押和验证职责至关重要。如果您在 minipool 通过 12 小时清洗检查并进入 staking 状态后,在 VC 的日志中注意到权限问题,您可能需要在包含验证器密钥的文件夹上运行 sudo chmod 775,以便您的 VC 服务可以写入该文件夹。
重新加载 VC 服务
完成这些更改后,您现在可以使用以下命令重新加载并重新启动 VC 服务:
sudo systemctl daemon-reload
sudo systemctl restart <vc-service>
如果不使用 Prysm,请仔细观察 VC 的日志,以确保它成功正确启动,并且正确定义了以下内容:
您可以使用以下方法验证这一点,例如,ps aux | grep fee 来过滤正在运行的进程,以查看您的 VC 使用的费用接收者。它应该与 /srv/rocketpool/data/validators/rp-fee-recipient-env.txt 中定义的相同。
如果它们都使用正确的值,那么恭喜!您已成功设置 Rocket Pool 节点,可以按照指南的下一部分学习如何使用它。
后续步骤
现在您的客户端已安装,我们建议您接下来查看保护您的节点部分中的安全建议。由于您正在运行原生设置,您可能已经完成了其中一些操作;尽管如此,至少探索一下并了解推荐的安全状况与您的系统的契合程度也无妨。