在32位机器上创建64位Debian软件包

时间:2014-04-28 11:42:03

标签: linux build cross-compiling deb dpkg

我尝试使用以下方法创建amd64包:

sudo dpkg-buildpackage -us -uc -aamd64
在i386机器上。

我得到的错误是:

Can't exec "x86_64-linux-gnu-strip": no such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 215

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

构建交叉编译器/ binutils通常非常困难,并且它不允许您测试程序。
虚拟机速度非常慢,并且会产生强烈的分离,这使得难以在主机和VM之间共享文件。

最快的解决方案和KISS方式是Qemu-User-static:系统调用在用户模式下以32位转换。 64位内核对32位应用程序执行相同操作(但在内核模式下)。

  

从64位Debian livecd下载或提取rootfs   将其复制到您真实根目录的子文件夹中   将qemu-user-x86_64复制到相对于新提取的rootfs的$ PATH文件夹中   将/etc/resolv.conf复制到/your_path_to_target/etc/resolv.conf   通过执行/ bin / bash来chroot到它   启动apt-get安装必要的工具。
  使用rootfs就像使用真正的64位计算机一样。

事情变得非常简单:许多图书馆因为像硬编码路径这样的东西而无法编译(你会遇到很多问题;很多问题就像交叉编译那样)。这里发生的一切都好像你本地构建软件包,可执行文件是IA-32。

  

如果您在64位内核上使用x86_64 CPU,则可以跳过整个qemu部分。只需提取一个64位的rootfs并chroot到它:它将是最快的解决方案,它可以存在,dpkg-buildpackage将始终有效 (不需要使用像pbuilder这样的工具)
  如果你想在chroot中使用网络,请不要忘记复制/etc/resolv.conf。

  

如果在64位系统上使用32位内核,则可以将qemu-kvm与修改后的bios一起使用,它将比qemu-user更快,因为不需要JIT重新编译。

答案 1 :(得分:0)

您可以使用多种方法。许多Debian开发人员使用pbuilder来运行你可以使用特定工具创建的chroot - 快速谷歌搜索引导我this Ubuntu wiki page,但也有Debian维基页面。

另一种方法是使用虚拟环境,libkvm或virtualbox,或者vagrant,...我最近需要为Ubuntu 12.04 LTS提供当前软件包的“backport”,并立即为它设置vagrant。

编辑:这是我最近的笔记,当我需要64位Ubuntu 12.04环境来(reb-)构建/回传当前包以便从Travis CI / GitHub使用它时。这个练习的主机是我的32位Ubuntu笔记本电脑,当时运行的是Ubuntu 13.10:

  1. 从Vagrant安装vagrant 1.5.1 deb
  2. 运行vagrant init hashicorp/precise64以设置64位Ubuntu 12.04实例 (参见http://docs.vagrantup.com/v2/getting-started/的指南和 http://docs.vagrantup.com/v2/getting-started/boxes.html
  3. 运行vagrant up需要一点时间
  4. 运行vagrant ssh,我们现在处于提示状态。
  5. [outside]将三元组dsc / orig.tar.gz / changes.gz复制到与Vagrant实例共享的~/vagrant/tmp
  6. [内部再次]运行sudo apt-get update; sudo apt-get install dpkg-dev后跟 dpkg-source -x *.dsc
  7. [outside:根据需要编辑debian / changelog]
  8. 运行sudo apt-get install ....build-depends listed....以安装列出的Build-Depenbds
  9. 运行dpkg-buildpackage -us -uc -rfakeroot来构建程序包。
  10. 我已经部署了我在一些Travis构建中创建的二进制包。所以:在32位系统上创建一个64位软件包。

    Vagrant是一种相当流行的工具,并被大量虚拟提供商使用。

    如果您使用64位Linux作为主机,您可以通过docker.io做得更好,这可能是最新,最快,性能最高的方法(因此可能优于Qemu方法 - 例如{ {3}}

答案 2 :(得分:0)

您需要安装multiarch软件包才能让amd64和i386工具和库同时存在于同一系统中。当然,如果您的主机架构只有i386,amd64工具和库将不起作用,所以我同意@ user2284570关于qemu用户仿真的信息。