如何使用 dpkg --root 构建 chroot 环境

如何使用 dpkg --root 构建 chroot 环境

我正在尝试构建一个极其最小的 chroot 环境和/或 docker 基础映像,并且严格只安装用于支持我想要在其中运行的二进制文件的软件包。我对诸如此类的工具不感兴趣去升压因为这些似乎迫使我建立一个完整的“系统”,而这不是我想要的。我只想要我认为必要的包。

我可以手动下载我想要的 .deb 文件,确保下载所有内容以满足声明的依赖项和 PreDepends。

当我尝试安装dpkg --root=<target>特别是时,问题就出现了libc6。这就像安装前/安装后脚本没有放置在正确的位置,但我无法弄清楚我错过了什么:

# dpkg --install --root /target /files/archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.37-0ubuntu2_amd64.deb
(Reading database ... 0 files and directories currently installed.)
Preparing to unpack .../libc6_2.37-0ubuntu2_amd64.deb ...
dpkg (subprocess): unable to execute new libc6:amd64 package pre-installation script (//var/lib/dpkg/tmp.ci/preinst): No such file or directory
dpkg: error processing archive /files/archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.37-0ubuntu2_amd64.deb (--install):
 new libc6:amd64 package pre-installation script subprocess returned error exit status 2
dpkg (subprocess): unable to execute new libc6:amd64 package post-removal script (//var/lib/dpkg/tmp.ci/postrm): No such file or directory
dpkg: error while cleaning up:
 new libc6:amd64 package post-removal script subprocess returned error exit status 2
Errors were encountered while processing:
 /files/archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.37-0ubuntu2_amd64.deb

答案1

我怀疑你还没有安装dash在你的目标目录中...使用非默认安装目录,dpkg调用 chroot 内的维护者脚本,因此他们的 shebang 需要在 chroot 中得到满足。

debootstrap您可能最终会遇到依赖循环,这是像handle 这样的工具对您来说最困难的事情之一。您可能会发现mmdebstrap有用 - 它的“提取”和“自定义”变体支持安装给定的包(和依赖项)列表,无需其他任何东西(甚至不是必要的包)。

相关内容