我尝试使用以下方法创建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
有什么建议吗?
答案 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:
vagrant init hashicorp/precise64
以设置64位Ubuntu 12.04实例
(参见http://docs.vagrantup.com/v2/getting-started/的指南和
http://docs.vagrantup.com/v2/getting-started/boxes.html)vagrant up
需要一点时间vagrant ssh
,我们现在处于提示状态。~/vagrant/tmp
sudo apt-get update; sudo apt-get install dpkg-dev
后跟
dpkg-source -x *.dsc
sudo apt-get install ....build-depends listed....
以安装列出的Build-Depenbds dpkg-buildpackage -us -uc -rfakeroot
来构建程序包。我已经部署了我在一些Travis构建中创建的二进制包。所以:在32位系统上创建一个64位软件包。
Vagrant是一种相当流行的工具,并被大量虚拟提供商使用。
如果您使用64位Linux作为主机,您可以通过docker.io做得更好,这可能是最新,最快,性能最高的方法(因此可能优于Qemu方法 - 例如{ {3}}
答案 2 :(得分:0)
您需要安装multiarch
软件包才能让amd64和i386工具和库同时存在于同一系统中。当然,如果您的主机架构只有i386,amd64工具和库将不起作用,所以我同意@ user2284570关于qemu用户仿真的信息。