---
title: Install zrok in Linux
sidebar_label: Linux
---

import { AssetsProvider } from '@site/src/components/assets-context';
import DownloadCard from '@site/src/components/download-card';
import styles from '@site/src/css/download-card.module.css';
import AnsibleRepoSetup from './_ansible_repo_setup.yaml'
import ConcatenateYamlSnippets from '@site/src/components/cat-yaml.jsx'

## Linux Binary

<AssetsProvider>
  <div className={styles.downloadContainer}>
    <DownloadCard
      osName="Linux"
      osLogo="/img/logo-linux.svg"
    />
  </div>
</AssetsProvider>

Download the binary distribution for your Linux distribution's architecture or run the install script below to pick the correct CPU architecture automatically. For Intel and AMD 64-bit machines use the `amd64` distribution. For Raspberry Pi use the `arm64` distribution.

<Details>
<summary>Manually install in `~/bin/zrok`</summary>

1. Unarchive the distribution in a temporary directory.

    ```text
    mkdir /tmp/zrok && tar -xf ./zrok*linux*.tar.gz -C /tmp/zrok
    ```

1. Install the `zrok` executable.

    ```text
    mkdir -p ~/bin && install /tmp/zrok/zrok ~/bin/
    ```

1. Add `~/bin` to your shell's executable search path. Optionally add this to your ~/.zshenv to persist the change.

    ```text
    PATH=~/bin:$PATH
    ```

1. With the `zrok` executable in your path, you can then execute the `zrok` command from your shell:

    ```text
    zrok version
    ```

    ```buttonless title="Output"
                   _    
     _____ __ ___ | | __
    |_  / '__/ _ \| |/ /
     / /| | | (_) |   < 
    /___|_|  \___/|_|\_\
    
    v0.4.0 [c889005]
    ```

</Details>

<Details>
<summary>Script to install binary in `/usr/local/bin/zrok`</summary>

This script auto-selects the correct architecture and may be helpful for Raspberry Pi users.

```text
cd $(mktemp -d);

ZROK_VERSION=$(
  curl -sSf https://api.github.com/repos/openziti/zrok/releases/latest \
  | jq -r '.tag_name'
);

case $(uname -m) in
  x86_64)         GOXARCH=amd64
  ;;
  aarch64|arm64)  GOXARCH=arm64
  ;;
  arm*)           GOXARCH=arm
  ;;
  *)              echo "ERROR: unknown arch '$(uname -m)'" >&2
                  exit 1
  ;;
esac;

curl -sSfL \
  "https://github.com/openziti/zrok/releases/download/${ZROK_VERSION}/zrok_${ZROK_VERSION#v}_linux_${GOXARCH}.tar.gz" \
  | tar -xz -f -;

sudo install -o root -g root ./zrok /usr/local/bin/;

zrok version;
```

</Details>
## Install `zrok` from the Repository

We recommend that you install `zrok` from the Linux package repository with the manual steps or the setup script. DEB and RPM packages are available for amd64, arm64, and armv7 architectures.

:::info

Check out [zrok frontdoor](/guides/frontdoor.mdx?os=Linux) for running `zrok` as an always-on service.

:::

<Details>
<summary>Manually set up DEB repository</summary>

```text
(set -euo pipefail;

curl -sSLf https://get.openziti.io/tun/package-repos.gpg \
| sudo gpg --dearmor --output /usr/share/keyrings/openziti.gpg;
sudo chmod a+r /usr/share/keyrings/openziti.gpg;

sudo tee /etc/apt/sources.list.d/openziti-release.list >/dev/null <<EOF;
deb [signed-by=/usr/share/keyrings/openziti.gpg] https://packages.openziti.org/zitipax-openziti-deb-stable debian main
EOF

sudo apt update;
sudo apt install zrok;
zrok version;
)
```

</Details>

<Details>
<summary>Manually set up RPM repository</summary>

```text
(set -euo pipefail;

sudo tee /etc/yum.repos.d/openziti-release.repo >/dev/null <<\EOF;
[OpenZitiRelease]
name=OpenZiti Release
baseurl=https://packages.openziti.org/zitipax-openziti-rpm-stable/redhat/$basearch
enabled=1
gpgcheck=0
gpgkey=https://packages.openziti.org/zitipax-openziti-rpm-stable/redhat/$basearch/repodata/repomd.xml.key
repo_gpgcheck=1
EOF

sudo dnf update;
sudo dnf install zrok;
zrok version;
)
```

</Details>

<Details>
<summary>Script to set up DEB or RPM repository</summary>

1. Download the zrok install script.

    ```text
    curl -sSLfo ./zrok-install.bash https://get.openziti.io/install.bash
    ```

1. Inspect the script to ensure it is suitable to run as root on your system.

    ```text
    less ./zrok-install.bash
    ```

1. Run the script as root to add the package repo and install the `zrok` package.

    ```text
    sudo bash ./zrok-install.bash zrok
    ```

</Details>

<Details>
<summary>Ansible Playbook</summary>

<ConcatenateYamlSnippets
  title="Set up package repository and install zrok">
{AnsibleRepoSetup}
{`
- name: Install zrok package
  gather_facts: false
  hosts: all 
  become: true
  tasks:
  - name: Install zrok
    ansible.builtin.package:
      name: zrok
      state: present
`}
</ConcatenateYamlSnippets>

</Details>