为Incus构建Distrobuilder
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 | cat <<EOF | incus exec go-dev /bin/bash |
不要遗漏构建基础套件
对于手动安装golang编译器的用户,请务必记得安装build-essential
或其他构建基础套件!
安装Golang套件
1 | cat <<EOF | incus exec go-dev -- /bin/bash |
如有需要,可以将上述下载链接更换为镜像站链接。
获取distrobuilder源代码
直接前往Releases - lxc/distrobuilder下载最新的源代码包。
如果在本机上下载完成了,可以推送到容器中:
1 | incus file push distrobuilder-distrobuilder-3.0.tar.gz go-dev/root/ |
执行incus exec go-dev -- /bin/bash
进入容器,接着执行:
1 | mkdir -p $HOME/go/src/github.com/lxc/ |
配置go语言资源代理(可选)
以南京大学镜像站为例:
1 | go env -w GO111MODULE=on |
开始编译!
1 | cd distrobuilder/ |
试运行
1 | cd ~/go/bin/ |
若能成功运行,就可以拉回本机使用了。需要回到主机运行:
1 | incus file pull go-dev/root/go/bin/distrobuilder . |
容器也可以随之摧毁:
1 | incus delete go-dev -f |