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