# Build Dependencies

## Network settings

These following ports must be exposed to the public internet:

* Port 22: for SSH
* Port 5050: for TCP and UDP traffic
* A custom port can be used with `--port <port>` flag when run your node.

## **Set up non-root user**

If there is already a non-root user available, you can skip this step.

```bash
# SSH into your machine
(local)$ ssh root@{IP_ADDRESS}
# Update the system
$ sudo apt-get update && sudo apt-get upgrade -y
# Create a non-root user
$ USER={USERNAME}
$ sudo mkdir -p /home/$USER/.ssh
$ sudo touch /home/$USER/.ssh/authorized_keys
$ sudo useradd -d /home/$USER $USER
$ sudo usermod -aG sudo $USER
$ sudo chown -R $USER:$USER /home/$USER/
$ sudo chmod 700 /home/$USER/.ssh
$ sudo chmod 644 /home/$USER/.ssh/authorized_keys
```

Make sure to paste your public SSH key into the **authorized\_keys** file of the newly created user in order to be able to log in via SSH.

```bash
# Enable sudo without password for the user
$ sudo vi /etc/sudoers
```

Add the following line to the end of the file:

```bash
{USERNAME} ALL=NOPASSWD: ALL
```

Now close the root SSH connection to the machine and log in as your newly created user:

```bash
# Close the root SSH connection
$ exit
# Log in as new user
(local)$ ssh {USERNAME}@{IP_ADDRESS}
```

## Install required tools

First, install the required build tools:

```bash
# Install build-essential
$ sudo apt-get install -y build-essential
```

Then install Go:

```bash
# Install go
$ wget <https://go.dev/dl/go1.19.3.linux-amd64.tar.gz>
$ sudo tar -xvf go1.19.3.linux-amd64.tar.gz
$ sudo mv go /usr/local
```

Export the required Go paths:

```bash
# Export go paths
$ vi ~/.bash_aliases
# Append the following lines
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
```

Finally, validate your Go installation by checking its version:

```bash
$ go version
go version go1.19.3 linux/amd64
```
