如何创建 32 位 chroot 系统,该系统只是我当前系统的镜像以用于编译目的?

如何创建 32 位 chroot 系统,该系统只是我当前系统的镜像以用于编译目的?

经过大量的谷歌搜索和发布并为晦涩的 GCC 链接器错误消息哭泣之后,我得出的结论是,在外国 CPU 架构中可靠地构建某些东西的唯一方法是设置 chroot 环境。这有点有趣,因为我已经在 VirtualBox 中运行 Debian,所以现在它将是虚拟系统中的虚拟系统。

当我阅读有关 chroot 的各种教程时,我注意到有两点我不喜欢它们:

  1. 它们总是包含一个从它们选择的某个 URL 下载系统的命令,如下所示。我想使用我已有的类似系统,并尽可能缩小。

    sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ http://mirror.url.com/ubuntu/
    
  2. 从未实际提及编译位于主机系统上的项目。就像我真的不想将我的项目复制到某个地方 - 如果是这样的话,我可以设置另一个虚拟盒子系统。

所以我想问是否有人真的设法创建 chroot 系统并且用它来构建一个项目。当然,如果该系统尽可能小,那将是理想的,因为我只是为库安装它。如果它只是下载运行它的 64 位系统的 32 位版本,那就太好了。

Linux 程序员一直说在 Linux 上编程比在 Windows 上容易得多。我很想最终体验其中的一些。

答案1

我已经写了一个创建 32 位 chroot 的教程,所以我不会在这里重复它,并且我假设您已经阅读过它。在这个答案中,我将只解决您问题中的具体要点。

它们总是包含一个从它们选择的某个 URL 下载系统的命令,如下所示。我想使用我已有的类似系统,并尽可能缩小。

您确实需要下载软件包。大多数 32 位软件包未安装或无法安装在您的系统上,因为您有提供相同文件的 64 位软件包。

您确实需要选择要安装的 32 位发行版的版本。毕竟,可以使用相同的技术来安装发行版的其他版本。

您提出了两个不兼容的目标:一个是拥有一个最小的系统,另一个是重现您已有的 64 位系统。如果您想要一个最小的系统,请从 debootstrap 安装的内容开始。当然,您可能可以通过删除一些永远不会在 chroot 中使用的包来节省几兆字节的空间,但是不值得花时间去摆弄依赖项(您可能必须破坏很多依赖项)删除不是绝对​​必要的包)。如果您想重现现有安装,请使用apt-clone如果可供使用的话 (例子), 如果不使用dpkg --get-selectionsapt-mark

从未实际提及编译位于主机系统上的项目。就像我真的不想将我的项目复制到某个地方 - 如果是这样的话,我可以设置另一个虚拟盒子系统。

schroot 设置的 chroot 已经有您的主目录。更准确地说,/home是绑定安装在 chroot 内部。因此,如果您的项目位于 下的某个位置/home,那么它已经在 chroot 中可用。

如果您想让其他目录可用,请将条目添加到/etc/schroot/default/fstab,复制现有条目/home,例如

/dev            /dev            none    rw,bind         0       0
/dev/pts        /dev/pts        none    rw,bind         0       0
/home           /home           none    rw,bind         0       0
/tmp            /tmp            none    rw,bind         0       0
/scratch        /scrath         none    rw,bind         0       0

所以我想问是否有人真的设法创建 chroot 系统并用它来构建一个项目。

我一直这样做。事实上,这就是我最初写那篇文章的原因。

答案2

首先在虚拟机中构建一个,然后将其复制到一个子目录作为您的 chroot 目录。

是的,我已经这样做了,并用它来进行 32 位干净构建。

相关内容