为Alpine Linux 3.20 编译安装ZeroTier

没有ZeroTier软件包!

由于我云服务器使用的是Alpine Linux来最大程度节省资源用于实际服务,而ZeroTier官方没有给出Alpine Linux的安装包,所以要用点野路子才能安装上。
使用官方的安装脚本 Be Like:

Neko_SG:~# curl -s https://install.zerotier.com | bash

*** ZeroTier Service Quick Install for Unix-like Systems

*** Tested OSes / distributions:

***   MacOS (10.13+) (just installs ZeroTier One.pkg)
***   Debian Linux (7+)
***   RedHat/CentOS Linux (6+)
***   Fedora Linux (16+)
***   SuSE Linux (12+)
***   Mint Linux (20+)
***   Kali Linux (2024.1+)

*** Supported architectures vary by OS / distribution. We try to support
*** every system architecture supported by the target.

*** Please report problems by opening a GitHub issue or Pull Request at: 
*** https://github.com/zerotier/install.zerotier.com
*** Please include the content of `/etc/os-release` for your distribution.

*** Detecting Linux Distribution

*** Unknown or unsupported distribution! Aborting.

想从包管理器安装 Be Like:

Neko_SG:~# apk add zerotier
fetch https://dl-cdn.alpinelinux.org/alpine/latest-stable/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/latest-stable/community/x86_64/APKINDEX.tar.gz
ERROR: unable to select packages:
  zerotier (no such package):
    required by: world[zerotier]
Neko_SG:~# apk add zerotier-one
ERROR: unable to select packages:
  zerotier-one (no such package):
    required by: world[zerotier-one]
Neko_SG:~# apk search zerotier
Neko_SG:~# 

一个思路是去用别的发行版的软件包,解包提取二进制文件。但是由于Alpine Linux是用的C语言库是musl而不是libc,大部分发行版用点都是libc,所以不一定可以兼容。
还有一个办法,那就相当硬核了,自己编译后,安装。这个方法肯定会遇到很多技术上的问题,所以也是最有挑战性的一条路子,但是,我还是决定开干。

下载源代码

之所以可以这么玩,是因为ZeroTier是开源的。 开源大法好!
先创建一个用于干活的文件夹,然后直接从Github的Release下载源代码:

mkdir /data/zerotier
cd /data/zerotier
wget https://github.com/zerotier/ZeroTierOne/archive/refs/tags/1.14.2.zip
unzip 1.14.2.zip
cd ZeroTierOne-1.14.2/

准备相关环境进行编译

因为Alpine Linux是轻量发行版,所以缺失的库很多,需要自己手动装。我也是边报错边安装,搞了好久。
我的版本是Alpine Linux 3.20,以下是需要安装的软件包:

apk add util-linux pkgconfig openssl-dev libffi cargo linux-headers g++ gcc make

进行编译

进入源代码目录,执行:

make -j$(nproc)

如果没有报错,一个会顺利在目录生成一个zerotier-one文件,然后还会有zerotier-clizerotier-idtool这两个软链接链接到zerotier-one。如果是这样,那就编译成功了。

运行前的准备

如果你直接运行。那大概率并不会出现ZeroTier的虚拟网络接口,因为相关的内核模块并没有启用。当然,这个虚拟的接口需要先加入了网络才会开启,不然也是没有的。
运行这个命令开启内核模块:

modprobe tun

如果报错不行的话,试一下重启系统,模块要重启才能生效。
但是,这样子设置的话,肯定重启就没了。所以要持久化设置,就需要修改/etc/modules文件:

nano /etc/modules

在文件后面加上tun

af_packet
ipv6
tun

这样设置后,重启也可以正常生效了。

ZeroTier,启动!

直接在编译好的目录下,执行

./zerotier-one -d

即可运行。
但是,ZeroTier也还是会在/usr/lib/zerotier-one/目录下生成相关的配置文件,我个人更倾向于把那三个生成的文件放到这个目录下,跟官方的一致。
不出意外的话,就能在ifconfig里面看到虚拟的接口了。

编译好的文件分享

如果你用的也是Alpine Linux,那你可以用我编译好的ZeroTier。
这是编译好的文件下载地址:
zerotier-musl.zip
同样的,需要安装对应的软件包才能使用:

apk add util-linux

装完之后,参照上面的运行前准备部分,照做就行了。