Skip to main content

Installation & Set up

In this chapter, we will see the CLI command lines to install the necessary dependencies to run a Mavryk node.

caution

The current Mavkit version is v19.1 and the protocol version is Atlas.

Running an Mavkit node

A node is responsible for receiving, validating and transmitting blocks and operations to nodes it is connected to on the network.

What you need

  • A reliable internet connection
  • 8 GB RAM
  • 2 CPU cores
  • Preferably 256 GB SSD Drive

Set up using Docker images

In this part, we will see how to install Mavryk with Docker.

Docker

Step 1: Installation

If you don't have Docker on your machine, you can install it with the following command:

sudo apt install docker.io

and follow instructions on: https://docs.docker.com/engine/install/linux-postinstall/.

Step 2: Let's config and run!

Run the node in detached mode (-d), as instance on the testnet Atlasnet network with the history-mode "full" using the following command:

docker run --name=mavkit-public-node-full -v node-data-volume:/var/run/mavryk/node mavrykdynamics/mavryk:latest mavkit-node --network=atlasnet

This command will automatically download the mavrykdynamics/mavryk:latest image:

  • -v node-data-volume:/var/run/mavryk/node mount node-data-volume to the specified container. It is where blockchain data will be stored

  • --network= NETWORK selects which network to run. Possible values are: sandbox, mainnet, [testnet] (e.g. basenet, atlasnet. Learn more about testnet aliases here). Default is mainnet.

  • --history-mode= MODE lets you set the mode for the node's blockchain history storage. Possible values are archive , full (default), full:N , rolling , rolling:N.

    • Archive mode retains all data since the genesis block.

    • Full mode only maintains block headers and operations allowing replaying of the chain since the genesis if wanted. Full mode is recommended to bake. More information here.

    • Rolling mode retains only the most recent data and deletes the rest.

For both Full and Rolling modes, it is possible to adjust the number of cycles to preserve by using the :N annotation. The default number of preserved cycles is 5. The value experimental-rolling is deprecated but is equivalent to rolling which should be used instead.

Read more about node configuration here.

After a few minutes, your node identity will be generated and you will be able to check if the node is bootstrapped:

docker exec -it mavkit-public-node-full mavkit-client --endpoint http://127.0.0.1:8732 bootstrapped

(Use Ctrl+C to stop logs displaying)

Some useful commands

To see the manual of commands you can use:

docker run -it mavrykdynamics/mavryk:latest man

To see the various commands and options for the tezos node, use the following command:

docker run -it mavrykdynamics/mavryk:latest mavkit-node --help

To use the client:

docker exec -it mavkit-public-node-full mavkit-client --help

To see the logs :

docker logs mavkit-public-node-full

Docker-compose

One way to run those Docker images is with Docker Compose!

Step 1: Let's launch the node!

The code below launches a full node for the Atlas protocol (mainnet). More information here.

version: "3.4"
volumes:
node_data_full:
name: mainnet-node
external: false
client_data:
name: mainnet-client
external: false
services:
####################################################################################################################################
# You have to uncomment this section if you want to synchronize your node using a snapshot, else you can ignore or delete it.
# Replace /absolute/path/to/your_snapshot.full:/snapshot by the absolute path to the downloaded snapshot.
###################################################################################################################################
# import:
# image: mavrykdynamics/mavryk:latest
# container_name: mavkit-snapshot-import
# command: mavkit-snapshot-import
# volumes:
# - node_data_full:/var/run/mavryk/node
# - client_data:/var/run/mavryk/client
# - "/absolute/path/to/your_snapshot.full:/snapshot"
################################################################################################
# If you want to run a node with history-mode=full, keep that "node_full" part, else delete it.
# You can change the version of the image of tezos in : image: mavrykdynamics/mavryk:v19.1
# You can change the --network=NETWORK option.
################################################################################################
node_full:
container_name: mavkit-public-node-full
image: mavrykdynamics/mavryk:latest
command: mavkit-node --net-addr :9732 --rpc-addr 127.0.0.1:8732 --rpc-addr 0.0.0.0:8732 --allow-all-rpc 0.0.0.0:8732 --history-mode=full
ports:
- '9732:9732'
- '8732:8732'
expose:
- "8732"
- "9732"
privileged: true
volumes:
- node_data_full:/var/run/mavryk/node
- client_data:/var/run/mavryk/client
- /dev/bus/usb:/dev/bus/usb
restart: on-failure

Copy-paste the code above into a docker-compose.yml file, and start the node with:

docker-compose -f docker-compose.yml up -d

To check if the node is bootstrapped:

docker exec -it mavkit-public-node-full mavkit-client --endpoint http://127.0.0.1:8732 bootstrapped
Bonus: Quick synchronization from a snapshot

If you want your node to be bootstrapped quickly, you can synchronize it with the blockchain using a snapshot.

1. Download a .full snapshot from a snapshot provider (https://snapshots.mavryk.network/), in your current repository by replacing with <snapshot_url> in following command:

wget <snapshot_url>

2. Launch the node daemon:

docker-compose up -d node_full
sudo docker exec -it mavkit-public-node-full sh
sudo rm /var/run/mavryk/node/data/lock
exit

3. Stop the node:

docker-compose stop node_full

4. Execute these commands to clean up data and avoid duplicates:

sudo su
rm -rf /var/lib/docker/volumes/mainnet-node/_data/data/context
rm -rf /var/lib/docker/volumes/mainnet-node/_data/data/store
rm -rf /var/lib/docker/volumes/mainnet-node/_data/data/lock
rm -rf /var/lib/docker/volumes/mainnet-node/_data/data/daily_logs/

(do Ctrl+d to quit su mode)

5. In the .yml file presented in Step 1, replace /absolute/path/to/your_snapshot.full:/snapshot by the absolute path to the downloaded snapshot. You can use pwd command to know the absolute path of your current repository. ( Read the comment in the .yml file in Step 1 )

6. Upload the snapshot into the mainnet-node volume (You must uncomment the dedicated import part of the docker-compose file that was previously commented with #):

docker-compose up import

You will have to wait ~1-2 hours to import a full snapshot.

7. Start synchro from snapshot:

docker-compose stop import
docker-compose up -d node_full
Bonus: Upgrade your node storage

Some protocol or client changes require upgrading the node storage. You can simply update it with the following commands:

1. Stop the running container:

docker-compose stop node_full

2. Upgrade the storage:

docker run -it -v node_data_full:/var/run/mavryk/node mavrykdynamics/mavryk:latest mavkit-upgrade-storage
danger

If you encounter an error, follow these steps before proceeding to step 2:

1. Go inside the container:

docker run -it --entrypoint=/bin/sh -v node_data_full:/var/run/mavryk/node mavrykdynamics/mavryk:latest

2. Delete lock files and change node data file ownership/group:

cd /var/run/mavryk/node/
sudo chown -R mavryk.tezos .
rm data/lock

Set up using PPA with Mavryk packages from Serokell

If you’re using Ubuntu, you can install packages with Mavryk binaries from a Launchpad PPA.

Step 1: Installation

In order to add the stable release PPA repository to your machine, do:

REPO="ppa:serokell/tezos"

Then, to install the binaries, run the following commands:

sudo add-apt-repository -y $REPO && sudo apt-get update
sudo apt-get install -y mavkit-client
sudo apt-get install -y mavkit-node
Step 2: Let's config and run!

The following command configures the node for the Basenet Network (Mavryk semi-permanent test network) and stores data in the specified directory ~/mavryk-basenet with the full mode:

mavkit-node config init --data-dir ~/mavryk-basenet --network=basenet --history-mode=full
  • data-dir Define the directory where the data will be stored (by default, it is in .mavkit-node).

  • --network=NETWORK Select which network to run. Possible values are: sandbox, mainnet, [testnet] (e.g. basenet, atlasnet. Learn more about testnet aliases here). Default is mainnet.

  • --history-mode=MODE Set the mode for the chain's data history storage. Possible values are archive , full (default), full:N, rolling, rolling:N.

    • Archive mode retains all data since the genesis block.

    • Full mode only maintains block headers and operations allowing replaying of the chain since the genesis if wanted. Full mode is recommended to bake. More information here.

    • Rolling mode retains only the most recent data and deletes the rest.

For both Full and Rolling modes, it is possible to adjust the number of cycles to preserve by using the :N annotation. The default number of preserved cycles is 5. The value experimental-rolling is deprecated but is equivalent to rolling which should be used instead.

Read more about node configuration here.

You can run the node with:

mavkit-node run --rpc-addr 127.0.0.1:8732 --log-output mavryk.log --data-dir ~/mavryk-basenet
  • --rpc-addr url:port activate the RPC interface that will allow communication with the node. By default, it runs on port 8732 so it is not mandatory to specify it.

  • --log-output mavryk.log will saved logs of the node in the mavryk.log file.

  • data-dir Define the directory where the data will be stored (by default, it is in .mavkit-node).

Step 3: Check synchronization ✅

The Mavkit client can be used to interact with the node. It can query its status or ask the node to perform some actions. For example, after starting your node, you can check if it has finished synchronizing with the following command (you can use another terminal window if you still watch the log):

mavkit-client -E http://127.0.0.1:8732/ bootstrapped
  • -E option is equal to --endpoint option

When you see the message " Node is Bootstrapped ", your Mavryk node is synchronized with the blockchain and you may now perform operations on it!

Bonus: Quick synchronization from a snapshot

If you want your node to be bootstrapped quickly, you can synchronize it with the blockchain using a snapshot.

1. Download a .full snapshot from a snapshot provider (https://snapshots.mavryk.network/) in your current repository by replacing with <snapshot_url> in following command:

wget <snapshot_url>

2. Register the current directory in a variable:

path=$(pwd)

3. Import from the snapshot!

(Replace <name_of_snapshot_file>)

mavkit-node snapshot import $path/<name_of_snapshot_file>

(It is possible to define the directory where the data will be stored with --data-dir directory, by default, it is in .mavkit-node)

4. You can get some information with the following command:

mavkit-node snapshot info $path/<name_of_snapshot_file>
Bonus: Video tutorial with Github codespaces

To help you if you have any doubts about what to do in one of these steps or what is expected to happen when you run the commands, you may check this video that shows the different steps. Some long parts of waiting for commands to terminate have been cut, in practice, the execution took around 20 minutes.

Set up by building from source

In this part, we will see how to install Mavryk from source. The easiest way to build the binaries from the source code is to use the OPAM source package manager for OCaml.

This method is recommended for advanced users as it requires basic knowledge of the OPAM package manager and the OCaml packages workflow. In particular, upgrading Mavryk from release to release might require tinkering with different options of the OPAM package manager to adjust the local environment for the new dependencies.

From scratch method

Step 1: Install OPAM

First, you need to install the OPAM package manager, at least version 2.0, that you can get by following the install instructions. The quickest way to get the latest opam up and working is to run this script:

bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
note

If you have trouble with curl, just download the script and run sh install.sh.

For the next command line, answers the prompts with 'N' then 'y'. You may also be prompted for your sudo password. You may encounter a "switch" error, but you can ignore it.

opam init --bare
Step 2: Install Rust
Compiling Mavryk requires the Rust compiler, version 1.52.1, and the Cargo package manager for Rust to be installed. If you have [rustup](https://rustup.rs/) installed, you can use [rustup](https://rustup.rs/) to install both. If you do not have `rustup`, please avoid installing it from Snapcraft; you can rather follow the simple installation process shown below:
cd $HOME
wget https://sh.rustup.rs/rustup-init.sh
chmod +x rustup-init.sh
./rustup-init.sh --profile minimal --default-toolchain 1.52.1 -y

Once Rust is installed, note that your PATH environment variable (in .profile) may be updated and you will need to restart your session so that changes can be taken into account. Alternatively, you can do it manually without restarting your session with the following command :

source $HOME/.cargo/env
Step 3: Install Mavryk dependencies

Install the libraries that Mavryk is dependent on:

sudo apt-get install -y rsync git m4 build-essential patch unzip wget pkg-config libgmp-dev libev-dev libhidapi-dev opam jq zlib1g-dev bc autoconf

Get the source code:

git clone https://gitlab.com/mavryk-network/mavryk-protocol.git
cd mavryk-protocol
git checkout latest-release

Install mavryk dependencies:

make build-deps

You may encounter a "switch" error, but you can ignore it.

You may encounter failures in the processes of the make build-deps command. In that case, just re-type the command opam init --bare to re-initiate.

Step 4: Compile sources

Compile sources:

eval $(opam env)
make
Step 5: Check installation

To check the installation you can use the following commands:

mavkit-node --version
Step 6: Let's config and run!

It is possible to define the directory where the data will be stored with --data-dir (by default, it is in .mavkit-node).

--network=NETWORK Select which network to run. Possible values are: sandbox, mainnet, [testnet] (e.g., basenet, atlasnet. Learn more about testnet aliases here). Default is mainnet.

--history-mode= MODE Set the mode for the chain's data history storage. Possible values are archive , full (default), full:N, rolling, rolling:N.

  • Archive mode retains all data since the genesis block.
  • Full mode only maintains block headers and operations allowing replaying the chain since the genesis if wanted (full mode is recommended to bake. More information here).
  • Rolling mode retains only the most recent data and deletes the rest.

For both Full and Rolling modes, it is possible to adjust the number of cycles to preserve by using the :N annotation. The default number of preserved cycles is 5. The value experimental-rolling is deprecated but is equivalent to rolling which should be used instead.

Read more about node configuration here).

For example, the following command configures the node for the Basenet Network and stores data in the specified directory ~/mavryk-basenet with the full mode.

mavkit-node config init --data-dir ~/mavryk-basenet --network=basenet --history-mode=full

You can run the node with :

mavkit-node run --data-dir ~/mavryk-basenet --rpc-addr 127.0.0.1:8732 --log-output mavryk.log

The parameter --rpc-addr url:port activate the RPC interface that will allow communication with the node. By default, it runs on port 8732 so it is not mandatory to specify it. The file mavryk.log will be saved in /home/user/.

Step 7: Check synchronization ✅

The Mavkit client can be used to interact with the node. It can query its status or ask the node to perform some actions. For example, after starting your node, you can check if it has finished synchronizing with the following command (you can use another terminal window if you still watch the log) :

mavkit-client -E http://127.0.0.1:8732/ bootstrapped

Where:

  • -E option is equal to --endpoint option

When you see the message " Node is Bootstrapped ", your Mavryk node is synchronized with the blockchain, and you may now perform operations on it!

Mavryk OPAM packages method

Step 1: Install OPAM

First, you need to install the OPAM package manager, at least version 2.0, that you can get by following the install instructions. The quickest way to get the latest opam up and working is to run this script:

bash -c "sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
note

If you have trouble with curl, just download the script and run sh install.sh.

For the next command line, answers the prompts with 'N' then 'y'. You may also be prompted for your sudo password. You may encounter a "switch" error, but you can ignore it.

opam init --bare
Step 2: Get an environment
wget -O latest-release:version.sh https://gitlab.com/mavryk-network/mavryk-protocol/raw/latest-release/scripts/version.sh

The binaries need a specific version of the OCaml compiler (see the value of the variable $ocaml_version in file /tezos/scripts/version.sh).

source latest-release:version.sh
opam switch create for_mavryk $ocaml_version
eval $(opam env)

If you get a c compiler error, run this to install some necessary tools:

sudo apt-get install build-essential
Step 3: Get dependencies

In order to get the system dependencies of the binaries, do:

opam depext mavkit
Step 4: Install binaries
opam install mavkit
Bonus: Quick synchronization from a snapshot

If you want your node to be bootstrapped quickly, you can synchronize it with the blockchain using a snapshot.

1: Download a .full snapshot from a snapshot provider (https://snapshots.mavryk.network/) in your current repository by replacing with <snapshot_url> in following command:

wget <snapshot_url>

2: Register the current directory in a variable:

path=$(pwd)

3: Import from the snapshot!

(Replace <name_of_snapshot_file>)

mavkit-node snapshot import $path/name_of_snapshot_file

(It is possible to define the directory where the data will be stored with --data-dir directory, by default, it is in .mavkit-node)

4: You can get some information with the following command:

mavkit-node snapshot info $path/name_of_snapshot_file

References

[1] https://tezos.gitlab.io/introduction/howtoget.html

[2] https://github.com/serokell/tezos-packaging/blob/master/docs/baking.md