我正试图使用创建一个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
有什么建议吗?
构建交叉编译器/binutils通常非常困难,而且它不允许您测试程序
虚拟机速度非常慢,并且会产生强烈的分离,这使得主机和虚拟机之间很难共享文件。
最快的解决方案和KISS方式是Qemu用户静态:系统调用在用户模式下转换为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来引导它
启动apt-get以安装必要的工具
使用rootfs就像使用真正的64位机器一样。
事情变得非常简单:许多库因为硬编码路径之类的事情而不编译(您将面临许多;许多问题,如交叉编译问题)。在这里,一切都发生在您以本机方式构建包的情况下,而可执行文件是IA-32。
如果在64位内核中使用x86_64 CPU,则可以跳过整个qemu部分。只需提取一个64位的rootfs并chroot到它:这将是可能存在的最快的解决方案,dpkg构建包将始终工作(无需使用pbuilder等工具)
如果您想在chroot中使用网络,请不要忘记复制/etc/resolv.conf。
如果在64位系统上使用32位内核,则可以将qemu-kvm与修改后的bios一起使用,这将比qemu-user更快,因为不需要JIT重新编译。
您需要安装multiarch
软件包,才能在同一系统上同时使用amd64和i386工具和库。当然,如果您的主机架构仅为i386,那么amd64工具和lib将不起作用,所以我同意@user2284570关于qemu用户模拟的观点。
您可以使用多种方法。许多Debian开发人员使用pbuilder
,它在一个chroot中运行,你可以用专门的工具创建它——一个快速的谷歌搜索将我带到这个Ubuntu wiki页面,但它上也有Debian wiki页面。
另一种选择是只使用虚拟环境,要么是libkvm,要么是virtualbox,要么是流浪者。。。我最近需要一个Ubuntu 12.04 LTS的当前包的"后台端口",并在很短的时间内设置了流浪者
编辑:以下是我最近的笔记,当时我需要一个64位的Ubuntu 12.04环境来(reb-)构建/后台端口一个当前包,以便从Travis CI/GitHub使用它。我这次练习的主机是我的32位Ubuntu笔记本电脑,当时它运行Ubuntu 13.10:
- 从vagrant安装流浪者1.5.1 deb
- 运行
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
,我们现在得到提示 - [outer]将三元组dsc/orig.tar.gz/changes.gz复制到与Vagrant实例共享的
~/vagrant/tmp
中 - [再次进入]运行
sudo apt-get update; sudo apt-get install dpkg-dev
,然后运行dpkg-source -x *.dsc
- [外部:根据需要编辑debian/changelog]
- 运行
sudo apt-get install ....build-depends listed....
以安装列出的Build Depenbds - 运行
dpkg-buildpackage -us -uc -rfakeroot
来构建包
此后,我在Travis的许多构建中部署了我创建的二进制包。因此:在32位系统上创建一个64位包。
Vagrant是一个相当流行的工具,被大量的虚拟提供商使用。
如果您使用64位Linux作为主机,您可以通过docker.io做得更好,它可能是最轻、最快、性能最高的方法(因此可能优于Qemu方法——例如最近发布的