質問: 64ビットのdebian / ubuntuで32ビットのプログラムを実行するにはどうすればよいですか? 64ビット(amd64 a.k.a. x86_64)のdebianまたはubuntuをインストールしています。 32ビット(i386/i686)プログラムをときどき実行するか、32ビットシステム用にプログラムをコンパイルする必要があります。最小限の手間でこれを行うにはどうすればよいですか?おまけ:古いまたは新しいリリースのディストリビューションで実行またはテストしたい場合はどうなりますか?
回答: ネイティブサポートubuntu 11.04とdebian wheezy(7.0)以降、debianとubuntuはマルチアーチをサポートしています。x86_32(i386)とx86_64(amd64)のパッケージを同じシステムで簡単に混在させることができます。これは multiarch support として知られています。詳細は warl0ckの回答 を参照してください。以前のリリースでは、debianとubuntuにはamd64に多数の32ビットライブラリが付属しています。インストール ia32-libs 32ビットライブラリの基本セット、およびおそらくこれに依存する他のパッケージを持つパッケージ。必要なライブラリがすべて揃っていれば、32ビットの実行可能ファイルは単純に実行されるはずです。開発の場合、インストール gcc-multilib 、そしておそらくg++-multilibなど、それに依存する他のパッケージ。 binutils-multiarch も便利で、debianでは ia32-libs-dev です。 -m32オプションをgccに渡して、ix86用にコンパイルします。インストールした32ビットのユーザーモードコンポーネントに関係なく、64ビットのカーネルを実行している場合でも、uname -mにはx64_64が表示されます。以下で説明するschrootがこれを処理します。シュルートこのセクションは、debianのようなディストリビューションを別のlinuxディストリビューションの「内部」にインストールするためのガイドです。これは、32ビットubuntuを64ビットubuntuの内部にインストールするという言葉で表現されていますが、debian不安定版をdebian安定版にインストールしたり、その逆を行ったりするなど、他の状況に小さな変更を加えて適用する必要があります。前書きアイデアはサブツリーに代替ディストリビューションをインストールし、そこから実行することです。その方法で64ビットシステムに32ビットシステムをインストールしたり、ディストリビューションの別のリリースをインストールしたり、さまざまなパッケージセットがインストールされたテスト環境をインストールしたりできます。 chroot コマンドとシステムコールは、ディレクトリツリーのサブツリーに制限されているファイルシステムのビューでプロセスを開始します。 debianとubuntuには schroot が同梱されており、この機能をラップしてより使いやすいサブ環境を作成するユーティリティです。インストール schrootパッケージ ( debian )および debootstrapパッケージ ( debian )。 debootstrapは代替ディストリビューションのインストールにのみ必要で、後で削除できます。schrootを設定するこの例では、32ビットubuntu 10.04lts(lucid lynx)代替環境を設定する方法について説明します。同様の設定は、debianおよびubuntuの他のリリースでも機能するはずです。次の内容のファイル/etc/schroot/chroot.d/lucid32を作成します。[lucid32] description=ubuntu 10.04lts 32-bit directory=/32 type=directory personality=linux32 users=yourusername groups=users,admin 行directory=/32は、32ビットインストールのファイルを配置する場所をschrootに指示します。行username=yourusernameは、ユーザーyourusernameがschrootの使用を許可されることを示しています。行groups=users,adminは、どちらのグループのユーザーもschrootの使用を許可されることを示しています。 users=...ディレクティブを置くこともできます。新しいディストリビューションをインストールするディレクトリを作成し、debootstrapを使用してそこにデータを追加します。 debootstrapは、指定されたディストリビューションおよびアーキテクチャー向けのコアパッケージセットをダウンロードしてインストールします。mkdir /32 debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu もうほとんどシステムは動作しています。以下はマイナーな機能強化です。 schrootは、実行時に/32/etcのいくつかのファイル、特に/etc/resolv.confのdns設定と/etc/passwdのユーザーデータベース、およびその他のファイルを上書きします(これは上書きできます。ドキュメントを参照してください) 。手動でコピーしたいファイルがいくつかあります。cp -p /etc/apt/apt.conf /32/etc/apt/ # for proxy settings cp -p /etc/apt/sources.list /32/etc/apt/ # for universe, security, etc cp -p /etc/environment /32/etc/ # for proxy and locale settings cp -p /etc/sudoers /32/etc/ # for custom sudo settings chrootには/etc/mtabまたは/etc/fstabというファイルはありません。 chrootでmountコマンドを手動で使用することはお勧めしません。外部から実行してください。ただし、十分な/etc/mtabを作成して、dfなどのコマンドが適切に機能するようにしてください。ln -s /proc/mounts /32/etc/mtab directoryタイプの場合、schrootはいくつかのディレクトリの bind mounts を実行します。つまり、これらのディレクトリは親インストールと共有されます:/proc、/dev 、/home、/tmp。chrootのサービスここで説明するように、schrootはデーモンの実行には適していません。 schrootを終了すると、schroot内のプログラムは強制終了されます。より永続的にしたい場合は、「ディレクトリ」のschrootではなく「プレーン」のschrootを使用し、親インストールの/etc/fstabに永続的なバインドマウントを設定します。debianおよびubuntuでは、サービスはインストール時に自動的に開始されます。これを回避するには(特にネットワークポートが共有されているために、chrootの外部で実行されているサービスが中断される可能性があります)、chrootで policy not running servicesを設定します。次のスクリプトを /32/usr/sbin/policy-rc.d として記述し、実行可能にします(chmod a+rx /32/usr/sbin/policy-rc.d)。#!/bin/sh ## don't start any service if running in a chroot. ## see /usr/share/doc/sysv-rc/readme.policy-rc.d.gz if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then exit 101 fi 新しいシステムに入力するこれで、chrootの使用を開始できます。この時点で、さらにいくつかのパッケージをインストールする必要があります。schroot -c lucid32 sudo apt-get update apt-get install lsb-core nano ... いくつかのロケールを生成する必要があるかもしれません。locale-gen en_us en_us.utf8 schrootが8.04(hardy)などのubuntuの古いリリース用である場合は、ubuntu-standardパッケージがmtaを取り込むことに注意してください。デフォルトのnullmailerの代わりにpostfixを選択します(chrootにメールを送信させたいが、絶対に受信させたくない場合)。もっと遠く行く詳細については、 schroot manual 、 schroot faq および schroot.conf manual を参照してください。 schrootは debian autobuilder(buildd)プロジェクト の一部です。 buntuコミュニティページのdebootstrapに関する追加の役立つヒント があるかもしれません。仮想マシン代替環境を完全に分離する必要がある場合は、 [〜#〜] kvm [〜#〜] ( qemu-kvm )または virtualbox 。