オレも以前から、パッケージにして使ってはみたいけど、自分で spec 書くのは面倒だなぁ、なんてときに、よく rawhide の SRPM を落してきては、ちょこちょこ手直しして自分の赤帽で使ってきた。
egcs/pgcc 関係とか tcl/tk とか。
で、なんでこの期に及んで rawhide なのか、というと、最近ぢゃ赤帽ベース(というかRPM を使った)ディストリビューションがたくさんあるでしょ。Turbo とか Vine とか。すごく良くできてるらしいし、実際にそうなんだろうなとは想像がつくけど、それじゃオレ的にはちっとも面白くないのだ。Linux の上で何かの仕事をしているワケではなくて、Linux そのものをいじくりまわすのが楽しいわけだし。
実際、オレのコンダラ赤帽も、すでにオレにとっては過不足なく日本語が使えて、このまま放っておいても特に何も困らぬ環境に
なってはいるが、それでも日々いじくりまわしていて、毎日が snap shot だ。そこで
いっそのこと glibc 2.1 ベースにしてしまおう、と思いたったのだ。
glibc 2.1 は /usr/lib/gconv 以下に wc <-> mb の変換モジュールを持っていて(ja
な locale data は残念ながら完備されてないようだけど)ゆくゆくは glibc だけで locale を完備するようになるための始まりだ。ぜひいぢってみたいよね(笑)
だが、glibc 2.0 を 2.1 に差し替えるだけ、といっても結構重そうなコンダラだったので、どうせなら最初から glibc 2.1 ベースでディストリビューションの体裁を(一応は)整えている rawhide を入れてしまえ、という気になったのだった。
egcs がメインになっているし(gcc と打っても動くのは egcs 1.1.1)、もうこの際だから全部、kernel から glibc から X から、みんなpgcc 1.1.1 で-mpentium の -O9 くらいでパッケージしなおしちまえ、くらいに思っているぞ(大笑い)
とりあえずの目標は glibc 2.1 環境で、そこそこ自然に日本語が使えること、
slang,jed,slrn, mutt, rxvt など、自分本意な日本語化をすること(笑)、極力 pgcc
で -O6 -mpentium などで make し、遅いハードで無駄なあがきをする
こと(大笑い)、くらいかな。
ただ、あまりにも rawhide がしょ〜もないもんだったり、ど〜しても glibc 2.1 が
(オレの能力不足で)モノにできなそうだったらダメージでかいので、いきなり今の環境を
全部捨てて入れ直しってのはさすがに思いとどまったぜ(笑)
そこで、半分腐りかけの、EIDEなdiskがあったのでコイツを廃物利用して、まずはそっちで仮環境を組んでみることにした。これから進捗状況を定期的にアップできたらいいなぁなんて思っている。
それからパッケージ置き場だけど、もうすでに Vine などの優れたディストリビューシ
ョンがあるし、日本語版 RedHat も LASER5 から出るそうだし、赤帽 5.2 向けのパッ
ケージは特に公開する必要もないという気がヒシヒシするんだ。
今置いてあるパッケージが obsolete になったら(もうなりつつあるけど)どんどん捨て
ていき、しまいにゃなくしてしまおうと思う。
かわりといったらなんだけど、rawhide な glibc 2.1 のパッケージや spec ファイル
でも置くかなぁ。あと、できたら自作ものをなにか。
というわけで、今日までの進捗状況
ftp://rufus.w3.org から rawhide の i386 と SRPMS 以下を全部落としてきて、2枚組の
CD-R にしたてた。ファイルのサイズは合っているものの、CRC エラーだか md5 エラーだかで壊れているファイルがあるのを気づかずに
CD-R に焼いてしまい、コースターのできあがり(泣)
こういうときは、あらかじめ rpm -K --nopgp *.rpm などとして、その rpm がブチ壊れていないかチェックするものなんだそうだ。_tom_ さんに教わった。コースター作った後に(笑)
さらに、インストールの 2nd stage で CD-R を mount して直接そこからコマンドを起動する、という仕組みが今一つわかっておらず、パーミッションの実行フラグが立ってないファイルを焼き込んでしまい、それもコースターに(泣)
これから rawhide や本家の赤帽を ftp してきて CD-R に焼こう、という人は、ぜひ
秘奥義の書を手元に
置いておくことをおすすめするね。
焼いた CD-R の1枚目の images から boot.img (Feb 25 14:00 というヤツ)でブートして入れた。
コールドスタートでないと、kernel bug: timer loaded
twice などとワケワカなことを言われてインストーラが走らないことがあった
。
Out of memoryなどと言われて起動できない。というかブー
トして kernel をロードした直後に Out of memory などとおっしゃる。インストール
時の kernel が腐っている模様。なんとかして kernel を make して lilo してやるぐ
らいしか方法がないのだが…
基本的にオレのコンダラ箱は SCSI 構成で、既存の赤帽5.2は SCSI の方に入っている。
rawhide はリムーバブルな IDE にインストールしたので、とりあえずインストール
が終わった時点で、SCSI から赤帽をブートし IDE をマウントしてやり、vmlinuz,
System.map を rawhide の /boot に、赤帽の /lib/modules/2.2.3 以下を rawhide の
同じ位置に cp -av などでコピーした後、chroot して /sbin/lilo
するという邪悪な方法で kernel をブチ込みなおした(笑)
ラベル rawhide で ralwhide を /dev/hda1 から、linux で既存の赤帽を /dev/sda1 か
らブートするようにしておいた。これで取りあえず日常生活にもまぁまぁ支障なく、リ
ブートすれば rawhide のほげり環境に移れるようになった。
2台目が欲しいのぅ(泣)
rawhide は普通にブートできるように(一応は)なった。ブート時も CUI ながら daemon
の起動時に[ OK ]とか
[FAILED]とか、カラフルでちょっとカッコイイぞ。まぁなきゃな
いでかまわんけどさ(笑)
/etc/rc.d/init.d/nfs stop などと、init file を単体で動かしても画面の右端にちゃんと
[ OK ]などと出すのには笑ってしまう。
インストーラの最後のフェーズで、xdm でログインするか?てなことを聞かれたので、
面白半分に Yes と答えておいたのだが、実際には xdm は GNOME の gdm を起動するよ
うになっていて、しかも /etc/sysconfig/console だの /usr/etc/gdm だのという設定
ファイルを読みたがるのだが、そんなもんは存在していなかった。
オレが何か失敗したのか、gdm やら XFree86 やらのパッケージに不整合でもあるのかも知れぬ。
日本語も一切使えない状況で GNOME もへったくれもないので、/etc/inittab の
initdefault をとっとと 3 に戻す。それからユーザ toru を作り、赤帽5.2の方から
/root の下や /home/toru の下をまとめて cp -a でコピーしてしまう。手抜きだのぅ。
既存の赤帽から持ってくる、といっても、/dev/sda1 だの sdb1 だのを /mnt に mount
しては cp -a するだけなので、極めて簡単だった。わはは。
既存の赤帽の /etc を見えるように mount し、dhcpd.conf をコピーした。
dhcpd.leases は touch で作った。BROADCAST はとりあえずいじってない。それでもちゃんと
broadcast を listen して ip アドレス を返しているようなので、よしとする(笑)
同様に赤帽から /etc/auto.master と /etc/auto.removable をコピーした。
/etc/hosts, /etc/hosts.deny, /etc/hosts.allow も。/etc/exports もコピー。
nfs, portmap, autofs, dhcpd 全て stop し、start しなおす。まぁ restart すりゃ
いいんだけど、一呼吸おいてね。儀式だから(笑)
/etc/sysconfig/network の FORAWRD_IPV4 を YES に書き換えて、
/etc/rc.d/init.d/network の ipv4_forward_set () を
ipv4_forward_set () { # Turn IP forwarding on or off. We do this before bringing up the # interfaces to make sure we don't forward when we shouldn't, and # we do it even if networking isn't configured (why not?). if [ -d /proc/sys/net/ipv4 ]; then # people could have left this out of their kernel, which isn't # exactly an error if [ ! -f /proc/sys/net/ipv4/ip_forward ] ; then echo "/proc/sys/net/ipv4/ip_forward is missing --" \ "cannot control IP forwarding" >&2 else if [ "$FORWARD_IPV4" = "no" -o "$FORWARD_IPV4" = "false" ]; then value=0 message="Disabling IPv4 packet forwarding." else value=1 message="Enabling IPv4 packet forwarding." fi # IP Masquerade Initialize /sbin/ipfwadm-wrapper -F -a m -S 192.168.9.0/24 -D 0.0.0.0 /sbin/ipfwadm-wrapper -F -p deny if [ $value != `cat /proc/sys/net/ipv4/ip_forward` ]; then echo $message echo "$value" > /proc/sys/net/ipv4/ip_forward fi fi fi }
などとしてみた(笑)
とりあえず IP マスカレは動いているようだからよしとする。っつ〜か、以前は
ipfwadm-wrapper を /etc/rc.d/rc.local に書いていたんだけど、そうすると、
network が上がって IP forward が enable になったあと、各種 daemon
類がすべて起動しおわるまで、ipfwadm-wrapper が動かない空白の時間帯ができちゃうようで、
なんかヤでねぇ。実際にはどうってことないんだろうけど…
あ、あと rawhide の telnet がスゲー笑えた。ウソつくんだもん。
4.4 BSD UNIX って言うんだよ、コネクトすると。
Login Prompt がそうなの。わはははは。赤帽は正直に RedHat 5.2 とかバージョンまで
教えちゃうから、よくネラワれちゃうんだってね。rawhide はウソつきだから平気かな?
そうそう、これを忘れちゃいけねぇの踏み絵でぃだけど、kernel 2.2 対応の fumied2
はキッチリと動いたよ。
autofs による automount は、なぜか時々 CD-ROM をくわえて放さなくなってしまう。
CD-ROM のドライブ側でガシガシと Eject ボタンを押したり、autofs の restart を
何回も繰り返していたりすると、SCSI bus reset とか言いだしたあげくエラーに
なり、こうなるとリブートしてもダメで、コールドスタートしない限り放してくれない(泣)
これは要調査だ。
nfs も、なんだか調子悪いぞ(汗) 赤帽から持ってきた /etc/exports では、うまく
rw で export してくれぬ。なんか書式が変わったのかなぁ。
/auto/cdrom 192.168.9.0/255.255.255.0 /auto/jaz 192.168.9.0/255.255.255.0 (rw) /home/toru 192.168.9.0/255.255.255.0 (rw)
こんなんで今まで動いていたのだ(それが不思議なのか?)けど
/auto/cdrom *.southpole.com /auto/jaz *.southpole.com(rw) /home/toru *.southpole.com(rw)
などと、ドメイン名を書き、かつ (rw) を空白を入れずに繋げて書くと rw で export してくれた。
なんだかよくわからぬ〜(汗) というか、こっちが正しい書式なんだろうなぁ。
とりあえず autofs + nfs で、これを書いているノート PC から、rawhide の /home
とか /auto/cdrom などをアクセスできるようにはなったのだが、autofs なのか nfs なのか、
たぶん nfs だと思うんだけど(だって autofs は 3.1.1-9 だし mount は 2.9-1 で、
赤帽 5.2 とほとんど同じだ)、複数のディレクトリなりマウントポイントを export し
ている場合に、どれか一つにアクセスすると、export してるすべてのディレクトリを
なめちゃうんだよなぁ。
どういうことかというと、/home/toru というオレの $HOME と、/auto/cdrom という
autofs を介して mount/umount する CD-ROM を export していたとしよう。この設定
で、ノート PC から rawhide の /home/toru を nfs でマウントすると、キューンとか音がして要求してもいないのに
CD-ROM に見に行っちゃうんだよね。可読な CD が入っていると実際に一旦マウント
してしまうのだ。なんだかなぁ。う〜ん、でも現象面だけを見ると autofs か…
rawhide の nfs ってknfsd とかいうパッケージな kernel NFS server というのが入っているんだけど
どうやら kernel 空間で動くので、従来のユーザ空間で動く NFS server よりもかなり
速い(つもり)らしい。調子良く動いてくれるなら歓迎なんだが、CD-ROM
をくわえて放さなくなるのだけわなんとかしたいぞ(汗)
どうやら rawhide に入っている glibc-2.1-0.990222.i386.rpm には、localedata として ja
および ja_JP.EUC だけは用意するつもりだったようだ。ディレクトリだけが存在して
いた。LC_CTYPE も LC_MESSAGES も、何もなかったけど(笑)。
とはいえ、BSD 的には ja_JP.EUC なのかも知れぬが、linux では伝統的にというか慣例として ja_JP.ujis を使っているように思うのだが。実際、オレも普段は
ja_JP.ujis で暮らしてる。
gnome 関係や WindowMaker などの .mo ファイルはすべて
/usr/share/locale/ja/LC_MESSAGES に配置されていた。そのくせ LC_MESSAGES
しか用意されておらず、LC_CTYPE などはない(汗) さらに sharutils.mo だけはなぜか
ja_JP.EUC の LC_MESSAGES に置かれている。この辺は赤帽5.2と同じだ。なんなんだ
か(笑)
とりあえずwcsmbs-locale-0.4.11 の localedata をソックリいた
だき、ja_JP.* 以下もそれらしく整うようにツジツマを合わせることにした。
また、その際に現行の glibc 2.1 ではja_JP.EUC は OK だが ja_JP.euc は NG
になるというバグ(と個人的には思う)があるそうなので、それもツブしておくことにする。
glibc 2.1 では、wc と mb の相互変換に /usr/lib/gconv 以下の shared library を
動的にロードすることで対処するのだが、その際に、locale (というか正確には
charset ね。つまり ja_JP.euc とか ja_JP.ujis とかいうときの、. 以降)に応じて
ロードすべき shared library のファイル名を決定するロジックがあるのだが、これがなぜか case sensitive になってしまっている、
という、文字で書けば単純なものなのだが…
EUC を mb として使用する locale では EUC-JP.so がロードされることになっている
のだが、上記のバグのため、ja_JP.EUC は OK でも ja_JP.euc は NG になってしまう
らしい。また、/usr/lib/gconv/gconv-modules で UJIS は EUC だよ、と alias 指定している
のだが、そちらも同様で ja_JP.UJIS は OK でも ja_JP.ujis は NG となってしまって
いた。
修正したものを glibc-2.1-1.990222.i386.rpm としてパッケージにし、インストール
した後に、例によってバータリーにtest_mblen.c
を compile して試してみることにする。(現時点では未テスト
だ。glibc のパッケージ再構築とインストールは終わったのだが、先にこの覚え書きをまとめておかないと、思い出せなくなりそうなんで
(汗))
redhat 5.2 の powertools から sudo-1.5.4-4.src.rpm を、JRPM から
less-332jp-5.src.rpm と nkf-1.70p1-1.src.rpm を持ってきて入れた。
どうして赤帽では sudo を標準で入れておいてくれぬ。
ったく。
てなわけで less-332jp-5.src.rpm をサクッと rpm --rebuild する。するとどういう
わけか、-O6 -mpentium で make されちゃうでわないか。あれぇ? 確かに ~/.rpmrc
には
optflags: i386 -O2 -m486 -fno-strength-reduce optflags: i586 -O6 -mpentium -fno-strength-reduce -fno-inline-functions
などと書いてはある。あるが、これは意識して pgcc で make する場合のために用意
しておいたはずなのに、なぜ使ってしまうのだろう。しかも、もしも build arch を
i586 だと認識しているなら、i586.rpm ができるはずなのに、生成されるパッケージは
i386.rpm のままなのだ。
make 中の表示も謎で、gcc -O6 -mpentium … などと表示されてるぞ。gcc 2.7.2.3 とかって、
-mpentium なんて使えなかったはずだが… などと不思議に思って gcc -v すると、
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.60.1/specs gcc version egcs-2.91.60.1 19990115/Linux (egcs-1.1.1 release)
などと白状するヤツ(-_-#) なぁんだ。デフォルトで egcs なんじゃん。それにしても
optflags: 586 と書いてあるほうのオプションを使ってしまうのは解せぬ。
rpm --version すると、version 2.91 などとすげ〜新しい番号を言う
ので、そのせいかも。従来の rpm 2.5.5 とかで使っていた --buildarch オプションは廃止になったらしく
--target を代りに使え、などと言われてしまうし。
かといって、rpm -ba --target i386 hoge.spec などとしようものなら、
パッケージの作成を永久に繰り返すという恐しいモード
に入ってしまった(汗) もうこの謎は追わぬことにしよう(笑) どうせこっちは pgcc で
-mpentium を常用しようと思ってるんだし。
less, nkf はサクサク make できて、パッケージも作れたのだが、どうも sudo でちょっと
引っかかってしまった。sudo を make する際に、bison を使うのだが、bison が
/usr/share/bison.simple がないわ!などと怒ってエラーになってしまうのだ。
見てみると確かに存在しない。でも、赤帽 5.2の方にもないぜ。でも sudo の make
なんて問題なくできてたのに…
実際には /usr/share/bison.simple ではなくて /usr/lib/bison.simple というファイルが
あったので、man bison に出ていたとおり export
BISON_SIMPLE=/usr/lib/bison.simple などとしてやって、make が通るようになった。
ふぅ。今日はここまで。お疲れさまでした。次はいよいよ glibc 2.1 での locale の実体調査だ。いきなりヤマ場(笑)
メール | 戻る |