Distrobuilder作为构建Incus/LXC容器镜像的主要工具,竟然只通过Snap商店提供预编译的二进制包。
岂有此理,让我们设置一个Distrobuilder构建环境吧!一切其实很简单!
启动基础容器
当然,构建一系列动作都可以在本机上直接进行。如果决意如此,请自动忽略本文中容器相关的操作。
不过,Distrobuilder是用Golang编写的程序,因此我们完全可以在容器中构建完成后,移动到主机系统中运行。
既然,构建生成的可执行文件要在主机系统中运行,那当然更推荐设置一个和主机系统相符或接近的容器环境。
例如,我的主机系统是Debian,那么现在一个Debian容器构建环境将具备更好的兼容性。
1
|
incus launch images:debian/12 go-dev
|
安装容器基础软件
由于Debian Bookworm中的golang-go软件包版本号过低,不满足distrobuilder的最低要求版本1.21,因此需要先安装好系统基础组件,稍后自行下载golang编译器。
1
2
3
4
5
|
cat <<EOF | incus exec go-dev /bin/bash
sed -i 's/deb.debian.org/mirrors.bfsu.edu.cn/g' /etc/apt/sources.list
apt-get update
apt-get -y install debootstrap rsync gpg squashfs-tools git make build-essential
EOF
|
不要遗漏构建基础套件
对于手动安装golang编译器的用户,请务必记得安装build-essential或其他构建基础套件!
安装Golang套件
1
2
3
4
|
cat <<EOF | incus exec go-dev -- /bin/bash
rm -rf /usr/local/go && wget -qO- https://go.dev/dl/go1.22.5.linux-amd64.tar.gz | tar xz -C /usr/local
echo 'export PATH=\$PATH:/usr/local/go/bin' >> /root/.bashrc
EOF
|
如有需要,可以将上述下载链接更换为镜像站链接。
获取distrobuilder源代码
直接前往Releases - lxc/distrobuilder下载最新的源代码包。
如果在本机上下载完成了,可以推送到容器中:
1
|
incus file push distrobuilder-distrobuilder-3.0.tar.gz go-dev/root/
|
执行incus exec go-dev -- /bin/bash进入容器,接着执行:
1
2
3
4
|
mkdir -p $HOME/go/src/github.com/lxc/
cd $HOME/go/src/github.com/lxc/
tar xzf /root/distrobuilder-distrobuilder-3.0.tar.gz
mv distrobuilder-distrobuilder-3.0 distrobuilder
|
配置go语言资源代理(可选)
以南京大学镜像站为例:
1
2
|
go env -w GO111MODULE=on
go env -w GOPROXY="https://repo.nju.edu.cn/go/,direct"
|
开始编译!
1
2
|
cd distrobuilder/
make
|
试运行
1
2
|
cd ~/go/bin/
./distrobuilder --help
|
若能成功运行,就可以拉回本机使用了。需要回到主机运行:
1
|
incus file pull go-dev/root/go/bin/distrobuilder .
|
容器也可以随之摧毁: