もう日常使う環境として不満のないところまで整ってしまっているので、あんまり書き残しとくこともないのだが…
1. rpm 2.94-5
rawhide 1.3.3 ベースなオレのコンダラ環境だが、rpm と glibc だけは rawhide 1.3.4 のものを持ってきて入れてある。つまり現時点では赤帽系の最新ということになろうか。だけどこの rpm が…
rpm 2.5系と違って、macro というものが使えるようになるのだが(ウィルスにはやられないから安心だ(笑))、おかげでいくつか非互換な事柄が出てきている。
常々、パッケージを作るとき(に限らず必要に応じて sudo を使ってるのだが)でも一般ユーザで作業するようにしているのだが、そのために ~/.rpmrc には以下のように書いてあり
#topdir: /usr/local/src/redhat buildarchtranslate: i586: i586 optflags: i386 -O2 -m486 -fno-strength-reduce #optflags: i586 -O9 -mpentium -Wall -Wno-parentheses -funroll-loops -fomit-frame-pointer -ffast-math -malign-functions=2 -malign-jumps=2-malign-loops=2 optflags: i586 -O6 -mpentium -Wall -fno-strength-reduce -fno-inline-functions #optflags: i586 -g -O0 -mpentium -Wall -fno-strength-reduce -fno-inline-functions
さらに /usr/local/src 以下に /usr/src/redhat の redhat 以下をバサッとコピーし、自分に chown して使っている。でも topdir の行がコメントになってるでしょ。そうなのよ。rpm 2.5系の時は、topdir をコメントアウトなどせず、ちゃんと効いて、一般ユーザで rpm -ivh hoge-1.0-1.src.rpm などとすれば、/usr/local/src/redhat/SOURCES 以下にソースが展開されていたのだが、これが rpm 2.9系ではできなくなってしまった。
よくよく見てみると、/usr/lib/rpm/macros などというファイルが追加になっていて、抜粋すると
%_usr /usr %_usrsrc %{_usr}/src %_builddir %{_topdir}/BUILD %_sourcedir %{_topdir}/SOURCES %_specdir %{_topdir}/SPECS %_srcrpmdir %{_topdir}/SRPMS %_topdir %{_usrsrc}/redhat
などという macro がズラッと並んでいるでわないか。どうやらこれをユーザ毎にカスタマイズするには、~/.rpmmacros というのを置けばよいらしい。で ~/.rpmmacros に
%_usrsrc /usr/local/src %_arch i586
などと書いてやると、確かに /usr/local/src/redhat 以下をパッケージ作成の対象と見てくれるようになった。ぢゃあ %_arch ってのはなんなの?というと、これもまたタコくさい話で、rpm 2.94 ってば target の指定ができないのだ。
従来の rpm 2.5系では、rpm --buildarch i586 などのように、--buildarch オプションを使えば target を指定することができた。rpm 2.9系では --buildarch オプションは廃止され、--target オプションに変わったのだが、これがちょっと変な動きをする。
rpm 2.95-4 の前にリリースされた rpm-2.94-11 では、--target を付けると、それだけで rpm がSEGVってお亡くなりになってたりしたんだぜ(笑) で、rpm 2.95-4 では直っているらしい、というのを聞いて入れてみたのだが、確かに --target=noarch などとすると noarch.rpm を生成してくれる。くれるのだが…
この --target オプションってば、単に redhat/RPMS の下の、どこのディレクトリに rpm を書き出すか、しかやってないようなんだなぁ。例えば spec ファイルの中で
CFLAGS="$RPM_OPT_FLAGS" ./configure --enable-shared \ --prefix=/usr ${RPM_ARCH}-linux
などという指定が %build にあったとしよう。rpm 2.5系では、--buildarch i586 とすれば、この ${RPM_ARCH} は素直に i586 に置換されていたのだ。だが rpm 2.94-5 では常に i386 のまま。どうにもこうにも変わってくれないのだ。そのクセ、書き出す rpm は i586.rpm とかホザいてくれるから混乱する。
で、~/.rpmmacros に %_arch でもって i586 だぞコラ、と指定してやると初めて ${RPM_ARCH} を i586 に置換してくれるようになる。なるんだが、今度は i386 を作れないぞ〜(笑)
rpm 2.9系では ./configure などでオプションを正直にそのまま書かず、%configure のマクロ一言で済ます、という技が使えるのだが、きっとそのカラミだとは思う。${RPM_ARCH} を使う、ということ自体が古いお作法なのかも知れぬ。
2. PGCC 1.1.1 $ 1.1.2pre
cdda2wav で吸い出した wav を mp3 に encode するのに、lamer という mp3encoder を愛用している。cdda2wav と lamer と id3ren をいっしょくたにグルグルする shell script なぞをちょちょいと書いて、快適に暮していたのだが、それもこれもすべて_tom_さんのおかげだ。多謝。
で、そのかわりといっちゃなんだが、_tom_ さんから、ほんとに PGCC って効果あんの? lamer で比較してみてちょ、などと頼まれたのでやってみたのだ。使ったのは rawhide 1.3.3 の egcs-1.1.2-12 と、自分でパッケージした(怪しい…) PGCC-1.1.1-8 と、隠し玉の PGCC-1.1.2pre だ。コイツはhirosi-kさんのページから egcs-1.1.2-pgcc.diff.bz2 をもらってきてあてて、塩胡椒してツジツマを合わせたものだ。
で、それぞれのコンパイラで lamer を make してみた、のだが… lamer で指定されるコンパイルオプションってすごくて、
-O9 -mpentium -funroll-loops -fstrength-reduce -ffast-math -malign-functions=4 \ -malign-jumps=4 -malign-loops=4 -enable-i386-hacks
こんなのが指定されてるんだぜ(汗)
EGCS & PGCCのページを参考に見てみると、ベンチマークなどが出ている。いい結果が出ているようだけど、ウチの PGCC ぢゃちょっとそうはいかないかも(汗) いやむしろ lamer の作者の速度アップに賭けた気合いがゴイス(by 吉田さん)というべきか。
で、上記のオプションでも egcs 1.1.2 ならサクサクとコンパイルできるし、安定して動くんだよね。対して PGCC は、というと、上記のオプションでコンパイルなどしようものなら、実行ファイルはできるものの、起動直後に SEGV でお亡くなりになる(笑)
もともと -O9 なんてのはなくて、PGCC では -O6 までなのだが、それにしたって SEGVってしまうことに変わりはない。-O2 くらいまでヌルくしてやると、やっと1曲を安定して encode できる実行ファイルを出してくれるが、これじゃ gcc の 30% 速いどころか、egcs 1.1.2 の倍遅いっつ〜の 凸(-_-#)
というワケで、PGCC は捨ててしまった。オレのパッケージに問題がある可能性も低くはないが… もうすでに egcs 1.1.2 で lamer ちゃんが快速動作をしているので、ちょっと力抜けたぜ。
とか言ってたら、掲示板の方に、egcs-1.1.2-pgcc-1.1.2.diff.bz2 が出てますぜ、などという怪文書が(笑) やめてくれ〜プロフェッサーギルの笛わ(ふっる〜)
3. leafnode+-2.6
ぱぱんださんもご愛用のleafnode+だが、オレもパッケージにして早速使っている。でも書くことないわ、簡単すぎて。ただ、以前ぱぱんださんの掲示板で、leafnode+ は Message-ID を自分で付けてますか?それとも ISP の NNTP 鯖に付けさせてますか?と聞いたところ、自分で付けちゃってますね、というお答えだったんだわ。
NNTP での Message-ID 捏造ってのは、SMTP でのそれと比してだいぶタチが悪いとオレ的には思うので、うむ〜と思っていたのだが、必要ならパッチあてたれ、と思ってソースを展開してみると、なんと Makefile に
# if you want to add no message-id, use following #CFLAGS = $(DEBUG) -DNOMSGID
などと書いてあるでわないか。コメントにされていて、デフォルトでは使われないのだが。NOMSGID というのがどこで使われているか探すと、nntpd.c に
#ifndef NOMSGID if (!havemessageid) { char tmp[80]; sprintf(tmp, "Message-ID: %s\r\n", generateMessageID()); write(out, tmp, strlen(tmp)); } #endif
などとちゃんと書いてある。-DNOMSGID を付けて make してやれば、Message-ID を自分では付けず、ISP の NNTP鯖に任せてくれるワケだ。そうだよなぁ。Jam さんが手を打っておかないはずがないよ、うん。
というわけで、パッケージ置き場に置いてある leafnode+-2.6 の src.rpm は Message-ID を付けないダイアルアップユーザ仕様になっている。
メール | 戻る |