CLFSで64bit Linuxを目指す

2038年問題までには移行したい。 CLFS Version 1.1.0-x86_64-Pure64に沿いつつ、勘どころや独自にやったことをメモ。

第2章

/dev/sdb5をJFSでフォーマットし、/clfsにマウントして作業する。

第3章

CLFSのサイトから全パッケージとパッチのtarボールをダウンロードしておく。

第4章

ユーザーclfsのuid=1002, gid=1002。ホームディレクトリは/home/clfs。

第5章

ヒストリ機能と、lsのオプション設定を追加。

第6章

ビルドに必要なコマンドが/usr/local/にあったのでPATHに追加。

ホスト環境はi386、ターゲット環境はx86_64なので、ブートするルート(7章)を選ぶ。

第7章

最初に/clfsの所有者をclfsにする。(7.1節)

E2fsprogsの次に、jfsutilsをインストールする。

CC="${CC} ${BUILD64}" ./configure --prefix=/tools --host=${CLFS_TARGET}
make
make DESTDIR="${CLFS}" install
ln -sv /tools/sbin/jfs_fsck ${CLFS}/sbin/fsck.jfs
ln -sv /tools/sbin/jfs_mkfs ${CLFS}/sbin/mkfs.jfs

カーネルのコンフィグ

Bin86とLiloは保留。当面はホスト環境(i386)でコンパイルしたGRUBを使う。

ホスト環境の/bootにコピーするので、次のコマンドはrootで行う。

cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-x86_64-2.6.24.7 
cp -v System.map /boot/System.map-x86_64-2.6.24.7

/boot/grub/menu.lstに記述する。

# CLFS
title Linux x86_64 2.6.24.7 (sdb5)
root (hd0,0)
kernel /vmlinuz-x86_64-2.6.24.7 root=/dev/sdb5 apm=power-off

7.11〜7.13節はスキップ。

UTC=0にする。

7.18節の作業はrootで行う。rootで環境変数${CLFS}がセットされているのを確認すること。

最後に/clfs配下をすべてroot所有にする。(7.19節)

7.20節はスキップ。

起動したコンソール画面

(2009.4.29)

第9章

ここからは、ブートした64bit環境内で作業を行なうことになる。
CLFSをオンラインで読める別マシンがあった方が何かと助かる。
ソース・パッチ一式を/clfs/rootの下に置いておく。
キーマップユーティリティをインストールするまではキーボードがASCII配列だが我慢する。
タイムゾーンがずれるとタイムスタンプが狂って気持ち悪いので、/etc/localtimeを/clfs/tools/etc/localtimeにコピーしてみる。

第10章

10.4節

Perlのコンパイルでエラーになる。

        Making DynaLoader (static)
Processing hints file hints/linux.pl
Unable to find a perl 4.24974711469248e-314 (by these names: ../../miniperl mini
perl perl perl5 perl0.0.0, in these dirs: ../.. /bin /usr/bin /sbin /usr/sbin /t
ools/bin /tools/sbin /tools/bin)
Writing Makefile for DynaLoader
make[1]: Entering directory `/root/work/perl-5.8.8/ext/DynaLoader'
/bin/sh: /root/work/perl-5.8.8/ext/DynaLoader/0: No such file or directory
make[1]: *** [../../lib/.exists] Error 127
make[1]: Leaving directory `/root/work/perl-5.8.8/ext/DynaLoader'
make config failed, continuing anyway...
make[1]: Entering directory `/root/work/perl-5.8.8/ext/DynaLoader'
/bin/sh: /root/work/perl-5.8.8/ext/DynaLoader/0: No such file or directory
make[1]: *** [../../lib/.exists] Error 127
make[1]: Leaving directory `/root/work/perl-5.8.8/ext/DynaLoader'
make: *** [lib/auto/DynaLoader/DynaLoader.a] Error 2

根本的な問題は

Unable to find a perl 4.24974711469248e-314
の部分にありそうだが、解決方法が見つからない。

中国語らしきブログ記事に対症療法的ながら修正方法がかかれており、これを参考にするしかない。 エラーが出る度に、以下のようにMakefileを修正してはコンパイルを続行する。 Makefileは途中で生成されるので、最初にまとめて直しておけない。

cd ext/DynaLoader
cp Makefile Makefile.orig
sed -f hogehoge.sed < Makefile.orig > Makefile
cd ../..

中断は、ext/DynaLoader, ext/Data/Dumper, ext/IO, ext/Fcntl, ext/POSIXの5回。 ディレクトリの深さに応じて、修正内容を変える。

(2009.5.1)

10.7節

glibcのビルドが、tls.makeを繰り返し作り続けて終わらない。

...
mv -f /root/work/glibc-build/tls.makeT /root/work/glibc-build/tls.make
make[1]: Leaving directory `/root/work/glibc-2.7'
make[1]: Entering directory `/root/work/glibc-2.7'
rm -f /root/work/glibc-build/tls.makeT /root/work/glibc-build/tls.make.dT
...

make -n だろうが、make clean だろうが、make hoge だろうが変わらない。 何故だかわからないが、何かがおかしい。

(2009.5.1)

gawkの挙動がおかしい

Perlのコンパイルエラーのログ中にもperl0.0.0とあるように、 Perlのコンフィグで生成されるconfig.shの中で、バージョン番号に相当する値が至る所でゼロになっているのを不審に思い追っていったところ、 6.13節でインストールしたgawkの挙動がおかしい。

echo 5 8 8 | gawk '{printf "%d.%d.%d\n", $1, $2, $3}'
0.0.0

(2009.5.2)

思い立って、gawk-3.1.5 を入れ直してみる。

echo 5 8 8 | gawk '{printf "%d.%d.%d\n", $1, $2, $3}'
5.8.8

Perlのコンフィグは正しくなったようだがビルドが通らないのは相変わらずで、 再度Makefileの修正をしながらコンパイル。

Glibcのビルドとインストールは通るようになった。

しかし、このまま進んでもよいものやら。

(2009.5.3)

10.8節

dummy.cの代わりに、sizeof(long)やsizeof(void *)を表示して悦に入る。

10.10節

途中のperlを使うところで、いつまで経っても終わらない。 ドキュメントの作成部分のようなので、処理を飛ばすようにしてみる。

cd gcc-4.2.4/gcc
cp Makefile.in Makefile.in.orig
sed  's/^TEXI2POD =.*/TEXI2POD = touch/g' < Makefile.in.orig > Makefile.in

(2009.5.4)

再びgcc

10.22節でperlのビルドに成功したので、再度10.10節の手順でgccを再ビルドした。 今度は成功。

(2009.5.4)

10.32節

今度はgawk-3.1.6でも正常に動作するようだ。

(2009.5.4)

10.34節

ここでは不要だが、今後PCRE(Perl Compatible Regular Expression)を/usr/localなどにインストールするなら、grepのバージョンアップをするときに、--disable-perl-regexpをつけてconfigureしないとPCREに依存してしまうので注意。

10章その他

/と/usrは同じパーティションに置くつもりなので、 一部、実行ファイルを/binに移すのを省略した。 /bin/loggerだけは、ブートスクリプトにフルパスで書かれているようなので /usr/bin/loggerへシンボリックリンクを張っておく。

10.54節(Bin86)と10.55節(Lilo)はスキップ。

第11章

11.6節

/etc/sysconfig/consoleを設定。
KEYMAP="jp106"
コンソールフォントは8x14thinというのがお気に入りなのだが、 どこから手に入れたのか忘れてしまった。

最後に

rootのPATHから/tools/bin/tools/sbinを外す。

(2009.5.4)


[Up]