在 Docker 容器中使用 abuild rootbld 构建

来自 高山Linux


容器权限

abuild-rootbld 使用 bwrap 创建一个非特权沙箱。为了允许在 Docker 容器中运行的 高山 系统中使用 bwrap,容器需要额外的权限。

最不安全的解决方案

只需使用 --privileged 参数启动容器,或在 compose file 中使用它。

这仅在 Docker (或 Podman) 以 root 身份运行时才有可能。

使用修改后的 seccomp 配置文件 的安全解决方案

github.com/moby/moby 获取默认的 seccomp profile

并将这个新对象添加到现有的 syscalls-JSON-Array 中

{
	"syscalls": [
		{
			"names": [
				"clone",
				"mount",
				"pivot_root",
				"setdomainname",
				"sethostname",
				"umount2"
			],
			"action": "SCMP_ACT_ALLOW"
		}
	]
}

将扩展后的配置文件保存到类似 seccomp-bwrap.json 的文件中。

没有预定义的匹配 capability 提供 pivot_root syscall。

新创建的文件可以通过以下方式之一使用

    security_opt:
      - seccomp=./seccomp-bwrap.json


运行 abuild

启动容器

docker start <容器名称>

使用 sshdocker exec 连接到容器。

net 选项

默认情况下,rootbld 沙箱没有网络连接。
如果构建过程需要网络连接以下载构建命令期间的附加文件,则必须在 APKBUILD 文件中指定 net 选项。

abuild rootbld

在您的 git 仓库路径中运行

abuild rootbld