GNU/Linux >> Linux の 問題 >  >> Ubuntu

Debian –64ビットのDebian/ ubuntuで32ビットのプログラムを実行する方法は?

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

ボーナス:ディストリビューションの古いリリースまたは新しいリリースで実行またはテストしたい場合はどうなりますか?

承認された回答:

現在のリリースの場合

現在のDebianとUbuntuはマルチアーチをサポートしています。同じシステム上でx86_32(i386)パッケージとx86_64(amd64)パッケージを簡単な方法で混在させることができます。これはマルチアーチサポートとして知られています–
UbuntuまたはDebianwikiの詳細を参照してください。

シンプルで最新の回答については、warl0ckの回答をご覧ください。

古いリリースの場合

以前のリリースでは、DebianとUbuntuにはamd64に多数の32ビットライブラリが付属しています。 ia32-libsをインストールします パッケージには、32ビットライブラリの基本セットと、場合によってはこれに依存する他のパッケージが含まれます。必要なライブラリがすべて揃っている場合は、32ビットの実行可能ファイルを実行するだけで済みます。開発の場合は、gcc-multilibをインストールします 、およびg++-multilibなどのそれに依存する他のパッケージ 。 binutils-multiarchが見つかるかもしれません も便利で、ia32-libs-dev Debianで。 -m32を渡します ix86用にコンパイルするgccのオプション。

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

シュルート

このセクションは、Debianのようなディストリビューションを別のLinuxディストリビューションの「内部」にインストールするためのガイドです。これは、64ビットUbuntu内に32ビットUbuntuをインストールするという意味ですが、Debian安定版内にDebian不安定版をインストールする、またはその逆など、他の状況に若干の変更を加えて適用する必要があります。

はじめに

アイデアは、サブツリーに代替ディストリビューションをインストールし、そこから実行することです。この方法で32ビットシステムを64ビットシステムにインストールすることも、ディストリビューションの別のリリースをインストールすることも、さまざまなパッケージセットがインストールされたテスト環境をインストールすることもできます。

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

/etc/mtabファイルはありません または/etc/fstab chrootで。 mountの使用はお勧めしません chrootで手動でコマンドを実行し、外部から実行します。ただし、十分な/etc/mtabを作成してください dfなどのコマンドを作成する 合理的に機能します。

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

directoryを使用 タイプ、schrootは、いくつかのディレクトリのバインドマウントを実行します。つまり、これらのディレクトリは、親インストールと共有されます:/proc/dev/home/tmp

chrootのサービス

ここで説明するように、schrootはデーモンの実行には適していません。 schrootを終了すると、schroot内のプログラムは強制終了されます。より永続的にしたい場合は、「ディレクトリ」schrootの代わりに「plain」schrootを使用し、/etc/fstabで永続的なバインドマウントを設定します。 親インストールで。

関連:Linux – switch_rootではなくpivot_rootをいつ使用しますか?

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を参照してください。 マニュアル、schroot FAQ、およびschroot.conf マニュアル。 Schrootは、Debian autobuilder(buildd)プロジェクトの一部です。ブートストラップの解除については、Ubuntuコミュニティページに追加の役立つヒントがあるかもしれません。

仮想マシン

代替環境を完全に分離する必要がある場合は、KVM(qemu-kvm)などの仮想マシンを使用してください )またはVirtualBox。


Ubuntu
  1. UbuntuとDebianでPythonバージョンを切り替える方法

  2. UbuntuとDebianにSubversion1.9をインストールする方法

  3. Ubuntu/Debianでポートを開く方法

  1. UbuntuとDebianにSpotifyをインストールする方法

  2. Ubuntu、Debian、LinuxmintにPython3.5をインストールする方法

  3. UbuntuとDebianにインジケーターSysMonitorをインストールする方法

  1. DockerをDebian/Ubuntuにインストールする方法

  2. Debian – Debian / ubuntuに2つのGlibcを一緒にインストールしますか?

  3. UbuntuはDebianとどう違うのですか?