ユーザーモードqemu+chrootの環境改善

会社のブログに書いたKMC Staff Blog:QEMUのもうひとつの使い方: ユーザーモードエミュレーションとbinfmtとchrootの組み合わせの続き。
マニアックになりすぎかもと思ったのでこっちに書きました。
不便に思ったところが少し改善できました。

/procをmountする

単にchrootしただけだと/procディレクトリは空です。このままだとbashのタブ補完がエラーになったりして不便です。
もちろんpsコマンドはエラーになる。

# ps     
Error: /proc must be mounted
  To mount /proc at boot you need an /etc/fstab line like:
      /proc   /proc   proc    defaults
  In the meantime, run "mount /proc /proc -t proc"
#

ここではたと気がついた。chrootする前にmountしておけばいいのでは?

$ sudo mount /proc /export/debian_lenny_armel/root/proc -t proc
$ sudo chroot /export/debian_lenny_armel/root /bin/bash
# ls /proc
1      19631  20     29580  30116  45	 8		mdstat
10     19634  20432  29602  30131  48	 9		meminfo
1064   19640  21     29779  30132  49	 904		misc

   ...

成功!

ネットワークの名前を解決できないがとりあえず/etc/hostsに書けばOK

apt-getを実行すると途中でだんまりになる。wgetもダメ。
でも sftp 192.168.xx.xx は大丈夫だった。
さては名前が引けないのではと思って

# nslookup
qemu: Unsupported syscall: 250
errno2result.c:111: unable to convert errno to isc_result: 38: Function not implemented
socket.c:3463: epoll_create failed: Function not implemented
(null): isc_socketmgr_create: unexpected error
#

やっぱり。qemuにunsupported syscallと怒られた。

とりあえず原始的に/etc/hostsに直接書いてみた。
/etc/apt/source.lstに出てくるものを別のマシンでnslookupで調べて、その結果を/etc/hostsに追加。

133.87.45.30	ftp.jp.debian.org
149.20.20.6	security.debian.org
86.59.118.153	volatile.debian.org

これで apt-get updateとやったらみごと成功。
apt-get build-dep や apt-get source もできるので当面はこれで十分。
案外快適に使えてます。

qemuのunsupported syscallの件はそのうちソースを見てみることにしよう。

(2010.2.27追記)

/dev の足りないデバイスを追加

/dev/pty* が無かった。以下のようにして作成。

# cd /dev
# /sbin/MAKEDEV generic

数分かかった。
ハングしたのかと思って^Cしそうになったが、 別の端末でps axしたら進行しているのがわかった。

straceは使えない

ptraceシステムコールがunsupportedのようだ。

# strace ls
qemu: Unsupported syscall: 26
strace: ptrace(PTRACE_TRACEME, ...): Function not implemented