web-dev-qa-db-ja.com

i386マシンでAMD64用のdebianパッケージをコンパイルしますか?

私はi386ubuntuハーディマシンとAMD64ubuntuハーディマシンを持っています。 i386上のAMD64マシン用のdebianパッケージ(別名deb)をコンパイルしたい(コンパイルするのに十分なメモリがないため、AMD64マシンではすぐに実行できます)。私がdpkg-buildpackage i386マシンでは、i386のdebが生成されますが、AMD64マシンにはインストールできません。とにかくi386マシンでAMD64のdebをコンパイルする方法はありますか?

6
Rory

クロスコンパイルを試してみる価値よりも、おそらくもっと厄介です。 32ビットで64ビットシステムをエミュレートするにはさまざまな方法がありますが、パフォーマンスの代償を払うことになります。

これを少しだけ実行している場合は、Amazonで64ビットマシンを数時間起動すると思います。頻繁に行う場合は、64ビットハードウェアを入手するか、AWSは引き続き興味深いものです。これは、使用量に応じて支払うだけで、必要なときにビルドファームを起動できるためです。

これはあなたにいくつかの有用なアイデアを与えるかもしれません: http://blog.fwbuilder.org/2009/05/building-ubuntu-deb-packages-on-Amazon.html

さまざまなアーキテクチャとリリースのDebianシステムの画像のこのリストも役立つかもしれません: https://wiki.debian.org/Cloud/AmazonEC2Image

1
mc0e

したがって、これにはいくつかの解決策があります。

  • クロスコンパイルツールチェーンをセットアップし、通常のdpkg-buildpackageを使用してパッケージをビルドします。問題は、ツールチェーンの作成 それほど単純ではありません です。
  • 64ビットマシンで32ビットのchrootを使用して、コンパイルします。どうやらそれは最も推奨される方法です。 このブログ投稿 カーネルコンパイルの例がありますが、他のソフトウェアでも同じプロセスです。
1
coredump

私がDebianでいつも行っていることの1つは、通常のシステムに32ビットユーザーランドを持つ64ビットカーネルを使用し、次に64ビットユーザーランドを持つchrootを作成してAMD64パッケージをビルドすることです。 Ubuntuのカーネルパッケージの構造は少し異なるので、これが可能か、推奨できるかはわかりません。

それ以外のクリーンな解決策は、仮想マシンを使用することです。 QEMUは当然の選択です。何でもほぼ何でもエミュレートできるからです(そして無料です)。 qemubuilder(Ubuntuにパッケージ化されている)を使用して、ビルドをpbuilderと統合できます。これは私の経験では設定するのが少し難しいかもしれませんが、これを繰り返し行う必要がある場合は価値があるかもしれません。いくつかのパッケージでは、QEMUを起動して手動でログインするだけです。

非常に冒険的な場合は、クロスコンパイルを試すこともできますが、これはおそらくはるかに難しく、すべてのパッケージで機能するとは限りません。開始するには、dpkg-crossを探してください。

または、Launchpadでパーソナルパッケージアーカイブ(PPA)を作成し、そこでパッケージを自動ビルドするのはどうですか。

0