# Installation guide

## Installation

​Hardware requirements

* Memory: 32 GB RAM
* CPU: 12 cores
* Disk: 450GB SSD
* Bandwidth: 1 GbpsLinux&#x20;
* OS: (Ubuntu LTS release)​

**Install required packages**

```
sudo apt update && \
sudo apt install curl git jq build-essential gcc unzip wget lz4 -y
```

#### Install Go

```
cd $HOME && \
ver="1.22.0" && \
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz" && \
sudo rm -rf /usr/local/go && \
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz" && \
rm "go$ver.linux-amd64.tar.gz" && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \
source $HOME/.bash_profile && \
go version
```

#### Install `Jackal` binary

```
cd $HOME && mkdir $HOME/go/bin/
git clone https://github.com/JackalLabs/canine-chain && cd canine-chain
git checkout v3.2.2
make install
```

#### Initialize the node <a href="#initialize-the-node" id="initialize-the-node"></a>

```
# Set node configuration
canined config chain-id jackal-1
canined config keyring-backend file
canined init $yourMONIKER --chain-id jackal-1
```

#### Download Genesis <a href="#download-genesis" id="download-genesis"></a>

```
curl -Ls https://snapshots.kjnodes.com/jackal/genesis.json > $HOME/.canine/config/genesis.json
```

#### Set min. gas price <a href="#download-genesis" id="download-genesis"></a>

```
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.004ujkl\"|" $HOME/.canine/config/app.toml
```

**Pruning / Indexer  (optional)**

```
pruning="custom"
pruning_keep_recent="1000"
pruning_keep_every="0"
pruning_interval="10"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.canine/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.canine/config/app.toml
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.canine/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.canine/config/app.toml

indexer="null" &&
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.canine/config/config.toml
```

#### Create a service <a href="#install-cosmovisor-and-create-a-service" id="install-cosmovisor-and-create-a-service"></a>

```
sudo tee /etc/systemd/system/canined.service > /dev/null <<EOF
[Unit]
Description=canined
After=network-online.target

[Service]
User=$USER
ExecStart=$(which canined) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF
```

#### Start the node

```
sudo systemctl daemon-reload && \
sudo systemctl enable canined && \
sudo systemctl restart canined && \
sudo journalctl -fu canined -o cat
```

#### Create a wallet for your validator

```
canined keys add yourwallet
canined keys add yourwallet --recover #in order to restore

#Check wallet balance
canined status | jq -r .sync_info
```

**Create validator**

<pre><code><strong>canined tx s<a data-footnote-ref href="#user-content-fn-1">t</a>aking create-validator \
</strong>  --amount 1000000ujkl \
  --from &#x3C;yourwallet> \
  --commission-max-change-rate "0.1" \
  --commission-max-rate "0.2" \
  --commission-rate "0.1" \
  --min-self-delegation "1" \
  --pubkey  $(canined tendermint show-validator) \
  --moniker $yourMONIKER \
  --chain-id jackal-1 \
  --identity="" \
  --details="" \
  --website="" -y
</code></pre>

[^1]:
