在 Docker 容器中使用 abuild rootbld 构建
容器权限
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运行容器。请参阅 reference 和 security seccomp。 - 在 compose file 中指定使用此配置文件
security_opt:
- seccomp=./seccomp-bwrap.json
运行 abuild
启动容器
docker start <容器名称>
使用 ssh 或 docker exec 连接到容器。
net 选项
默认情况下,rootbld 沙箱没有网络连接。
如果构建过程需要网络连接以下载构建命令期间的附加文件,则必须在 APKBUILD 文件中指定 net 选项。
abuild rootbld
在您的 git 仓库路径中运行
abuild rootbld