busybox からの debootstrap (未完)

USBはすんなり使えるようだが、各種抜き差しすると認識しなくなることがある。kernel2.4環境のUSB問題をそのままかかえているのかもしれない。
とりあえず1台なら問題なく使えるようなので、USBにハードディスクを接続して、chroot環境で使えるようにすることを目指そう。
現在の環境はbig endianなので、アーキテクチャ名はarmebになる。armebは本家では対応が行われていない。
Debianパッケージはこのへんに置かれてる。
http://ftp.debonaras.org/debian-sarge/
これもあるが、これはSargeで使えるように保たれていないようだ。
http://armeb.debian.net/debian-armeb/
tar, gzip ,ar は busyboxコマンドとしてあるので、何とかできそう。
debootstrapのパッケージを拾って来て展開する。
debootstrapには、armebはないので、sarge/sarge.builddにarmのをコピペして作っておく。
まずは、glibcがダメ。wcがないと言われた。これらは、libc6_2.3.2.ds1-22sarge3_armeb.debcoreutils_5.2.1-2_armeb.debを落として展開し、ramdisk上の環境に上書きしておく。
debootstrap を実行する。libgnutls11パッケージが提供されていないようなのでexcludeする。
しかし、chroot環境でdpkgを動かそうとしてセグフォルトしてしまう。
busyboxchrootを疑ってみたが、入れ替えても変化はなかった。

I: Installing core packages...
/sbin/debootstrap: line -518: 12251 Segmentation fault      chroot /mnt dpkg --(尻切れ)
W: Failure trying to run: chroot /mnt dpkg --force-depends --install /var/cache(尻切れ)
umount: /mnt/dev/pts: No such file or directory
umount: /mnt/dev/shm: No such file or directory
umount: /mnt/proc/bus/usb: Invalid argument

chrootした後に、dpkgコマンドを単体で実行することはできるようだが、何かさせようとすると同じく落ちてしまった。
なるほど、これは面倒なわけね...


同じ問題を抱えているひとを発見。
http://www.mail-archive.com/debian-arm@lists.debian.org/msg05286.html
/etc/dpkg/dpkg.cfgがないから落ちているのかな? でも、そんなファイル見たことないよ... 普通もないみたいだし。


わかんないので、straceを入れて調べてみる。

 sh-2.05b# /temp/usr/bin/strace dpkg -l
 execve("/usr/bin/dpkg", ["dpkg", "-l"], [/* 12 vars */]) = 0
 uname({sys="Linux", node="MRLLB", ...}) = 0
 brk(0)                                  = 0xc09bc
 access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
 open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
 open("/etc/ld.so.cache", O_RDONLY)      = 3
 fstat64(3, {st_mode=S_IFREG|0644, st_size=3389, ...}) = 0
 old_mmap(NULL, 3389, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40015000
 close(3)                                = 0
 access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
 open("/lib/libc.so.6", O_RDONLY)        = 3
 read(3, "\177ELF\1\2\1a\0\0\0\0\0\0\0\0\0\3\0(\0\0\0\1\0\1[\350"..., 512) = 512
 fstat64(3, {st_mode=S_IFREG|0755, st_size=1157004, ...}) = 0
 old_mmap(NULL, 1194140, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4001d000
 mprotect(0x40134000, 51356, PROT_NONE)  = 0
 old_mmap(0x40135000, 40960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x10
 old_mmap(0x4013f000, 6300, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANON0
 close(3)                                = 0
 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0
 munmap(0x40015000, 3389)                = 0
 brk(0)                                  = 0xc09bc
 brk(0xe19bc)                            = 0xe19bc
 brk(0)                                  = 0xe19bc
 brk(0xe2000)                            = 0xe2000
 umask(022)                              = 022
 open("/etc/dpkg/dpkg.cfg", O_RDONLY|O_LARGEFILE) = 3
 fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0
 read(3, "", 4096)                       = 0
 close(3)                                = 0
 munmap(0x40015000, 4096)                = 0
 brk(0)                                  = 0xe2000
 brk(0)                                  = 0xe2000
 brk(0xe1000)                            = 0xe1000
 brk(0)                                  = 0xe1000
 open("//.dpkg.cfg", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or director)
 --- SIGSEGV (Segmentation fault) @ 0 (0) ---
 +++ killed by SIGSEGV +++
 Process 16519 detached

あはは、見てもわからんかった...
もとがuClinuxベースだから、mmapとかかな...


この際、Etchならと、debootstrap_0.3.3_all.debでやってみたけど、こちらはこちらでPerlか、バイナリのpkgdetailsを必要とするということで、先へ進めなくなったよ。