# Cosmovisor instructions for `bitcanna-1` In this guide, you will find step-by-step instructions for downloading, compiling, and installing Cosmovisor on your BitCanna node on the MAINNET. We have provided the simplest methods for installation, so you can quickly and easily get Cosmovisor running on your node. When a new version of the `bcnad` binary is released and governance has approved for it to take place, instructions on how to implement the upgrade with Cosmovisor are included on the releasepage on GitHub. If you have any questions or find anything unclear when reading through this guide, don’t hesitate to reach out to us on Discord. Also, if you have any suggestions for improvement, we welcome you to make a pull request! Let’s get started! ## About Cosmovisor Cosmovisor is a small process manager for Cosmos SDK application binaries to handle chain upgrades. It works for upgrades that has been approved through governance proposals. In these type of governance proposals the upgrade name and block height is included. If Cosmovisor finds the requirements for this upgrade in the logs of the chain binary, it stops the current binary, switch from the old binary to the new one, and finally restarts the node with the new binary. This guide will explain how to install Cosmovisor on your node. A full guide about Cosmovisor can be found [here](https://github.com/cosmos/cosmos-sdk/tree/main/tools/cosmovisor). ## Step 1. Download or compile Cosmovisor The easiest option to install Cosmovisor is by downloading the pre-compiled binary. Alternatively, users with more advanced technical knowledge can install Go on their system and compile Cosmovisor from the source. For a full guide to install Go, please refer to [this link](https://github.com/BitCannaGlobal/bcna/blob/main/1.install-compile.md#option-2-compile-instructions). **Option 1:** Download the pre-compiled Cosmovisor binary: ``` cd ~ wget https://github.com/BitCannaGlobal/bcna/releases/download/v1.5.3/cosmovisor ``` Make Cosmovisor executable and move it to the bin directory. ``` chmod +x ./cosmovisor sudo mv cosmovisor /usr/local/bin/ ``` **Option 2:** Download the source code and compile Cosmovisor using Go: `go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest` ## Step 2. Setup Cosmovisor > For each upgraded version of `bcnad` binaries, there needs to be a designated folder which Cosmovisor can point to at the predetermined upgrade block height. For the initial setup of Cosmovisor, we will create a folder named after the most recent upgrade codename. ### 1.) Prepare your system. Edit your `.profile` file to add the required environment variables for Cosmovisor to start. ``` cd ~ nano $HOME/.profile ``` Add these lines to the bottom of the file: ``` export DAEMON_NAME=bcnad export DAEMON_RESTART_AFTER_UPGRADE=true export DAEMON_HOME=${HOME}/.bcna export DAEMON_RESTART_DELAY=30s export UNSAFE_SKIP_BACKUP=true export DAEMON_LOG_BUFFER_SIZE=512 #add this to continue to use bcnad for commands, this is optional PATH="${HOME}/.bcna/cosmovisor/current/bin:$PATH" ``` Reload the configuration of your `.profile` file. ``` source $HOME/.profile ``` ### 2.) Start the initial Cosmovisor configuration. ``` cosmovisor init $(which bcnad) ``` The output should contain lines similar to these: ``` 11:46AM INF checking on the genesis/bin directory module=cosmovisor 11:46AM INF creating directory (and any parents): "/home/user/.bcna/cosmovisor/genesis/bin" module=cosmovisor 11:46AM INF checking on the genesis/bin executable module=cosmovisor 11:46AM INF copying executable into place: "/home/user/.bcna/cosmovisor/genesis/bin/bcnad" module=cosmovisor 11:46AM INF making sure "/home/user/.bcna/cosmovisor/genesis/bin/bcnad" is executable module=cosmovisor 11:46AM INF checking on the current symlink and creating it if needed module=cosmovisor 11:46AM INF the current symlink points to: "/home/user/.bcna/cosmovisor/genesis/bin/bcnad" module=cosmovisor ``` ### 3.) Create a designated folder for the latest version of `bcnad`. ``` mkdir -p ${HOME}/.bcna/cosmovisor/upgrades/vigorous-grow-huckleberry/bin/ ``` ### 4.) Copy the latest version of `bcnad` to it's designated folder. ``` cp -r $(which bcnad) ${HOME}/.bcna/cosmovisor/upgrades/vigorous-grow-huckleberry/bin/ ``` ### 5.) Setup the current version link for Cosmovisor. ``` ln -sfn ${HOME}/.bcna/cosmovisor/upgrades/vigorous-grow-huckleberry ${HOME}/.bcna/cosmovisor/current ``` ### 6.) To see if everything is OK, run: ``` ls .bcna/cosmovisor/ -lh ``` The output should look like this: ``` total 8.0K lrwxrwxrwx 1 user user 35 Jun 6 19:05 current -> /home/user/.bcna/cosmovisor/upgrades/vigorous-grow-huckleberry drwxrwxr-x 3 user user 4.0K Jun 6 19:03 genesis drwxrwxr-x 3 user user 4.0K Jun 6 19:05 upgrades ``` ## Step 3. Finish the installation and start Cosmovisor ### 1.) Create a systemd servicefile for Cosmovisor. Simply copy and paste everything to create the service unit. > Optionally enable backup, set the folder location, and name the folder. ``` echo "[Unit] Description=Cosmovisor BitCanna Service After=network-online.target [Service] User=${USER} Environment=DAEMON_NAME=bcnad Environment=DAEMON_RESTART_AFTER_UPGRADE=true Environment=DAEMON_HOME=${HOME}/.bcna Environment=UNSAFE_SKIP_BACKUP=true Environment=DAEMON_RESTART_DELAY=30s Environment=DAEMON_LOG_BUFFER_SIZE=512 #Optional export DAEMON_DATA_BACKUP_DIR=${HOME}/your_chain_backup_folder ExecStart=$(which cosmovisor) run start Restart=always RestartSec=3 LimitNOFILE=4096 [Install] WantedBy=multi-user.target " >cosmovisor.service ``` ### 2.) Change `bcnad` service for `cosmovisor` service. > You can skip the 3rd line if you're doing a clean installation and the `bcnad`service doesn't exist. ``` sudo mv cosmovisor.service /lib/systemd/system/ sudo systemctl daemon-reload sudo systemctl stop bcnad.service && sudo systemctl disable bcnad.service sudo systemctl enable cosmovisor.service && sudo systemctl start cosmovisor.service ``` ### 3.) Check the logs.** (ctrl + C to stop). ``` sudo journalctl -fu cosmovisor -o cat ``` > You can speed up the synchronization using a StateSync Server or a snapshot file. ### 4.) Now let's try Cosmovisor. If everything is OK, Cosmovisor will take control of the binaries. Instead of `bcnad` you must use `cosmosvisor run` in your service related commands. Show Cosmovisor's version. ``` cosmovisor run version ``` It must return `v1.7.0` The output should look like this: ``` 20:27PM INF running app args=["version"] module=cosmovisor path=/home/user/.bcna/cosmovisor/upgrades/vigorous-grow-huckleberry 1.7.0 ``` * Show BitCanna version: `bcnad version` Must show the same version as above * Show Cosmovisor sync info and status: `cosmovisor run status` ### 5.) Done. Congratulations, you have installed Cosmovisor on your BitCanna node. Future upgrades of the binary's will be handled by Cosmovisor. Instructions to prepare Cosmovisor for an upcoming chain-upgrade will be provided on the release page. An example can be found [here](https://github.com/BitCannaGlobal/bcna/releases/tag/v1.7.0). ## Reminder In the future, you must use the `cosmovisor` command instead of the `bcnad` command if you want to perform **service related** commands. For example: * Start the service: `sudo service cosmovisor start` * Stop the service: `sudo service cosmovisor stop` * Restart the service: `sudo service cosmovisor restart` * Check the logs: `sudo journalctl -u cosmovisor -f` ###### tags: `cosmovisor`