# Shell script

## Normal Node

```shell
#!/bin/bash

# install mono-devel and other libs needed to get ZEN NODE up and running.
install_mono(){

  echo "Adding Mono-devel Repo"
  sudo apt install gnupg ca-certificates -y
  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
  echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list

  sudo apt update
  sudo apt upgrade -y

  # install mono-devel, Lighting Memory-Mapped Database lib and unzip
  sudo apt install mono-devel -y
  sudo apt install liblmdb0 -y
  sudo apt install unzip -y

}


#---------------------------------------------------------------------------------------
#ENTRY POINT

# check for mono-devel.
which mono || install_mono  # only install and upgrade the system if mono-devel is missing


# NVM Sections
echo "---------------------------------------------------"
echo "NVM SETUP."
sudo echo ' '

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

nvm install --lts
npm config set @zen:registry https://www.myget.org/F/zenprotocol/npm/
npm install @zen/zen-node -g


# set data path location for the database
DATAPATH="$HOME/.config/zen-node"

echo "---------------------------------------------------"
echo "Generating Zen-Node Service File..."

# generate the service file then save it appropriately
printf "[Unit]
Description=Zen Node
After=network.target

[Service]
Type=simple
WorkingDirectory=$HOME/.nvm/versions/node/$(node --version)/lib/node_modules/@zen/zen-node/Release/
ExecStart=/usr/bin/mono $HOME/.nvm/versions/node/$(node --version)/lib/node_modules/@zen/zen-node/Release/zen-node.exe --data-path "$DATAPATH" --api "*:11567"
Restart=on-failure

[Install]
WantedBy=multi-user.target
" | sudo tee /etc/systemd/system/zen-node.service


# check for the blockchain DB, if present, continue.
# if absent, check for the zipped version and extract it.
# if no zipped version present, download the one hosted.
if [[ ! -s $DATAPATH ]] ; then
  echo "---------------------------------------------------"
  if [[ ! -s "zen-node.zip" ]] ; then
    echo "Downloading Blockchain..."
    # download zen-node.zip from s3
    wget https://node-backups.s3-eu-west-1.amazonaws.com/zen-node.zip
  fi

  echo "Unziping The BlockchainDB in $DATAPATH..."
  unzip zen-node.zip -d "$HOME/.config"

fi

echo "---------------------------------------------------"
echo "Starting ZEN NODE...."
sudo systemctl enable zen-node.service
sudo systemctl start zen-node.service
sudo journalctl -f -u zen-node.service
```

## Address Node (Explorer and Exchange)

```shell
#!/bin/bash

# install mono-devel and other libs needed to get ZEN NODE up and running.
install_mono(){

  echo "Adding Mono-devel Repo"
  sudo apt install gnupg ca-certificates -y
  sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
  echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list

  sudo apt update
  sudo apt upgrade -y

  # install mono-devel, Lighting Memory-Mapped Database lib and unzip
  sudo apt install mono-devel -y
  sudo apt install liblmdb0 -y
  sudo apt install unzip -y

}


#---------------------------------------------------------------------------------------
#ENTRY POINT

# check for mono-devel.
which mono || install_mono  # only install and upgrade the system if mono-devel is missing


# NVM Sections
echo "---------------------------------------------------"
echo "NVM SETUP."
sudo echo ' '

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

nvm install --lts
npm config set @zen:registry https://www.myget.org/F/zenprotocol/npm/
npm install @zen/zen-node -g


# set data path location for the database
DATAPATH="$HOME/.config/zen-node"

echo "---------------------------------------------------"
echo "Generating Zen-Node Service File..."

# generate the service file then save it appropriately
printf "[Unit]
Description=Zen Node
After=network.target

[Service]
Type=simple
WorkingDirectory=$HOME/.nvm/versions/node/$(node --version)/lib/node_modules/@zen/zen-node/Release/
ExecStart=/usr/bin/mono $HOME/.nvm/versions/node/$(node --version)/lib/node_modules/@zen/zen-node/Release/zen-node.exe --data-path "$DATAPATH" --api "*:11567" --addressdb
Restart=on-failure

[Install]
WantedBy=multi-user.target
" | sudo tee /etc/systemd/system/zen-node.service


# check for the blockchain DB, if present, continue.
# if absent, check for the zipped version and extract it.
# if no zipped version present, download the one hosted.
if [[ ! -s $DATAPATH ]] ; then
  echo "---------------------------------------------------"
  if [[ ! -s "zen-node.zip" ]] ; then
    echo "Downloading Blockchain..."
    # download zen-node.zip from s3
    wget https://node-backups.s3-eu-west-1.amazonaws.com/zen-node-addressdb.zip
  fi

  echo "Unziping The BlockchainDB in $DATAPATH..."
  unzip zen-node.zip -d "$HOME/.config"

fi

echo "---------------------------------------------------"
echo "Starting ZEN NODE...."
sudo systemctl enable zen-node.service
sudo systemctl start zen-node.service
sudo journalctl -f -u zen-node.service
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zenprotocol.com/apps/headless/deploy/shell-script.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
