# Cosmovisor
Cosmovisor enables you to download new binaries ahead of time and be completely (or close to completely) hands off during the chain halt upgrade time.
You'll need to set up some environment variables and folder structure in addition to the installation.
# Setup
1. Install Cosmovisor confirm the latest tag on the Cosmos SDK github (opens new window)
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest
Check the version with cosmovisor version
2. Create the following required directories
mkdir -p ~/.paloma/cosmovisor
mkdir ~/.paloma/cosmovisor/genesis
mkdir ~/.paloma/cosmovisor/genesis/bin
mkdir ~/.paloma/cosmovisor/upgrades
The ~/.paloma/cosmovisor
directory has a genesis
subfolder which contains the palomad
version of when you first set up Cosmovisor. All subsequent palomad
binary versions will be placed in inside the upgrades
subfolder directory. Additionally, comsmovisor creates a current
symlink to the currently active directory.
.
├── current -> genesis or upgrades/{upgrade_tag_name}
├── genesis
│ └── bin
│ └── palomad
└── upgrades
└── {upgrade_tag_name}
├── bin
│ └── palomad
└── upgrade-info.json
Please note that ~/.paloma/cosmovisor
only stores the palomad
binaries. The cosmovisor
binary itself is stored in any typical location (e.g. /usr/local/bin).
3. Set the environment variables
Visit the official documentation (opens new window) for more information on these variables.
cat <<EOT >> ~/.profile
# Setup Cosmovisor
export DAEMON_NAME=palomad
export DAEMON_HOME=$HOME/.paloma
export DAEMON_ALLOW_DOWNLOAD_BINARIES=false
export DAEMON_LOG_BUFFER_SIZE=512
export DAEMON_RESTART_AFTER_UPGRADE=true
export UNSAFE_SKIP_BACKUP=true
EOT
source ~/.profile
You may leave out UNSAFE_SKIP_BACKUP=true
, however the backup takes a decent amount of time and space.
4. Copy the current binary into cosmovisor folder
cp /usr/local/bin/palomad $DAEMON_HOME/cosmovisor/genesis/bin
5. Update the systemd service file
You may want to change the description and you will need to u[date the ExecStart
comment to reference the cosmovisor
binary.
[Unit]
Description=Paloma (Cosmovisor)
After=network-online.target
[Service]
LimitNOFILE=4096
Restart=always
RestartSec=5
WorkingDirectory=~
ExecStartPre=
ExecStart=/usr/local/go/bin/cosmovisor run start
Environment=PIGEON_HEALTHCHECK_PORT=5757
ExecReload=
[Install]
WantedBy=multi-user.target
~
# Upgrades
When there is a new release for palomad
, create a new directory that contains the new binary. You can do this as soon as the new binary is confirmed and available.
mkdir -p ~/.paloma/cosmovisor/upgrades/{upgrade_tag_name}/bin
Then get the new binary and copy it into the new directory.
wget -O - https://github.com/palomachain/paloma/releases/download/{upgrade_tag_name}/paloma_Linux_x86_64.tar.gz | \
tar -C $DAEMON_HOME/cosmovisor/upgrades/{upgrade_tag_name}/bin -xvzf - palomad
Confirm that you have the right version of paloma in the cosmovisor upgrades directory
cd ~/.paloma/cosmovisor/upgrades/{upgrade_tag_name}/bin
./palomad version
Note
You may run into a GLIBC error that is caused by a difference in the libraries of the host that built the binary and the host running the binary. The workaround is to build the binary from source as detailed in the install guide.
That's it. At the chain halt upgrade time Cosmovisor will switch over to the new binary.