# How to get Tezos¶

In this how-to we explain how to get up-to-date binaries to run Tezos on any network (either on the mainnet or on one of the test networks). Tezos consists of several binaries (i.e., executable files), including: a client, a node, a baker, and an endorser.

There are several options for getting the binaries, depending on how you plan to use Tezos:

• getting static binaries. This is the easiest way to get native binaries for the latest stable release, requiring no dependencies, under Linux.

• installing binaries. This is the easiest way to install native binaries for the latest stable release, together with their dependencies, using a package manager.

• using docker images. This is the easiest way to run the latest stable release of the binaries in Docker containers, on any OS supported by Docker.

• building the binaries via the OPAM source package manager. Take this way to install the latest stable release in your native OS environment, automatically built from sources.

• setting up a complete development environment by compiling the sources like developers do. This is the way to take if you plan to contribute to the source code. It allows to install any version you want (typically, the current development version on the master branch) by compiling it yourself from the sources.

These different options are described in the following sections.

Note that some of the packaged distributions are not only available for the latest stable release. For instance, static binaries are also available for release candidates, and Docker images are also available for the current developement version (see Release system for more information).

When choosing between the installation options, you may take into account the convenience of the installation step (and of upgrading steps), but also efficiency and security considerations. For instance, static binaries have a different memory footprint compared to dynamically-linked binaries. Also, compiling the sources in the official Tezos repository is more secure than installing OPAM packages from a repository that is not under Tezos control. In particular, compiling from sources enforces a fixed set of dependencies; when compiling via OPAM, this set of dependencies may change, which may or may not be compatible with your security practices.

## Getting static binaries¶

You can get static Linux binaries from the latest release in the tezos-packaging repository.

This repository provides static binaries for x86_64 and arm64 architectures. Since these binaries are static, they can be used on any Linux distribution without any additional prerequisites. However, note that, by embedding all dependencies, static binary executables are typically much larger than dynamically-linked executables.

## Installing binaries¶

Depending on your operating system, you may install Tezos (dynamically-linked) binaries and their dependencies using a package manager, as follows.

### Ubuntu Launchpad PPA with Tezos packages¶

If you’re using Ubuntu, you can install packages with Tezos binaries from the Launchpad PPA. Currently it supports Focal and Bionic versions. In order to add the PPA repository to your machine and install the binaries, run the following commands:

sudo add-apt-repository ppa:serokell/tezos && sudo apt-get update
sudo apt-get install -y tezos-client
sudo apt-get install -y tezos-node
sudo apt-get install -y tezos-baker-008-ptedo2zk
sudo apt-get install -y tezos-endorser-008-ptedo2zk
sudo apt-get install -y tezos-accuser-008-ptedo2zk


Upgrading to a newer release is made easy by the APT package manager, using commands such as apt-get update, apt-get upgrade <package>, and apt-get install <new-package>. Indeed, as the names of some packages (e.g. the baker) depend on their version, you may have to also install new packages. You may take a look at the available packages in the Tezos PPA repository listed by apt-get update.

### Fedora Copr repository with Tezos packages¶

If you’re using Fedora, you can install packages with Tezos binaries from the Copr repository. Currently it supports Fedora 32 and 33. In order to dd the Copr repository to your machine and install the binaries, run the following commands:

dnf copr enable -y @Serokell/Tezos && dnf update -y
dnf install -y tezos-client
dnf install -y tezos-node
dnf install -y tezos-baker-008-PtEdo2Zk
dnf install -y tezos-endorser-008-PtEdo2Zk
dnf install -y tezos-accuser-008-PtEdo2Zk


Upgrading to a newer release is made easy by the DNF package manager, using commands such as dnf upgrade <package>, and dnf install <new-package>. Indeed, as the names of some packages (e.g. the baker) depend on their version, you may have to also install new packages. You may take a look at the available packages in the Tezos Copr repository listed by dnf repoinfo.

## Using Docker images¶

For every change committed in the GitLab repository, Docker images are automatically generated and published on DockerHub. This provides a convenient way to run an always up-to-date tezos-node. The script tezos-docker-manager.sh (formally known as alphanet.sh) is provided to download the right image for each network and run a simple node. Its only requirement is a working installation of Docker (including both Docker Engine and Docker Compose) on a machine with architecture x86_64. Although we only officially support Linux, the script has been tested with success in the past on Windows, OS X, and Linux.

The same script can be used to run Tezos on Mainnet, on Edo2net, or on other network: it suffices to rename it as it downloads a different image based on its name. For example, to run Tezos on the Edo2net test network with the latest release:

wget -O edo2net.sh https://gitlab.com/tezos/tezos/raw/latest-release/scripts/tezos-docker-manager.sh
chmod +x edo2net.sh


Alternatively, to run on Mainnet:

wget -O mainnet.sh https://gitlab.com/tezos/tezos/raw/latest-release/scripts/tezos-docker-manager.sh
chmod +x mainnet.sh


In the following we assume you are running on the Edo2net test network. You are now one step away from a working node:

./edo2net.sh start


This will download the right Docker image for your chosen network, launch 3 Docker containers running the node, the baker and the endorser. Keep in mind that when a Tezos node is launched, it needs to connect to new peers and synchronize the chain. This can be lengthy on the first launch considering that the chain takes up several gigabytes of data. See how to use Tezos for more details.

Every call to edo2net.sh will check for updates of the node and will fail if your node is not up-to-date. For updating the node, simply run:

./edo2net.sh restart


If you prefer to temporarily disable automatic updates, you just have to set an environment variable:

export TEZOS_ALPHANET_DO_NOT_PULL=yes


See ./edo2net.sh --help for more information about the script. In particular see ./edo2net.sh client --help or the online manual for more information about the client. Every command to the tezos-client can be equivalently executed by using ./edo2net.sh client, passing the needed arguments. Similarly, tezos-admin-client can be executed using ./edo2net.sh admin-client.

## Building from sources via OPAM¶

The easiest way to build the binaries from the source code is to use the OPAM source package manager for OCaml.

### Environment¶

Currently Tezos is being developed for Linux x86_64, mostly for Debian/Ubuntu and Arch Linux. The following OSes are also reported to work: macOS (x86_64), Arch Linux ARM (aarch64), Debian Linux (buster), Ubuntu Linux (focal). A Windows port is feasible and might be developed in the future.

Note

If you build the binaries by using the following instructions inside a Docker container, you have to give extended privileges to this container, by passing option --privileged to the docker run command.

### 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.

After the first install of OPAM, use opam init --bare to set it up while avoiding to compile an OCaml compiler now, as this will be done in the next step.

### Install Tezos OPAM packages¶

The latest Tezos release is available (as soon as possible after the release) directly as OPAM packages.

Note

Every file related to OPAM is (by default) in $HOME/.opam which means that, first, OPAM installs are user-specific and, second, you can get rid of everything by removing this directory (+ updating your rc files ($HOME/.bashrc, $HOME/.profile, $HOME/.zshrc, $HOME/.emacs, …) if you asked/allowed OPAM to add some lines in them). The binaries need a specific version of the OCaml compiler (see the value of variable $ocaml_version in file scripts/version.sh). To get an environment with it do:

wget -O latest-release:version.sh https://gitlab.com/tezos/tezos/raw/latest-release/scripts/version.sh
source latest-release:version.sh
opam switch create for_tezos $ocaml_version eval$(opam env)


Note

The command eval $(opam env) sets up required environment variables. OPAM will suggest to add it in your rc file. If, at any point, you get an error like tezos-something: command not found, first thing to try is to (re)run eval$(opam env --switch $ocaml_version) (replace $ocaml_version with its value in scripts/version.sh) to see if it fixes the problem.

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

opam install depext
opam depext tezos


Note

If an OPAM commands times out, you may allocate it more time for its computation by setting the OPAMSOLVERTIMEOUT environment variable (to a number of seconds), e.g. by adding OPAMSOLVERTIMEOUT=1200 before the command. If no timeout occurs, you may omit this part.

Now, install all the binaries by:

opam install -y tezos


You can be more specific and only opam install tezos-node, opam install tezos-endorser-008-PtEdo2Zk, … In that case, it is enough to install the system dependencies of this package only by running opam depext tezos-node for example instead of opam depext tezos.

Warning

Note that opam install tezos-client and opam install tezos-signer are “minimal” and do not install the support for Ledger Nano devices. To enable it, run opam install ledgerwallet-tezos in addition to installing the binaries. (The macro meta-package tezos installs ledgerwallet-tezos.)

### Updating via OPAM¶

Installation via OPAM is especially convenient for updating to newer versions. Once some libraries/binaries are installed and new versions released, you can update by:

opam update
opam depext


It is recommended to also run the command opam remove -a in order to remove the dependencies installed automatically and not needed anymore. Beware not uninstall too much though.

Identified situations where it will be more tricky are:

• When the OCaml compiler version requirement changes. In this case, be explicit about the “upgrade” and do opam upgrade --unlock-base ocaml.$new_version tezos. • When there are Rust dependencies involved. The way to go is still unclear. The solution will be defined when delivering the first release with Rust dependencies. ## Setting up the development environment from scratch¶ If you plan to contribute to the Tezos codebase, the way to go is to set up a complete development environment, by cloning the repository and compiling the sources using the provided makefile. TL;DR: From a fresh Debian Buster x86_64, you typically want to do: sudo apt install -y rsync git m4 build-essential patch unzip wget pkg-config libgmp-dev libev-dev libhidapi-dev libffi-dev opam jq zlib1g-dev # [install rust] wget https://sh.rustup.rs/rustup-init.sh chmod +x rustup-init.sh ./rustup-init.sh --profile minimal --default-toolchain 1.44.0 -y # [source cargo] source$HOME/.cargo/env
# [get sources]
git clone https://gitlab.com/tezos/tezos.git
cd tezos
git checkout latest-release
# [install Tezos dependencies]
opam init --bare
make build-deps
# [compile sources]
eval $(opam env) make # [optional setup] export PATH=~/tezos:$PATH
source ./src/bin_client/bash-completion.sh
export TEZOS_CLIENT_UNSAFE_DISABLE_DISCLAIMER=Y


The following sections describe the individual steps above in more detail.

### Install Rust¶

Compiling Tezos requires the Rust compiler, version 1.44.0, and the Cargo package manager to be installed. If you have rustup installed, it should work without any additional steps on your side. You can use rustup 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:

wget https://sh.rustup.rs/rustup-init.sh
chmod +x rustup-init.sh
./rustup-init.sh --profile minimal --default-toolchain 1.44.0 -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:

source $HOME/.cargo/env  Note that the command line above assumes that rustup installed Cargo in $HOME/.cargo, but this may change depending on how you installed rustup. See the documentation of your rustup distribution if file .cargo does not exist in your home directory.

### Install Zcash Parameters¶

Tezos binaries require the Zcash parameter files to run. Docker images come with those files, and the source distribution also includes those files. But if you compile from source and move Tezos to another location (such as /usr/local/bin), the Tezos binaries may prompt you to install the Zcash parameter files. The easiest way is to download and run this script:

https://raw.githubusercontent.com/zcash/zcash/master/zcutil/fetch-params.sh


The node will try to find Zcash parameters in the following directories, in this order:

1. $XDG_DATA_HOME/.local/share/zcash-params 2. $XDG_DATA_DIRS/zcash-params (if $XDG_DATA_DIRS contains several paths separated by colons :, each path is considered) 3. $OPAM_SWITCH_PREFIX/share/zcash-params

4. ./_opam/share/zcash-params

5. ~/.zcash-params

6. ~/.local/share/zcash-params

7. /usr/local/share/zcash-params

8. /usr/share/zcash-params

If the node complains that it cannot find Zcash parameters, check that at least one of those directories contains both files sapling-spend.params and sapling-output.params. Here is where you should expect to find those files:

• As the opam hook would overwrite the effects of eval $(scripts/env.sh) the script will disable the opam hook temporarily. • OPAM is meant to handle correctly the OCaml libraries but it is not always able to handle all external C libraries we depend on. On most systems, it is able to suggest a call to the system package manager but it currently does not handle version checking. • As a last resort, removing the _opam folder (as part of a git clean -dxf for example) allows to restart in a fresh environment. ### Compile¶ Once the dependencies are installed we can update OPAM’s environment to refer to the new switch and compile the project: eval$(opam env)
make


Lastly, you can also add the Tezos binaries to your PATH variable, and after reading the Disclaimer a few hundred times you are allowed to disable it with TEZOS_CLIENT_UNSAFE_DISABLE_DISCLAIMER=Y.

You may also activate Bash autocompletion by executing:

source ./src/bin_client/bash-completion.sh


Warning

Note that if your shell is zsh, you may need extra configuration to customize shell completion (refer to the zsh documentation).

### Update¶

For updating to a new version, you typically have to update the sources by doing git pull in the tezos/ directory and replay the compilation scenario starting from make build-deps. You may also use make clean (and rm -Rf _opam/ if needed) before that, for restarting compilation in a fresh state.