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.debとcoreutils_5.2.1-2_armeb.debを落として展開し、ramdisk上の環境に上書きしておく。
debootstrap を実行する。libgnutls11パッケージが提供されていないようなのでexcludeする。
しかし、chroot環境でdpkgを動かそうとしてセグフォルトしてしまう。
busyboxのchrootを疑ってみたが、入れ替えても変化はなかった。
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を必要とするということで、先へ進めなくなったよ。