独りでHackathon2、あるいは、もはやLinux from Scratch
※文中の[rosa]とか[supernova]とかはhostnameですよ。
[rosa]udevをインストールするために、initscriptsをインストールし、そのためにmountをインストールしたけど、コレでうまくいくのやらどうやら?
initscriptsをインストールしようとすると、initscripts_2.86.ds1-1_i386.debの読み込みエラーだって。
[rosa]とりあえず、'apt-get upgrade'してみる。initscriptsに関しては、何も変わらず。removeしてcleanしてみたけどダメだった。でも、同じ所でハマってるヤツと、その解法を見つけた。→http://forums.justlinux.com/showthread.php?141331-Apt-get-install-problems
[rosa]同じような形で、pcmcia-csも引っかかってる。カードを外してから再実行するかね。。。と思って再起動したら、inittabの書式が違うみたいでloginできなくった。フルバックアップ取っておいてヨカッタ。
[rosa]。。。バックアップ書き戻し中でぇす。。。
[rosa]うむ。バックアップの書き戻しに失敗してしまった。ので、再インストール。。。の前に、パーティションサイズを28[GB](56[GB]の半分)にする。
イマドキのHDDは1[TB]だの2[TB]だのと、かなりデカくなっているけど、リカバリをどうするのか?っていう事を考えておかなきゃならないだろうね。
[rosa]udevは、ソース(udev-182)からbuildする事に。pkg-configが要ると言っているので、インストール。libblkid-devとuuid-devをapt-getしてみたんたけど、blkidが古いのか、e2fsprogs-1.42.8のbuildが通らない。apt-getでe2fsqrogsとe2fslib-devをインストールしてみたけどダメ。util-linux-2.20のbuildもダメ。
[rosa]udevのバージョンを下げてみよう。
[rosa]XFree86が、1024x600のLCDに800x600で表示している(xwininfoでルートウィンドウを確認した)。前回と同じ設定をしてるんだけど、なぜだろう?←原因判明。XF86Config-4が/etc/X11に残っていた。もう要らないと思うけど、XF86Config-4.origにrenameしておいた(要らないんだけど、根がビンボー人なのでね。。。)。
[supernova]mspgccの件、つづき。gmp-4.6.3のbuildが通らなかったのを、gcc-4.2.1(apple)で、CFLAGS="-std=gnu99 -force_cpusubtype_ALL"で通した(-stdは要らないかも?)。
[supernova]CFLAGSが活きたままになっているけど、gdbのbuildまでは有効にしておく。
[rosa]Xのルートウィンドウサイズが1024x600になっているのをxwininfoで確認したら、直後にクラッシュした。XKBもろとも刺さっているので、superzapもrebootも効かなくなった。xwininfoなんて、あんまり使わないからイイけど。。。
[supernova]msp430-libcのbuildで、malloc.cのcompileが止まった。'invalid lvalue in asm output 0'だって。msp430-asのbuildに失敗してるのかも。そこで、host側gccを4.2.1にして、binutilsをre-buildしてみる。前回'--disable-werror'として逃げた所がフツーに通った(bfdとlibibertyもフツーに)。めでたしめでたし。
[rosa]udevのバージョンを下げる、はイイんだけど、どのあたりなら通るんだろう?
[rosa]結局、kernel 2.6.18対応なのはudev-127。→https://launchpad.net/udev/+milestone/127
※kernel re-config。'File systems'→'inotify file change ...', 'inotify support for ...' & 'Filesystems in Userspace ...'をkernelに組み込む。
[rosa]だがしかし、udevdはinotify_initが出来ない、と言っている。config.hを見ると、HAVE_INOTIFYがコメントアウトされている。udev-127が想定しているinotify.hは
[rosa]glibc-2.6をソースからbuildする。apt-getで、gccとg++を3.4にした。あと、autoconfもインストール。gccは、バージョンはOKだけど'-z relro' supportが要るらしい。ので、まずはbinutils-2.22.1aのソースからbuild(configure --prefix=/usr/local --enable-targets=i386-linux)。
[rosa]binutilsのbuildは出来た。でも、glibcのconfigureは「2.21.1がtoo oldだ」と言っている。コレはconfigureが腐ってるのか?
なので、glibc-2.7で仕切り直し。。。と思ったけど、glibc-2.7のconfigureでも変わらないので、binutils-2.15aをbuild。。。私は一体、何をやってるんだろう?
[rosa]どうもラチが開かない。gccをrelro対応にしなければならない。binutils-2.21.1aとgcc-4.6.3をbuildする事で攻めてみる(すでにbuildが通ったmspgccにバージョンを合わせる、という事だね)。
gccのconfigureには、--enable-languages=c,c++ --program-suffix=-4.6.3を付ける。binutilsはi686-linux用にre-buildした。
[rosa]libgccのbuildが止まった。「'--'なんてオプション無いよー」、だって(正確には、i386-linux-gccを探しに行ってコケている)。原因は、targetをi386-linuxにしていたから。Crusoeはi686-linux(本名:i686-pc-linux-gnu)なのだ。。。テレ隠しとして、/usr/bin/gawkをGNU awk 4.10に入れ替えた。
[rosa]kernel 2.6.18に対応するglibcは2.15。configureには、'--target=i686-linux --without-fp'を与えてbuild。ついでにgettextをapt-getでインストールした。ところが、buildがsyscall-template.Sでコケる。調べてみると、先人の知恵が見つかった。→http://blog.natsuki.ex14.net/article/41434010.html
[rosa]再びglibc-2.15のbuild。configureには何も与えず、config.makeを書き換える方法で通してみる。。。それにしても、「i686用のgccを作ったらダメ」っていうのは困るなぁ。glibcに限らず、__i686.foo.barみたいな全てのソースにブチ当たるって事よね。weak pointとして覚えておけばイイんだけど、素で通そうと思ったら、i386が無難なのかなぁ。
[rosa]glibcのbuildが、gethnamaddr.cでコケる。gccのre-buildで解決?→http://comments.gmane.org/gmane.linux.lfs.support/35231
configureに'--disable-profile --enable-kernel=2.6.18'を与える解法の方がシャクゼンとする。→http://www.linuxfromscratch.org/lfs/view/stable/chapter06/glibc.html
というか、libsspの問題(-lsspだけどlibsspが参照出来ない)なら、CFLAGS="-L/usr/local/lib"かな?(CFLAGSじゃなくて、config.makeのCFLAGS-config行に追記)。ヒントになったページ→http://daemon.plala.jp/~meke/tdiary/?date=20060225
[rosa]イロイロと手を加えてみたけど、同じところでコケる。--disable-sspを追加したgccをbuildして、glibc-2.12.2あたりをbuildしてみよう。
config.makeのASFLAGS_buildに-march=i586を付け足して、sspをnoにした。
dslを足場にして主要なツールを総入れ替えする、っていうのは、もはやScratchなのでは。疲れてきちゃったよ。。。
[rosa]glibc-2.12.2のbuildが通った。奇跡でも起きたのか?っていう気分。
/usr/local/lib以下にインストールしているので、/etc/ld.so.confの先頭に書き足すのを忘れないように。
[rosa]ココまでの手順を整理する。
・binutils-2.21.1a
configure --prefix=/usr/local
※必要であれば、--program-suffix=-2.21.1aなどとしてもよい。
・gcc-4.6.3(1回目:disable ssp)
PATH=/usr/local/bin:$PATH configure --target=i686-pc-linux-gnu --prefix=/usr/local --program-suffix=-4.6.3 --enable-languages=c,c++ --disable-ssp --with-pkgversion=4.6.3-disable-ssp
・glibc-2.12.2
PATH=/usr/local/bin:$PATH configure --enable-kernel=2.6.18
PATH=/usr/local/bin:$PATH configure --prefix=/usr/local --disable-sanity-checks --enable-kernel=2.6.18
※config.makeの'have-ssp'をnoに書き換え、ASFLAGS-configに-march=i586を書き足す。
※make installする時に、イロイロとやるべき事がある(例:libc.soとlibm.soというsymlinkファイルは要らない)。
[rosa]/usr/include/sys/inotify.hがある事を確認する。。。ようやくudevがbuild出来るじゃないか。。。
[rosa]ところで、/usr/local/lib/libstdc++.so.6.0.16-gdb.pyは、/usr/local/etc辺りに移動してしまおう。毎回ldconfigに引っ掛かって気分が良くない。
[rosa]udevd-127のbuild。configureの一声で、すんなりと通る。udevdも起動する。でもなんかおかしい。mspdebug --usb-listの出力が、"Devices on bus 000:"となっている。FAQのusbfsをmountする方法だとうまくいく。→http://mspdebug.sourceforge.net/faq.html
[rosa]ココで衝撃の事実が判明する。mspdebugはudevが無くても動作する。つまり、単にmspgccが使いたいだけなら、kernelを然るべきバージョンにしてやるだけで良い、という事だ。。。私には次の目的(Gtk+とかframebuffer攻略とか)があるので。。。あるんだよ。。。という言い訳。
[rosa]さらに。udevが(期待通りに)動くには、kernel 2.6.32以降が必要らしい。→https://wiki.archlinux.org/index.php/Udev_(日本語)#Udev_.E3.81.8C.E5.85.A8.E3.81.8F.E8.B5.B7.E5.8B.95.E3.81.97.E3.81.AA.E3.81.84
[rosa]ちょっとだけ時間が余ったので、longrun-0.9にpatchを当てて動かしてみた。patchを提供している先人→http://www.t2-project.org/packages/longrun.html
あと、vim-7.4も。軽快。
[rosa]Gtk+ 3.xへバージョンアップしてみようか、その前にjwmをre-buildしなければ、2.6.32も、などというところで時間切れ。続きは次回の講釈で。