我们在本地计算机上设置了 GitLab CI 运行程序。运行器使用“shell”执行器,因此作业直接在主机环境中运行。
我们在 Julia 中有一个分析工具。它对某些 C++ 代码有一定的依赖性。为了缩短构建时间,我们希望制作一个 docker 镜像,将这些依赖项预先构建到 julia 包中。这样我们就有了一个基于Ubuntu 22.04的docker镜像(CI主机是22.04,内核6.2)。该映像已安装 Julia。我们正在尝试使用二进制生成器.jl作为构建 Julia 包的工具。
当我们在 dockerfile 中运行 BinaryBuilder 来构建镜像时,会出现错误ABORTED (1: Operation not permitted)!
。在上面,我们看到一条警告:
警告:无法在此系统上运行非特权容器!这可能是因为您的内核不支持在用户命名空间内安装覆盖文件系统。为了解决这个问题,我们将改用特权容器。这需要使用sudo。要自动选择此选项,请在启动 Julia 之前将 BINARYBUILDER_RUNNER 环境变量设置为“特权”。
此警告在此被调用常见问题解答的一部分。然而,该常见问题解答中的错误报告来自内核 4.2。我会想象这已经在最近的内核中得到解决,以及我阅读的方式这个帖子似乎表明它可能已在 5.11 中修复。还承诺92dbc9d
从5.11 变更日志对我来说似乎也是这样。
所以核心问题是如何让该工具在 CI 中的 Ubuntu 22.04 中工作。一种方法是授予它特权访问权限,我们可以这样做,但显然并不理想。我担心overlayfs
他们的常见问题解答中的问题是一个转移注意力的问题,该问题已在更新的内核中得到解决,并且还存在其他一些问题。