Set up pool - solidsnakedev/cardano_commands GitHub Wiki

Create user

adduser cardano
adduser cardano sudo

SSH Settings

sudo sed -i 's/ChallengeResponseAuthentication yes/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config    
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config    
sudo sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config    

Validate settings

sudo sshd -t

Reload Settings

sudo service sshd reload

Download Config files

wget -P $HOME/node https://hydra.iohk.io/build/7578887/download/1/mainnet-config.json
wget -P $HOME/node https://hydra.iohk.io/build/7578887/download/1/mainnet-byron-genesis.json
wget -P $HOME/node https://hydra.iohk.io/build/7578887/download/1/mainnet-shelley-genesis.json
wget -P $HOME/node https://hydra.iohk.io/build/7578887/download/1/mainnet-alonzo-genesis.json

Modify TraceBlockFetchDecisions

sed -i 's/\"TraceBlockFetchDecisions\": false/\"TraceBlockFetchDecisions\": true/' $HOME/node/mainnet-config.json

Modify Prometheus

sed -i 's/\"127.0.0.1\"/\"0.0.0.0\"/' $HOME/node/mainnet-config.json

Startup Script

Blockproducer

cat > $HOME/node/start-cardano-node.sh << EOF
#!/bin/bash
HOSTADDR="0.0.0.0"
PORT="6000"
TOPOLOGY="\$HOME/node/mainnet-topology.json"
CONFIG="\$HOME/node/mainnet-config.json"
DBPATH="\$HOME/node/db"
SOCKETPATH="\$HOME/node/db/node.socket"
NODECERT="\$HOME/pool-keys/node.cert"
KESKEY="\$HOME/pool-keys/kes.skey"
VRFKEY="\$HOME/pool-keys/vrf.skey"

echo -e "TOPOLOGY: \$TOPOLOGY\n" \\
        "CONFIG: \$CONFIG\n" \\
        "DBPATH: \$DBPATH\n" \\
        "SOCKETPATH: \$SOCKETPATH\n" \\
        "NODECERT: \$NODECERT\n" \\
        "KESKEY: \$KESKEY\n" \\
        "VRFKEY: \$VRFKEY"
    
\$HOME/.local/bin/cardano-node run    --topology \$TOPOLOGY \\
                    --database-path \$DBPATH \\
                    --socket-path \$SOCKETPATH \\
                    --host-addr \$HOSTADDR \\
                    --port \$PORT \\
                    --config \$CONFIG \\
                    --shelley-kes-key \$KESKEY \\
                    --shelley-vrf-key \$VRFKEY \\
                    --shelley-operational-certificate \$NODECERT    
EOF

Relay

cat > $HOME/node/start-cardano-node.sh << EOF
#!/bin/bash
HOSTADDR="0.0.0.0"
PORT="6000"
TOPOLOGY="\$HOME/node/mainnet-topology.json"
CONFIG="\$HOME/node/mainnet-config.json"
DBPATH="\$HOME/node/db"
SOCKETPATH="\$HOME/node/db/node.socket"

echo -e "TOPOLOGY: \$TOPOLOGY\n" \\
        "CONFIG: \$CONFIG\n" \\
        "DBPATH: \$DBPATH\n" \\
        "SOCKETPATH: \$SOCKETPATH\n" \\
    
\$HOME/.local/bin/cardano-node run --topology \$TOPOLOGY \\
                    --database-path \$DBPATH \\
                    --socket-path \$SOCKETPATH \\
                    --host-addr \$HOSTADDR \\
                    --port \$PORT \\
                    --config \$CONFIG \\
EOF

Give Permission to execute

chmod +x $HOME/node/start-cardano-node.sh

Create service

cat > $HOME/node/cardano-node.service << EOF
[Unit]
Description     = Cardano node service
Wants           = network-online.target
After           = network-online.target 
[Service]
User=cardano
Type=simple
WorkingDirectory=/home/cardano/.local/bin
ExecStart=/home/cardano/node/start-cardano-node.sh
SyslogIdentifier=cardano-node
LimitNOFILE=32768
Restart=on-failure
RestartSec=15s
[Install]
WantedBy=multi-user.target
EOF
sudo mv $HOME/node/cardano-node.service /etc/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable cardano-node
sudo systemctl status cardano-node

Update .bashrc

echo export CARDANO_NODE_SOCKET_PATH="$HOME/node/db/node.socket" >> $HOME/.bashrc
source $HOME/.bashrc

Create Topology

Block producer

cat > $HOME/node/mainnet-topology.json << EOF
{
  "Producers": [
    {
      "addr": "x.x.x.x", Relay IP Address
      "port": 6000,
      "valency": 1
    }
  ]
}
EOF

Relay

cat > $HOME/node/mainnet-topology.json << EOF
{
  "Producers": [
    {
      "addr": "relays-new.cardano-mainnet.iohk.io",
      "port": 3001,
      "valency": 2
    }
,
    {
      "addr": "x.x.x.x", # Block producer IP Address
      "port": 6000,
      "valency": 1
    }
  ]
}
EOF

Create TopologyUpdater

cat > $HOME/node/topologyUpdater.sh << EOF
#!/bin/bash
 
USERNAME=cardano
CNODE_PORT=6000 # must match your relay node port as set in the startup command
CNODE_HOSTNAME="CHANGE ME"  # optional. must resolve to the IP you are requesting from
CNODE_BIN="/home/cardano/.local/bin"
CNODE_HOME="/home/cardano/node"
CNODE_LOG_DIR="${CNODE_HOME}/logs"
GENESIS_JSON="${CNODE_HOME}/mainnet-shelley-genesis.json"
NETWORKID=$(jq -r .networkId $GENESIS_JSON)
CNODE_VALENCY=1   # optional for multi-IP hostnames
NWMAGIC=$(jq -r .networkMagic < $GENESIS_JSON)
[ "${NETWORKID}" = "Mainnet" ](/solidsnakedev/cardano_commands/wiki/-"${NETWORKID}"-=-"Mainnet"-) && HASH_IDENTIFIER="--mainnet" || HASH_IDENTIFIER="--testnet-magic ${NWMAGIC}"
[ "${NWMAGIC}" = "764824073" ](/solidsnakedev/cardano_commands/wiki/-"${NWMAGIC}"-=-"764824073"-) && NETWORK_IDENTIFIER="--mainnet" || NETWORK_IDENTIFIER="--testnet-magic ${NWMAGIC}"
 
export PATH="${CNODE_BIN}:${PATH}"
export CARDANO_NODE_SOCKET_PATH="${CNODE_HOME}/db/node.socket"

blockNo=$(/home/cardano/.local/bin/cardano-cli query tip --mainnet | jq -r .block )
echo $blockNo > $CNODE_LOG_DIR/logs.txt
 
# Note:
# if you run your node in IPv4/IPv6 dual stack network configuration and want announced the
# IPv4 address only please add the -4 parameter to the curl command below  (curl -4 -s ...)
if [ "${CNODE_HOSTNAME}" != "CHANGE ME" ]; then
  T_HOSTNAME="&hostname=${CNODE_HOSTNAME}"
else
  T_HOSTNAME=''
fi

if [ ! -d ${CNODE_LOG_DIR} ]; then
  mkdir -p ${CNODE_LOG_DIR};
fi
 
curl -s "https://api.clio.one/htopology/v1/?port=${CNODE_PORT}&blockNo=${blockNo}&valency=${CNODE_VALENCY}&magic=${NWMAGIC}${T_HOSTNAME}" | tee -a $CNODE_LOG_DIR/topologyUpdater_lastresult.json
EOF

Add to contab

33 * * * * $HOME/node/topologyUpdater.sh
crontab -e

Pull Peers

cat > $HOME/node/relay-topology_pull.sh << EOF
#!/bin/bash
BLOCKPRODUCING_IP=194.163.158.69
BLOCKPRODUCING_PORT=6000
curl -s -o $HOME/node/mainnet-topology-new.json "https://api.clio.one/htopology/v1/fetch/?max=20&customPeers=\${BLOCKPRODUCING_IP}:\${BLOCKPRODUCING_PORT}:1|relays-new.cardano-mainnet.iohk.io:3001:2"
EOF