# Installation

1. **Update packages and install useful tools.**

```
sudo apt update && sudo apt upgrade --yes && \
sudo apt install git build-essential ufw curl jq snapd screen ncdu nano fuse ufw --yes
```

2. **Install `go` using `snap`**.

```
sudo snap install go --classic && \
echo 'export GOPATH="$HOME/go"' >> ~/.profile && \
echo 'export GOBIN="$GOPATH/bin"' >> ~/.profile && \
echo 'export PATH="$GOBIN:$PATH"' >> ~/.profile && \
source ~/.profile && \
go version
```

3. **Install Node.js**

```
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs build-essential git
node -v

corepack enable
corepack prepare yarn@4.9.1 --activate

yarn --version
```

3. **Install Python and gcc-10 (not required for Ubuntu 22+)**

```
sudo apt install python3 python3-pip python3-venv

sudo apt install gcc-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
gcc --version
```

4. **Build the binary from source.**

```
git clone https://github.com/Agoric/agoric-sdk
cd agoric-sdk
git fetch --all
git checkout agoric-upgrade-22b
git clean -xdf && git submodule foreach --recursive git clean -xdf

yarn install && yarn build
(cd packages/cosmic-swingset && make)
agd version
```

5. **Initialize your node.**

```
curl https://main.agoric.net/network-config > chain.json
chainName=`jq -r .chainName < chain.json`
echo $chainName

agd init --chain-id $chainName <node_name>
```

6. **Download genesis.**

```
curl https://main.agoric.net/genesis.json > $HOME/.agoric/config/genesis.json
```

7. **Add seeds and peers to `config.toml`.**

```
peers=$(jq '.peers | join(",")' < chain.json)
seeds=$(jq '.seeds | join(",")' < chain.json)
sed -i.bak -e "s/^seeds *=.*/seeds = $seeds/; s/^persistent_peers *=.*/persistent_peers = $peers/" $HOME/.agoric/config/config.toml
```

8. **Set up minimum gas price.**

```
sed -i "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.01ubld,0.005uist\"/;" $HOME/.agoric/config/app.toml
```

9. **Set up pruning (optional).**

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

10. **Create service file.**

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

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

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

11. **Enable and start service.**

```
systemctl daemon-reload
systemctl enable agd
systemctl restart agd
journalctl -u agd -f -o cat
```

{% hint style="info" %}
If you would like to speed up the sync process, you may try using State Sync.
{% endhint %}
