# Setup and maintenance voting node guide (via multisig) This tutorial explains how to setup voting node using Symbol Bootstrap and multisig account. It's not offline guide version and requires to paste at least one cosigner private key on node. ## Setup multisig account Setup multisig - for example 2 of 3. Remember to backup all keys (multisig account and cosigners). ## Verify your server Default images require CPU that support AVX and AVX2 flags. To verify flags supported by CPU run ``` cat /proc/cpuinfo ``` ## Install required software 1. Install Ubuntu 22.04 2. Create non-root user (https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-ubuntu-20-04) ``` adduser symbolnode groups symbolnode usermod -aG sudo symbolnode ``` 3. Switch to created user ``` su - symbolnode ``` 4. Install docker (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04) ``` ## Docker installation sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update apt-cache policy docker-ce sudo apt install docker-ce ## Add symbolnode user to docker group sudo usermod -aG docker ${USER} exit su - symbolnode groups ``` 5. Install docker-compose (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04) ``` sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version ``` 6. Install nodejs and npm (https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-22-04) ``` ## Install nodejs sudo apt update sudo apt install nodejs node -v ## Install npm sudo apt install npm ## If installed npm version is >= 14 then it's OK. If not you can install specific version by: ## Install npm v14 sudo npm install -g n sudo n v14 exit su - symbolnode ``` 7. Install Symbol bootstrap ``` sudo npm install -g symbol-bootstrap ``` ## Setup and start node 1. Create node directory ``` mkdir node cd node ``` 2. Setup node configuration via wizard ``` symbol-bootstrap wizard > Mainnet node > Dual node > Sensitive information. Choose YES (Y) > Enter password to encrypt keys in preset > Main account -> Enter a private key for your multisig account, check and confirm main account address > Transport account -> If you have already put it. If not generate new account (I assume you don't have at first time). > VRF account -> If you have already put it. If not generate new account (I assume you don't have at first time). > Remote account -> If you have already put it. If not generate new account (I assume you don't have at first time). > HTTP Setup -> - If you own domain select Automatic (lets encrypt) - If you don't own domain select None > Enter domain if you have it, if not enter IP address > Enter friendly name > Encryption -> ENCRYPT ALL (main key will be encrypted on server. I assume this is not a problem since it's multisig.) > Voting node -> YES ``` Backup your remote, transport and VRF keys. You can also decrypt preset file (to check keys) using command: ``` symbol-bootstrap decrypt --source custom-preset.yml --destination custom-preset-decrypted.yml ``` 3. Start node ``` symbol-bootstrap start -c custom-preset.yml -d ``` (and enter password) 4. Link keys ``` symbol-bootstrap link --useKnownRestGateways ``` (you will be asked for cosigner key - put just one cosigner and announce transaction) ## Node maintenance - remember to run all commands from `node` directory - remember always switch to non-root user after login ``` su - symbolnode ``` 1. restart node ``` symbol-bootstrap stop symbol-bootstrap start -c custom-preset.yml -d ``` 2. renew node certificates (once per year) - https://github.com/fboucquez/symbol-bootstrap/blob/main/docs/renewCertificates.md ``` symbol-bootstrap stop symbol-bootstrap renewCertificates symbol-bootstrap start -c custom-preset.yml --upgrade -d ``` 3. renew voting keys (when voting keys are near to expire) - https://github.com/fboucquez/symbol-bootstrap/blob/main/docs/updateVotingKeys.md ``` symbol-bootstrap stop symbol-bootstrap updateVotingKeys symbol-bootstrap start -c custom-preset.yml --upgrade -d symbol-bootstrap link --useKnownRestGateways ``` 4. upgrading bootstrap and node ``` ## Upgrade Bootstrap version sudo npm install -g symbol-bootstrap symbol-bootstrap stop ## Backup target dir (optional) cp -a target/ /some/backup/path/ ## Start with upgrade flag symbol-bootstrap start -c custom-preset.yml --upgrade -d ``` 4. In case of data corruption sometimes my be needed to resync from scratch ``` symbol-bootstrap stop symbol-bootstrap resetData symbol-bootstrap start -c custom-preset.yml -d ```