---
title: Validator v0.2.1 Installation
slug: run-a-validator/validator-v021-installation
description: Set up your Xandeum DevNet validator with ease using this comprehensive document. From user installation to downloading the Xandeum release, this guide covers it all. Discover the steps for creating a user, adding to the sudo group, and switching to the X
docTags: 
createdAt: 2023-08-19T03:02:55.649Z
---

# How To Setup a Xandeum DevNet Validator

:::hint{type="info"}
**NOTE:** This guide shows commands for text editors `nano` and `vim`. A quick search can find a guide or video to operate these text editors more efficiently and make your life easier.
:::

:::hint{type="warning"}
NOTE: If you previously set up your validator on `v0.1` or `v0.2` then you don't need to complete these steps and can follow the [Version Upgrade v0.2.1](docId\:HMmaj43E20VhSk4oL8NOA) instead!
:::



##

## 1) Update and setup our user

Start with a fresh instance of Linux as the `root` user.&#x20;

These instructions use [Ubuntu Server 22.04.2LTS](https://ubuntu.com/download/server)

:::hint{type="danger"}
BEFORE YOU CONTINUE!

Make sure you see your entire drive space as available!
Use `df -h` to see your free space. You want to see that you have all your space in a free partition. Ubuntu will want to default to 100g LVM. The preferance is to eliminate LVM and Raid and use all available space for your `/` mount point. If you don't show all your disk space, run the Ubuntu installer again and pay attention to the storage section.
:::



Get `root` user

:::hint{type="warning"}
Run as `sudo` or `root` user. If you don't have access to the root user, then you will need to prepend all your requests in this section with sudo.&#x20;

Notice in the screenshot below I start as user `xand` change to `root` user then back to `xand`.&#x20;

Root user has ALL the privledges and won't require sudo. But some items NEED to be ran as the `xand` user (ie rust install, validator build, etc)

Use `sudo -i` to change to root user and `exit` to end root user
:::

![](https://api.archbee.com/api/optimize/ePevXmvzgG-7aqJ72Gpg_/0naV05D9KRSBrRYLcDmc6_image.png)

Update your installation

:::CodeblockTabs
CLI

```linux
sudo apt-get update -y && 
sudo apt-get upgrade -y
```
:::

Install a few apps

:::CodeblockTabs
CLI

```linux
sudo apt install -y bzip2 vnstat
```
:::

:::CodeblockTabs
CLI

```linux
sudo systemctl enable --now vnstat
```
:::



Create Xandeum Validator User Account

:::hint{type="info"}
Skip creating a user if you already have it
:::



:::CodeblockTabs
CLI

```linux
sudo adduser xand
```
:::

:::hint{type="info"}
Enter a password and accept defaults to the following questions:

`New password:`
` Retype new password:`
` passwd: password updated successfully`
` Changing the user information for xand`
` Enter the new value, or press ENTER for the default`
`        Full Name []:`
`        Room Number []:`
`        Work Phone []:`
`        Home Phone []:`
`        Other []:`
`Is the information correct? [Y/n] y`
:::



Add new user to sudo group

:::CodeblockTabs
CLI

```linux
sudo usermod -aG sudo xand
```
:::

Change to the Xandeum User account

:::CodeblockTabs
CLI

```linux
su xand
```
:::



Switch the Xand home directory.&#x20;

:::hint{type="warning"}
NOTE: If you log in as `root` and switch to `xand` it will bring you into the `/root` dir!
So use `cd ~` to get to home dir each time you log in!
:::



:::CodeblockTabs
CLI

```linux
cd ~
```
:::

Test switching between `root` user and `xand` user

:::hint{type="info"}
Note: When you are root user, your line starts with `root` and when you are `xand` user the line starts with `xand`
:::



:::CodeblockTabs
CLI

```linux
sudo -i
```
:::

:::CodeblockTabs
CLI

```linux
exit
```
:::

![](https://api.archbee.com/api/optimize/ePevXmvzgG-7aqJ72Gpg_/UF_QrAcYWDISCX2NFnNFc_image.png)

***

## 2) Choose which release you want to install

Go to the Xandeum Binaries repo and download the `tar.bz2` file to your server.
This guide is using version `v0.2.1`
You can right-click on the file name to copy the download link.
[https://github.com/Xandeum/binaries/releases](https://github.com/Xandeum/binaries/releases)

![](https://api.archbee.com/api/optimize/ePevXmvzgG-7aqJ72Gpg_/BpE3BfZFhLE_aRV4uTCHo_image.png)

:::CodeblockTabs
CLI

```linux
cd ~
wget https://github.com/Xandeum/binaries/releases/download/v0.2.1/xand-v0.2.1.tar.bz2
```
:::

Create the needed `bin` folder
(Do not create the `active_release` folder as before...this will be a symbolic link only)

:::CodeblockTabs
CLI

```linux
mkdir ~/.local/share/xandeum/install/releases/v0.2.1/bin -p
```
:::

Extract the file into the new `bin` dir

:::CodeblockTabs
CLI

```linux
cd ~
tar -xf xand-v0.2.1.tar.bz2 --directory ~/.local/share/xandeum/install/releases/v0.2.1/bin
```
:::

Test a binary by running it in the local folder

:::CodeblockTabs
CLI

```linux
cd ~/.local/share/xandeum/install/releases/v0.2.1/bin
```
:::

:::CodeblockTabs
CLI

```linux
./xandeum-validator -V
```
:::

![](https://api.archbee.com/api/optimize/ePevXmvzgG-7aqJ72Gpg_/VSeKYMMwwy-rEcspF66rO_image.png)

### Set our symlink, PATH, and some convenient aliases

Set a symlink from our new release to the active\_release folder we will use in our `$PATH` later. (This command removes an old symlink to `active_release` if it exists)

:::hint{type="info"}
Note the subtle difference in not using trailing `/`.... It will affect the `$PATH`
:::

:::CodeblockTabs
CLI

```linux
rm /home/xand/.local/share/xandeum/install/releases/active_release;
ln -sf /home/xand/.local/share/xandeum/install/releases/v0.2.1/bin /home/xand/.local/share/xandeum/install/releases/active_release
```
:::

Backup the old $PATH for reference.

:::CodeblockTabs
CLI

```linux
echo $PATH >> ~/PATH.bak
```
:::

Using your favorite editor to open the bashrc config:

:::CodeblockTabs
nano

```linux
nano ~/.bashrc
```

vim

```linux
vim ~/.bashrc
```
:::

Add the following lines at the very bottom and save your changes and exit. <font color="#eb144c">**(remove the old lines from the previous install)**</font>

:::CodeblockTabs
text

```linux
export PATH="/home/xand/.local/share/xandeum/install/releases/active_release:$PATH"
alias l="ls -a --color=auto"
alias ll="ls -alh --color=auto"
alias xv="xandeum validators --sort skip-rate --reverse"
alias xg="xandeum gossip"
alias xe="xandeum epoch-info"
alias xb="xandeum balance"
```
:::

- Fully exit all shells and come back in. (exit or reboot)

### Check your Install of the software

After logging back in as `xand` user, time to test if everything worked.

- Check Xandeum Software Version:

:::CodeblockTabs
CLI

```linux
cd ~
xandeum -V
```
:::

- Results should appear simlar to the following

:::hint{type="success"}
![](https://api.archbee.com/api/optimize/ePevXmvzgG-7aqJ72Gpg_/96m52RHZ9LEKnWL21Q56s_image.png)
:::



***

##

## 3) Configure your validator instance.

:::hint{type="danger"}
Please observe proper security of your private keys!&#x20;

MainNet Keys should be created on a secure machine, not an unknown remote machine.

Record your 12 words (and bip39 passphrase) in a safe spot. For DevNet it's not critical if you lose them...but if on MainNet, losing the keys equals LOST FUNDS. There is no recovering from lost keys.

- For MainNet, your withdraw authority key should never be on your machine!
:::



### Generate your 3 DevNet keys.

:::hint{type="success"}
NOTE: If you already have created keys on this machine from the previous install,&#x20;
**DON'T CREATE NEW ONES!**
Skip to [Switch to Xandeum Cluster](https://docs.xandeum.com/xand-dev-v01/validator-v01-installation#jYB2c) instead.
:::



:::hint{type="info"}
- You can leave the  bip39 passphrase empty (only applies to DevNet/TesNet since it is not real money).
- Your 12 words and pubkey are shown immediatly after the prompt for bip39 passphrase.
- Take note of the public key it provides you (copy it down). It will help us help you should there be an issue.
:::

:::hint{type="warning"}
Run as `xand` user!
:::



:::CodeblockTabs
CLI

```linux
cd ~
```
:::

:::CodeblockTabs
CLI

```linux
xandeum-keygen new -o ~/validator-keypair.json
```
:::

:::CodeblockTabs
CLI

```linux
xandeum-keygen new -o ~/vote-keypair.json
```
:::

:::CodeblockTabs
CLI

```linux
xandeum-keygen new -o ~/withdraw-keypair.json
```
:::

To view your public key later

:::CodeblockTabs
CLI

```linux
xandeum-keygen pubkey ~/validator-keypair.json
```
:::

View your current configuration information

:::CodeblockTabs
CLI

```linux
xandeum config get
```
:::

### Switch to Xandeum cluster

:::CodeblockTabs
CLI

```linux
xandeum config set --url https://api.devnet.xandeum.com:8899
```
:::

### Set your new keypair to be used by default.

:::CodeblockTabs
CLI

```text
xandeum config set --keypair ~/validator-keypair.json
```
:::

### Testing our work so far.

- Check your connecrtion to the cluster

```linux
xandeum gossip
```

- Request an airdrop from the Xand Faucet

:::CodeblockTabs
CLI

```linux
xandeum airdrop 1 ~/validator-keypair.json
```
:::

Do this again 4 more times. (We are also giving you fake XNT \{Xandeum Native Token} to get started.)

- There is a daily limit per wallet...These tokens on TestNet/DevNet are not real.

### Check your wallet balance.

:::CodeblockTabs
CLI

```linux
xandeum balance
```
:::

You should have \~5 tokens present if you do it 5x's.



### Create your vote account.

- Submit a transaction on the blockchain setting up your vote account

:::CodeblockTabs
CLI

```linux
xandeum create-vote-account --commission 8 ~/vote-keypair.json ~/validator-keypair.json ~/withdraw-keypair.json
```
:::

To find your Vote Account Pubkey later, use:

:::CodeblockTabs
CLI

```linux
xandeum-keygen pubkey ~/vote-keypair.json
```
:::

***

##

## 4) Configure your Start Script Configuration

### Create your validator configuration file using your editor

:::CodeblockTabs
nano

```linux
nano ~/validator-start.sh
```

vim

```linux
vim ~/validator-start.sh
```
:::

- There will be nothing in here, so copy and paste in the following configurations. Save and Exit.

:::CodeblockTabs
text

```none
#!/bin/bash
exec xandeum-validator \
        --known-validator HhuygLTeS6grue95pKKzak2UPuQMXepWbvQv2ToQfbZN \
        --known-validator 6vy4sYV6nTLJQ4tBcXUGgPTuGorVh2FJkm6ToVMFSfr2 \
        --known-validator 3dZiYo933M7VftTSb7WudJV92cg69QwVYS1s753xRc59 \
		--known-validator Hohkf7wGm4MzVNsPTzfudxZwR6MzR9nduPwwzAWE28oZ \
        --entrypoint xand-1.devnet.xandeum.com:8000 \
        --entrypoint xand-2.devnet.xandeum.com:8000 \
        --entrypoint xand-4.devnet.xandeum.com:8000 \
        --entrypoint xand-5.devnet.xandeum.com:8000 \
        --expected-shred-version 60140 \
        --expected-genesis-hash HmvXQCaYhBDtovKc5vFT5KzJA1Yy7QDPMngfSvtMohZX \
        --snapshot-interval-slots 300 \
        --full-snapshot-interval-slots 3000 \
        --identity ~/validator-keypair.json \
        --vote-account ~/vote-keypair.json \
        --ledger ~/ledger/ \
        --dynamic-port-range 8000-10000 \
        --rpc-port 8899 \
        --log ~/xand-validator.log \
        --no-poh-speed-test \
        --limit-ledger-size 10000000

```
:::

:::hint{type="warning"}
**Note**: Every trailing `\` is important!
Any commented lines `#` must be at the bottom of the script. This is to save a command that may be needed later but not used now.
:::

:::hint{type="info"}
**Note**: Change the location of `ledger` in the script to your second drive if you aren't using raid0
:::

:::hint{type="success"}
Here are the known-validators:

xand-1 HhuygLTeS6grue95pKKzak2UPuQMXepWbvQv2ToQfbZN
xand-2 6vy4sYV6nTLJQ4tBcXUGgPTuGorVh2FJkm6ToVMFSfr2
xand-4 3dZiYo933M7VftTSb7WudJV92cg69QwVYS1s753xRc59
xand-5 Hohkf7wGm4MzVNsPTzfudxZwR6MzR9nduPwwzAWE28oZ

:::



### Make the script you just made executable.

:::CodeblockTabs
CLI

```linux
chmod +x ~/validator-start.sh
```
:::

***

##

## 5) System Tuning

:::hint{type="warning"}
Run as `root` user, use `sudo -i`
:::



Optimize sysctl knobs (copy block and paste into teminal, press return)

:::CodeblockTabs
CLI

```linux
sudo bash -c "cat >/etc/sysctl.d/21-xandeum-validator.conf <<EOF
# Increase UDP buffer sizes
net.core.rmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_default = 134217728
net.core.wmem_max = 134217728

# Increase memory mapped files limit
vm.max_map_count = 1000000

# Increase number of allowed open file descriptors
fs.nr_open = 1000000
EOF"
```
:::

:::CodeblockTabs
CLI

```linux
sudo sysctl -p /etc/sysctl.d/21-xandeum-validator.conf
```
:::

Open the file `/etc/systemd/system.conf` in your editor

:::CodeblockTabs
nano

```linux
sudo nano /etc/systemd/system.conf
```

vim

```linux
sudo vim /etc/systemd/system.conf
```
:::

Add the following to the `[Manager]` section. Save and exit.

:::CodeblockTabs
CLI

```linux
DefaultLimitNOFILE=1000000
```
:::

Reload the daemon

:::CodeblockTabs
CLI

```linux
sudo systemctl daemon-reload
```
:::

Increase process file desriptor count limit. (copy block and paste into teminal, press return)

:::CodeblockTabs
CLI

```linux
sudo bash -c "cat >/etc/security/limits.d/90-xandeum-nofiles.conf <<EOF
# Increase process file descriptor count limit
* - nofile 1000000
EOF"
```
:::

:::hint{type="success"}
This section is complete. Exit all shells or reboot to activate changes!
:::





Continue on to [Setup System Service](docId\:BRNSJHH6Dye4CLHfVwn2Y)



