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 :
- Client simple : la machine rejoint un réseau ZeroTier existant, sans héberger de contrôleur.
- Client + Contrôleur : la machine héberge également le contrôleur de réseau, ce qui nécessite le flag ZT_NONFREE=1 à la compilation.
(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
- Client simple :
make -j$(nproc)— dépendances : openssl, libstdc++, libgcc - Client + Contrôleur :
make -j$(nproc) ZT_NONFREE=1— dépendances : openssl, libstdc++, libgcc, jq, curl - Fichiers installés :
/usr/sbin/zerotier-one (binaire principal)
/var/lib/zerotier-one/ (identité, configuration, état) - Service : géré via OpenRC avec
rc-service zerotier-one start|stop|restart
↑ Haut de page