Upgrade a node
The node installer pins the supported Rusk and Rusk Wallet versions for each network. Rerunning it downloads and verifies replacement binaries before stopping the current Rusk service.
Before upgrading
Section titled “Before upgrading”Record the current state:
ruskquery versionruskquery info | jq '{version, chain_id, kadcast_address}'ruskquery peersruskquery block-heightsystemctl is-active ruskRetain a secure copy of consensus keys and intentional configuration. The installer preserves:
/opt/dusk/conf/consensus.keys;/opt/dusk/services/dusk.conf;/opt/dusk/services/rusk.conf.user; and- chain state under
/opt/dusk/rusk.
It regenerates /opt/dusk/conf/rusk.toml, genesis.toml, the Rusk systemd unit, managed binaries and scripts, and the selected user’s wallet configuration. Save the old rusk.toml for comparison if it contains intentional changes, but do not copy it over the new network configuration wholesale.
Run the installer
Section titled “Run the installer”Choose the command matching the node.
Mainnet provisioner or full node
Section titled “Mainnet provisioner or full node”curl --proto '=https' --tlsv1.2 -sSfL \ https://github.com/dusk-network/node-installer/releases/latest/download/node-installer.sh \ | sudo bashMainnet archive node
Section titled “Mainnet archive node”curl --proto '=https' --tlsv1.2 -sSfL \ https://github.com/dusk-network/node-installer/releases/latest/download/node-installer.sh \ | sudo bash -s -- --feature archiveTestnet provisioner or full node
Section titled “Testnet provisioner or full node”curl --proto '=https' --tlsv1.2 -sSfL \ https://github.com/dusk-network/node-installer/releases/latest/download/node-installer.sh \ | sudo bash -s -- --network testnetTestnet archive node
Section titled “Testnet archive node”curl --proto '=https' --tlsv1.2 -sSfL \ https://github.com/dusk-network/node-installer/releases/latest/download/node-installer.sh \ | sudo bash -s -- --network testnet --feature archiveWhen an automation process runs the installer directly as root, append --user <operator-user> so the wallet configuration is written to the intended home directory. A normal interactive sudo invocation uses SUDO_USER automatically.
The installer stops Rusk only after downloads and binary version checks pass. It enables and reloads the systemd unit, but leaves Rusk stopped.
Review and restart
Section titled “Review and restart”If the previous rusk.toml contained intentional operator settings, compare it with the generated file and reapply only the required values. Archive API operators commonly need to restore their [http] configuration.
Start the service:
sudo systemctl start ruskThen verify all layers:
systemctl is-active rusksystemctl show rusk -p ActiveState -p SubState -p NRestartsruskquery info | jq '{version, chain_id, kadcast_address}'ruskquery peersruskquery block-heightsudo tail -n 50 /var/log/rusk.logCheck the height again after roughly 30 seconds and compare it with the matching network explorer or public endpoint. For an archive node, also run an archive GraphQL query before returning API traffic to it.
If Rusk fails to start, inspect:
sudo systemctl status rusk --no-pagersudo journalctl -u rusk --since "15 minutes ago" --no-pagersudo tail -n 100 /var/log/rusk_recovery.logDo not repeatedly rerun the installer until the first failure is understood. See Troubleshooting and Roll back a node update when appropriate.
Testnet resets
Section titled “Testnet resets”Testnet can be reset independently of mainnet. Follow an announced reset by reinstalling with --network testnet, then use the supported fast-sync or reset procedure specified in the announcement. Do not reset state merely because a normal upgrade temporarily lags the network.