经过大量的谷歌搜索和发布并为晦涩的 GCC 链接器错误消息哭泣之后,我得出的结论是,在外国 CPU 架构中可靠地构建某些东西的唯一方法是设置 chroot 环境。这有点有趣,因为我已经在 VirtualBox 中运行 Debian,所以现在它将是虚拟系统中的虚拟系统。
当我阅读有关 chroot 的各种教程时,我注意到有两点我不喜欢它们:
它们总是包含一个从它们选择的某个 URL 下载系统的命令,如下所示。我想使用我已有的类似系统,并尽可能缩小。
sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ http://mirror.url.com/ubuntu/
- 从未实际提及编译位于主机系统上的项目。就像我真的不想将我的项目复制到某个地方 - 如果是这样的话,我可以设置另一个虚拟盒子系统。
所以我想问是否有人真的设法创建 chroot 系统并且用它来构建一个项目。当然,如果该系统尽可能小,那将是理想的,因为我只是为库安装它。如果它只是下载运行它的 64 位系统的 32 位版本,那就太好了。
Linux 程序员一直说在 Linux 上编程比在 Windows 上容易得多。我很想最终体验其中的一些。
答案1
我已经写了一个创建 32 位 chroot 的教程,所以我不会在这里重复它,并且我假设您已经阅读过它。在这个答案中,我将只解决您问题中的具体要点。
它们总是包含一个从它们选择的某个 URL 下载系统的命令,如下所示。我想使用我已有的类似系统,并尽可能缩小。
您确实需要下载软件包。大多数 32 位软件包未安装或无法安装在您的系统上,因为您有提供相同文件的 64 位软件包。
您确实需要选择要安装的 32 位发行版的版本。毕竟,可以使用相同的技术来安装发行版的其他版本。
您提出了两个不兼容的目标:一个是拥有一个最小的系统,另一个是重现您已有的 64 位系统。如果您想要一个最小的系统,请从 debootstrap 安装的内容开始。当然,您可能可以通过删除一些永远不会在 chroot 中使用的包来节省几兆字节的空间,但是不值得花时间去摆弄依赖项(您可能必须破坏很多依赖项)删除不是绝对必要的包)。如果您想重现现有安装,请使用apt-clone
如果可供使用的话 (例子), 如果不使用dpkg --get-selections
和apt-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 位干净构建。