[Guide] Upgrading to 1.35.3 for CoinCashew Users

I struggled so much while upgrading to the latest version since the information were scatted, so I am going to share the steps that I did and make your life easier:

Note: You do all of the below on both of your BP and relays

  1. Do the routine updates:
sudo apt-get update -y
sudo apt-get upgrade -y
  1. Update gLiveView automatically:
# Click yes if it asked you to update
  1. Make sure that you have ghc 8.10.7 and cabal (Skip if you already have them):
ghcup upgrade
ghcup install ghc 8.10.7
ghcup set ghc 8.10.7
ghcup install cabal
ghcup set cabal
  1. Stop cardano node service:
sudo systemctl stop cardano-node.service
  1. Install Libsodium (Skip if you already have it):
mkdir $HOME/git
cd $HOME/git
git clone https://github.com/input-output-hk/libsodium
cd libsodium
git checkout 66f017f1
sudo make install
  1. Install libsecp256k1 (Skip if you already have it):
cd $HOME/git
git clone https://github.com/bitcoin-core/secp256k1
cd secp256k1
git checkout ac83be33
./configure --enable-module-schnorrsig --enable-experimental
make check
sudo make install
sudo ldconfig
  1. Backup your configuration files:
mv mainnet-config.json mainnet-config.bak
mv mainnet-byron-genesis.json mainnet-byron-genesis.bak
mv mainnet-shelley-genesis.json mainnet-shelley-genesis.bak
mv mainnet-alonzo-genesis.json mainnet-alonzo-genesis.bak
  1. Download the new mainnet configuration files:
wget https://book.world.dev.cardano.org/environments/mainnet/config.json
wget https://book.world.dev.cardano.org/environments/mainnet/byron-genesis.json
wget https://book.world.dev.cardano.org/environments/mainnet/shelley-genesis.json
wget https://book.world.dev.cardano.org/environments/mainnet/alonzo-genesis.json
  1. Rename the files to include mainnet prefix:
mv config.json mainnet-config.json
mv byron-genesis.json mainnet-byron-genesis.json
mv shelley-genesis.json mainnet-shelley-genesis.json 
mv alonzo-genesis.json mainnet-alonzo-genesis.json
  1. Edit mainnet-config.json and add the mainnet prefix to become:
"AlonzoGenesisFile": "mainnet-alonzo-genesis.json",
"ByronGenesisFile": "mainnet-byron-genesis.json",
"ShelleyGenesisFile": "mainnet-shelley-genesis.json",
  1. Cloning and building the new cardano node:
cd $HOME/git
git clone https://github.com/input-output-hk/cardano-node.git ./cardano-node-new
cd cardano-node-new
cabal update
git fetch --all --recurse-submodules --tags
git checkout $(curl -s https://api.github.com/repos/input-output-hk/cardano-node/releases/latest | jq -r .tag_name)
cabal configure -O0 -w ghc-8.10.7
echo -e "package cardano-crypto-praos\n flags: -external-libsodium-vrf" >> cabal.project.local
cabal build cardano-node cardano-cli
  1. Verify the versions:
$(find $HOME/git/cardano-node-new/dist-newstyle/build -type f -name "cardano-node") version
$(find $HOME/git/cardano-node-new/dist-newstyle/build -type f -name "cardano-cli") version
  1. Replace the existing cardano-node and cardano-cli binaries:
sudo cp $(find $HOME/git/cardano-node-new/dist-newstyle/build -type f -name "cardano-node") /usr/local/bin/cardano-node
sudo cp $(find $HOME/git/cardano-node-new/dist-newstyle/build -type f -name "cardano-cli") /usr/local/bin/cardano-cli
  1. To verify that you installed the new cardano node binaries successfully, type:
cardano-node version
cardano-cli version
  1. Start yorur cardano node
sudo systemctl start cardano-node.service
  1. Check the status of your node to make sure there are no errors:
journalctl -e -f -u cardano-node

a) Upgrading to Cardano Node 1.35.x may require Issuing a New Operational Certificate for your stake pool.

b) Copy the new cardano-cli to your air-gapped offline machine.


Regarding note a) no, the upgrade does not require a new certificate.

Also: So far, i.e. before the Vasil HF, no changes have been made to the configuration files. I.e., you don’t need to download the JSON files if you have a running node.

If you have an operational node, it makes sense to backup your database files before starting the new version of the node.


Hi I have updated my pool to version 1.35.3. Now I see after daily restart of the relays all db chunks will be validated new. That needs a lot of time to restart. Is it normal?

Validating is normal, but if it keeps happening, that means something is killing the service (Shortage of RAM maybe), so it has to validate again. Once that is done, it should be back up and running if everything is right.

The relays are restarted by systemd 24h timer. Since update to 1.35.3 I get the validation process always.

They definitely should not restart every 24h. You might want to disable that. Let’s assume you want it that way for whatever reason, it seems that the restart is not being done gracefully, and that’s why it’s validating again. It’s a bad practice to be validating every day!

the relay servers allways restart all 24h, because to refresh the topolgy . there is systemd timer setup for this. It was working for years as well. But now after the update I have trouble

Restarting the relay servers is a bad practice. Even though that it worked in the past, but that’s not how you should do it.

If you want to update the topology, you should create a script for that:

It will automatically update the topology using a crontab job.

ok thanks I will check this

Sorry I dont understand why it’s better to use the cronjob and topologyUpdater.sh than the systemd timer. In both solutions you have to execute the topologyUpdater.sh and restart the relay.

I believe you misunderstood this line. Let me elaborate, it only means that have to restart your node after fetching your topology using the relay-topology_pull.sh script. Which you only need to do once, unless you are changing something.

The crontab job does not restart your node, and you don’t need to restart it for any reason. My relays have been up and running for months.

If you use topology-updater.sh, the default, in fact, is to restart the cardano-node every 24 hours:

If you never restart, you will never use new topologies fetched from their database.

Bad practice imho too… Fetching a new topology and restarting once every 5-10 days should be sufficient.

Did you give it enough time to shutdown and do you shut it down the right way?
My systemd service has the following configured:


So it gives the node 2 minutes to shut down before just killing it ungracefully (if it’s stopped sooner, it won’t wait that period before restarting).

1 Like

As far as I remember from the guides, topologyUpdate.sh method is automated and works after 4 hours. It updates the list without restarting anything. My relays never restarted as it can be seen in the gLiveView.

Pinging the server to say that your relay is there has to be done every hour.

But that does not update the other relays that you are connecting to. For that, you have to fetch a new topology file and then restart your node. Otherwise, the new topology will not be used.

As @brouwerQ said, it might be a better practice to not do it every day, but months seems too long to me.

1 Like

I just read your link word by word, and you’re right. It’s strange that this was not mentioned at coincashew when I created my nodes. We live and learn I guess!

Can you share your script and the method that you are using?

Which script?

to restart your relays gracefully automatically every X amount of days

I do it manually for now. But you need to set enough time for TimeoutStopSec if you run your node as a systemd service.