Compiler ZeroTier sur Alpine Linux

Introduction

ZeroTier n'est pas disponible dans les dépôts officiels d'Alpine Linux. Il est donc nécessaire de le compiler depuis les sources.
Ce guide couvre la compilation sur Alpine 3.23 pour deux cas d'usage distincts :

(Le contrôleur est le composant qui permet de créer et gérer des réseaux ZeroTier via l'API locale. Il est indispensable dans une architecture self-hosted sans dépendance aux serveurs ZeroTier publics.)


Prérequis Communs

Les étapes suivantes sont identiques quel que soit le cas d'usage. Configurer le DNS si nécessaire, mettre à jour le système, puis installer les outils de compilation et activer le module TUN :

echo "nameserver 1.1.1.1" > /etc/resolv.conf
apk update ; apk upgrade -a

# Outils de compilation
apk add git make g++ linux-headers cargo rust openssl-dev pkgconfig

# Module TUN (nécessaire au fonctionnement de ZeroTier)
modprobe tun
echo "tun" >> /etc/modules

Cas 1 : Client Simple (sans contrôleur)

C'est le cas le plus courant : la machine rejoint un réseau ZeroTier géré par un contrôleur hébergé ailleurs.

Compilation

cd /root
git clone https://github.com/zerotier/ZeroTierOne.git
cd ZeroTierOne
make -j$(nproc)
make install

Nettoyage

Les sources et les outils de compilation ne sont plus nécessaires après l'installation :

cd /root
rm -rf ZeroTierOne
apk del git make g++ linux-headers cargo rust openssl-dev pkgconfig
apk cache clean

Dépendances de fonctionnement

apk add openssl libstdc++ libgcc

Cas 2 : Client + Contrôleur (avec ZT_NONFREE=1)

Si la machine doit héberger le contrôleur de réseau (création et gestion de réseaux via l'API locale sur le port 9993/TCP), le flag ZT_NONFREE=1 est requis à la compilation.

(Ce flag active le code du contrôleur qui est sous licence BSL 1.1 — gratuit pour un usage interne, mais soumis à des restrictions pour un usage commercial. Consulter la licence pour plus de détails.)

Compilation

Il est recommandé de pin une version stable pour le contrôleur :

cd /root
git clone https://github.com/zerotier/ZeroTierOne.git
cd ZeroTierOne
git checkout 1.14.2
make -j$(nproc) ZT_NONFREE=1
make install

(Sans le flag ZT_NONFREE=1, le binaire sera compilé sans le contrôleur. Les appels à l'API /controller/ retourneront des erreurs.)

Nettoyage

Si vous prévoyez de construire un planet custom (serveur racine self-hosted), conservez les sources pour compiler l'outil mkworld. Sinon, vous pouvez nettoyer immédiatement :

cd /root
rm -rf ZeroTierOne
apk del git make g++ linux-headers cargo rust openssl-dev pkgconfig
apk cache clean

Dépendances de fonctionnement

Le contrôleur nécessite jq et curl en plus des dépendances de base, pour interagir avec l'API locale :

apk add openssl libstdc++ libgcc jq curl

Création du Service OpenRC

Une fois la compilation terminée (quel que soit le cas d'usage), créer le service OpenRC pour gérer ZeroTier :

cat << 'EOF' > /etc/init.d/zerotier-one
#!/sbin/openrc-run
description="ZeroTier One virtual network service"
depend() {
 need net
 after firewall
}
command="/usr/sbin/zerotier-one"
command_args="-d"
pidfile="/var/lib/zerotier-one/zerotier-one.pid"
start_pre() {
 checkpath --directory --owner root:root --mode 0755 /var/lib/zerotier-one
}
EOF
chmod +x /etc/init.d/zerotier-one
rc-update add zerotier-one

Démarrer le service et vérifier son fonctionnement :

rc-service zerotier-one start
sleep 5

zerotier-cli info
zerotier-cli status

La commande zerotier-cli info doit retourner une ligne du type 200 info [NODE_ID] [VERSION] ONLINE. Si le statut est ONLINE, ZeroTier fonctionne correctement.


Vérification de la Présence du Contrôleur

Pour confirmer que le contrôleur est bien actif (cas 2 uniquement), interroger l'API locale :

AUTH_TOKEN=$(cat /var/lib/zerotier-one/authtoken.secret)

curl -s -H "X-ZT1-Auth: ${AUTH_TOKEN}" \
 "http://127.0.0.1:9993/controller" | jq .

Si le contrôleur est présent, la réponse contiendra un objet JSON avec le champ "controller": true.
Si le binaire a été compilé sans ZT_NONFREE=1, cette requête retournera une erreur 404.


Récapitulatif



↑ Haut de page