创建不使用 Docker 的原生 Rocket Pool 节点

注意

本指南适用于 Smartnode v1.6.5 及更高版本

如果您使用的是旧版本,必须先升级到 v1.6.5 或更高版本,然后再配置原生模式。

在本节中,我们将介绍如何在系统上原生安装 Rocket Pool Smartnode 堆栈,而不使用 Docker 容器。

总体计划如下:

  1. 创建一个标准的独立质押设置,为执行客户端、共识客户端/信标节点和验证器客户端配置 systemd 服务
  2. 为 Rocket Pool 组件(即 nodewatchtower 进程)创建系统服务
  3. 配置 Rocket Pool 以与您的客户端服务通信
  4. 更新验证器客户端服务定义,以使用 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 和守护进程二进制文件(如果您愿意,可以忽略此步骤并从源代码构建它们)。从下面的选项卡中选择您的系统使用的平台。

Linux x64
Linux arm64
macOS x64
macOS arm64
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

现在,将守护进程的所有者和组设置为 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"

保存它,然后重新加载您的配置文件:

source ~/.profile

这将允许您使用 rp 命令与 Rocket Pool 的 CLI 交互,这是一个很好的快捷方式。

创建服务

接下来,我们将为 Rocket Pool 节点守护进程创建一个 systemd 服务。这是将在每个检查点后自动检查并领取 RPL 奖励的服务,并在您通过 node deposit 创建 minipool 后对其进行质押。

我们还将创建一个 watchtower 服务。如果您是 Oracle DAO 成员,或者如果您想生成自己的奖励间隔树(稍后在领取奖励部分讨论),将使用它。

Node
Watchtower

创建 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

服务现在已安装。

设置无密码脚本访问

下一步是为 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

设置钱包

接下来,创建一个新的节点钱包或恢复现有钱包。请仔细按照指南的设置钱包部分中的说明操作,然后完成后返回这里。

完成后,使用服务日志文件脚本验证它们是否成功加载了您的新钱包。您还应使用以下命令进行验证:

rp wallet status

如果工作正常,它应该产生以下输出:

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

然后修改您的费用接收者参数如下;从下面的选项卡中选择您选择的客户端:

Lighthouse
Nimbus
Prysm
Teku
--suggested-fee-recipient address 更改为 --suggested-fee-recipient ${FEE_RECIPIENT}
注意

如果您在 Rocket Pool 服务之前启动验证器客户端,它可能会出错,因为此文件尚不存在。不用担心,一旦您初始化并启动了 Rocket Pool 服务,此文件将由 Rocket Pool 创建。

设置数据和密钥目录

接下来,您必须告诉 VC 在哪里存储其数据并加载 Rocket Pool 生成的验证器密钥。点击下面选项卡中您使用的客户端:

Lighthouse
Nimbus
Prysm
Teku

创建以下目录并将其所有者设置为 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

放宽 umask

默认情况下,您的系统通常会附带一个 umask 配置,每当 node 守护进程创建新文件夹时,它都会从组权限中剥离 +w 位。这对于几个共识客户端来说是有问题的,因为当 Smartnode 在 minipool 存款期间生成新验证器密钥时,它们实际上会将锁文件或其他元数据等内容写入到 Smartnode 创建的目录中。

为了解决这个问题并确保您的 VC 正常工作,请放宽您的 umask 设置。例如,您应该考虑将 rp 用户的 umask0022 设置为 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 节点,可以按照指南的下一部分学习如何使用它。

后续步骤

现在您的客户端已安装,我们建议您接下来查看保护您的节点部分中的安全建议。由于您正在运行原生设置,您可能已经完成了其中一些操作;尽管如此,至少探索一下并了解推荐的安全状况与您的系统的契合程度也无妨。