很多人应该都听说过Alist,一个在GitHub上有27k stars的文件列表程序,支持多种网盘挂载。
最近想在一台FreeBSD的服务器上运行Alist,但服务器并没有开启Linux兼容层,会出现以下错误:
ELF binary type "0" not known.
./alist: Exec format error. Binary file not executable.
上网搜寻一番,Alist官方并没有提供FreeBSD支持,而网上似乎也没有人有编译过FreeBSD版本,无奈之下,只能自己编译了。
环境要求
- FreeBSD
- wget
- git
- golang>=1.20
- nodejs
- gcc
- bash(FreeBSD不自带,需自行安装!)
编译过程
本文编译版本为3.19.0。
首先要安装FreeBSD并配置好编译环境。我使用的配置是FreeBSD最小安装,硬盘空间7G,其中3G用于系统文件,剩余4G用于环境配置和编译所需空间(虚拟机硬盘扩容了好几次才成功编译😓)。
先进入bash,然后克隆Alist:
git clone https://github.com/alist-org/alist.git然后下载前端的Release(偷个懒):
wget https://github.com/alist-org/alist-web/releases/download/3.19.0/dist.tar.gz
tar -xzvf dist.tar.gz将解压出来的dist文件夹复制到alist/public/下,并进入alist文件夹。
为了加快编译速度并避免一些奇奇怪怪的错误,先把go的源换到国内:
export GOPROXY=https://goproxy.cn,direct
#可以用以下命令查看是否修改成功
go env然后,新建一个sh文件并粘贴以下内容:
appName="alist"
builtAt="$(date +'%F %T %z')"
goVersion=$(go version | sed 's/go version //')
gitAuthor=$(git show -s --format='format:%aN <%ae>' HEAD)
gitCommit=$(git log --pretty=format:"%h" -1)
version=$(git describe --long --tags --dirty --always)
webVersion=$(wget -qO- -t1 -T2 "https://api.github.com/repos/alist-org/alist-web/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
ldflags="\
-w -s \
-X 'github.com/alist-org/alist/v3/internal/conf.BuiltAt=$builtAt' \
-X 'github.com/alist-org/alist/v3/internal/conf.GoVersion=$goVersion' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitAuthor=$gitAuthor' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitCommit=$gitCommit' \
-X 'github.com/alist-org/alist/v3/internal/conf.Version=$version' \
-X 'github.com/alist-org/alist/v3/internal/conf.WebVersion=$webVersion' \
"
go build -ldflags="$ldflags" .
保存并执行,不出意外的话,就可以在当前目录(alist/)下找到名为alist的二进制文件了。
网盘链接
这里分享下我编译的版本。
提取码:Nccc

发表回复