debootstrapとchrootでAMD64環境内にi386環境を構築する

Android SDKx86(i386)版しかリリースされていないので、Android開発環境*1chrootしたi386環境から起動することにした。

まずは、debootstrapを使用してi386のシステムディレクトリツリーを構成する。
今回は、/var/chroot/i386以下にシステムディレクトリツリーを構成した。

# mkdir -p /var/chroot/i386
# debootstrap --arch i386 lenny /var/chroot/i386 http://ftp.jp.debian.org/debian
I: Retrieving Release
I: Retrieving Packages
(中略)
I: Base system installed successfully.


次にプロセス情報、テンポラリディレクトリ、ホームディレクトリをAMD64環境と共有するために、/etc/fstabに設定追加する。

(/etc/fstab)
proc		/var/chroot/i386/proc	proc	defaults	0	0
/tmp		/var/chroot/i386/tmp	none	bind	0	0
/home		/var/chroot/i386/home	none	bind	0	0

上記設定をマウントする。

# mount /var/chroot/i386/proc
# mount /var/chroot/i386/tmp
# mount /var/chroot/i386/home
# mount
(中略)
proc on /var/chroot/i386/proc type proc (rw)
/tmp on /var/chroot/i386/tmp type none (rw,bind)
/home on /var/chroot/i386/home type none (rw,bind)

ユーザ情報、グループ情報をAMD64環境からコピーする。

# cd /var/chroot/i386/etc
# mv passwd passwd.`date +%Y%m%d%k%M%S`
# mv group group.`date +%Y%m%d%k%M%S`
# mv gshadow gshadow.`date +%Y%m%d%k%M%S`
# mv shadow shadow.`date +%Y%m%d%k%M%S`
# cp -p /etc/passwd .
# cp -p /etc/group .
# cp -p /etc/shadow .
# cp -p /etc/gshadow .


さらに、AMD64環境からi386環境のld-linux.so.2を使えるように設定する。

# cd /lib
# ls -l ld-linux.so.2 
lrwxrwxrwx 1 root root 34 2009-04-12 13:08 ld-linux.so.2 -> /emul/ia32-linux/lib/ld-linux.so.2
# rm ld-linux.so.2 
# ln -s /var/chroot/i386/lib/ld-2.7.so ld-linux.so.2
# ls -l ld-linux.so.2 
lrwxrwxrwx 1 root root 30 2009-07-20 23:38 ld-linux.so.2 -> /var/chroot/i386/lib/ld-2.7.so

/etc/ld.so.confにライブラリパスを設定する。

# vi /etc/ld.so.conf.d/i386_ld.so.conf
(/etc/ld.so.conf.d/i386_ld.so.conf)
/var/chroot/i386/lib
/var/chroot/i386/usr/lib
/var/chroot/i386/usr/local/lib
# ldconfig


そして、一般ユーザでi386環境に入れるように、dchrootパッケージをインストールし設定する。

# aptitude install dchroot
# vi /etc/dchroot.conf
(/etc/dchroot.conf)
lenny-i386 /var/chroot/i386
stable /var/chroot/i386


これで、dchrootコマンドでi386環境に入れる。

$ dchroot -c lenny-i386
I: [lenny-i386 chroot] Running login shell: '/bin/bash'

ところが、現状だとi386環境にベースシステムしかインストールされていないため、X Window Systemのアプリケーションが起動できないので、X Windows SystemおよびGNOME環境をインストールする。

# chroot /var/chroot/i386
# aptitude install gdm gnome x-window-system

あとは使用したいアプリケーションを、i386環境にchroot*2してインストールするだけ。
AMD64環境からi386環境のアプリケーションを起動する場合は、dchrootコマンドに-dオプションを付けて起動する。

$ dchroot -c lenny-i386 -d eclipse


私は、この後にi386環境にAndroid開発環境をインストールした。
Android開発環境のインストールについては、以下を参照のこと。

*1:Android SDK + Eclipse with ADT

*2:一般ユーザは、dchroot