64ビットDebian / Ubuntuで32ビットプログラムを実行するにはどうすればよいですか?

64ビットDebian / Ubuntuで32ビットプログラムを実行するにはどうすればよいですか?

64ビット(amd64、つまりx86_64)DebianまたはUbuntuをインストールしました。 32ビット(i386 / i686)プログラムを実行したり、32ビットシステム用のプログラムをコンパイルする必要がある場合があります。最小限の問題でこれを行うにはどうすればよいですか?

ボーナス:以前のバージョンまたは最新バージョンのディストリビューションを使用して実行またはテストするにはどうすればよいですか?

ベストアンサー1

現在のバージョンの場合

DebianとUbuntuは現在マルチアーキテクチャをサポートしています。 x86_32(i386) パッケージと x86_64(amd64) パッケージを同じシステムで簡単な方法で混在させることができます。これをマルチアーキテクチャサポートと呼びます。Ubuntuまたはダーバン詳しくはWikiをご覧ください。

バラよりウォーカーの答えシンプルで最新の答えを入手してください。


以前のバージョンの場合

以前のバージョンでは、DebianとUbuntuはamd64に多くの32ビットライブラリが付属していました。インストールするia32-libs ia32-libsのインストールパッケージには、デフォルトの32ビットライブラリセットと、このライブラリに依存できる他のパッケージがあります。必要なライブラリがすべてある場合は、32ビット実行可能ファイルを実行する必要があります。開発用インストールgcc-multilib gcc-multilibのインストール、そしてそれに依存できる他のパッケージ、例えば次のようなパッケージをg++-multilib見つけることができます。binutils-multiarch binutils-multiarchのインストール役に立ったり、ia32-libs-devDebian で。 ix86用にコンパイルするには、オプションを-m32gccに渡します。

どの32ビットユーザーモードコンポーネントをインストールしたかに関係なく、64ビットカーネルを実行しているかどうかは引き続きuname -m表示されます。x64_64以下で説明する Schroot はこの問題を処理します。

シュルート

このセクションでは、他のLinuxディストリビューション「内部」にDebianファミリディストリビューションをインストールする方法について説明します。 64 ビット Ubuntu 内に 32 ビット Ubuntu をインストールするためのフレーズがありますが、Debian 安定の内部に不安定な Debian をインストールしたり、その逆の場合などの他の状況に適用したい場合は、少し修正する必要があります。

紹介する

アイデアは、サブツリーに代替ディストリビューションをインストールし、そこで実行することです。これにより、64ビットシステムの上に32ビットシステムをインストールしたり、異なるバージョンのディストリビューションをインストールしたり、異なるパッケージセットでテスト環境をインストールしたりできます。

これchrootコマンドとシステムコールは、ディレクトリツリーのサブツリーに限定されたファイルシステムビューでプロセスを開始します。 Debian と Ubuntu リリースシュルート、この機能を中心に、より便利なサブ環境を生成するユーティリティです。

インストールするschrootパック ルートディレクトリのインストールダーバン)そしてdebootstrapパック debootstrapのインストールダーバン)。 Debootstrapは代替ディストリビューションをインストールするときにのみ必要で、後で削除できます。

シゲン設定

この例では、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=/32schrootに32ビットインストール用のファイルを保存する場所を示します。この行は、 username=yourusernameユーザーがyourusernameschroot を使用できることを示します。この行は、groups=users,admin2 つのグループのユーザーが schroot を使用できることを示します。ディレクティブを配置することもできますusers=…

新しいリリースのインストール

ディレクトリを作成し、debootstrapでいっぱいになります。 Debootstrap は、指定されたデプロイとアーキテクチャのコアパッケージセットをダウンロードしてインストールします。

mkdir /32
debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu

これでほぼ動作するシステムが完成しました。以下はいくつかのマイナーな改善です。 Schrootを実行すると、複数のファイル/32/etc、特にDNS設定/etc/resolv.conf、ユーザーデータベース、および/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。私はこのコマンドをchroot内で手動で使用するのではなく、外部で使用することを/etc/fstabお勧めします。ただし、コマンドが合理的にうまく機能するようにmount十分なコマンドを作成してください。/etc/mtabdf

ln -s /proc/mounts /32/etc/mtab

タイプを使用すると、directoryschrootが実行されます。バンドルのインストール複数のディレクトリ、つまりこれらのディレクトリは親インストールと共有されます。/proc、、、、、。/dev/home/tmp

chrootのサービス

ここで述べたように、schrootはデーモンの実行には適していません。 schroot を終了すると、schroot のプログラムが終了します。より永続性を高めるには、「カタログ」schrootの代わりに「一般」schrootを使用し、親/etc/fstabインストールで永続バインドマウントを設定します。

DebianとUbuntuでは、インストール中にサービスが自動的に起動します。これを防ぐには(特にネットワークポートが共有されるため、chrootの外部で実行されているサービスが中断される可能性があります)ポリシーchroot でサービスを実行しないでください。次のスクリプトを次に設定します。/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手動、これシュルートFAQそして schroot.conf手動。シュルートはDebian Auto Builder (buildd) プロジェクト。他の便利なヒントがあるかもしれません。debootstrapのUbuntuコミュニティページ

仮想デバイス

バックアップ環境を完全に分離する必要がある場合は、仮想マシンを使用してください。キーボード仮想マシンqemu-kvm qemu-kvmのインストール) または仮想ボックス

おすすめ記事