久しぶりに Gentoo を更新しました
% esync -v # emerge --sync % layman -s ALL % emerge -e world
結論から言うとシステムが壊滅状態になりました。 kde とか qt 周りは凶悪すぎます。ちょっと testing 使っただけでバージョン管理がおかしくなるのはなんとかなりませんか。 java 関係のパッケージに至っては公式から本体をダウンロードしてからやり直せというメッセージを表示するためだけに一日がかりの emerge を中断してくれるという親切さ。素敵すぎます(もちろん次に実行するのは --resume --skipfirst ですよね?)。まあなんとか修復して元通り使えるようにはなりましたが、あまり腑に落ちないというか達成感がないというか。
現状、 emerge には処理するパッケージを exclude するオプションが --skipfirst しかないので world のような大規模更新をする場合は以下のような手順で行ったほうがいいかもしれません。
% emerge -epv world | awk '{ print $4 }' | perl -ne 'print "=$_" if 1.../.+/' > packages % cat packages | xargs emerge
更新から外したいパッケージがあれば packages を編集してそのパッケージの行を取り除いてやれば OK です。依存関係でうるさくいわれるようなら --nodeps を試してみるといいかもしれません。
ここから少し違う話題へ。「LinuxサーバーHacks2」で distcc という分散コンパイルプログラムを使ってコンパイルを速くするハックが紹介されていたのですが、そのときに呼び出す make プログラムの -j(--jobs) オプションに関して不可解な点が。以下「LinuxサーバーHack2」の202pから引用。
distccを開始する前にまずコードのビルド時にパラレルメイクを実行する方法について知っておかなければなりません。パラレルメイクを実行するには、makeコマンドで-jオプションを使用します。
dbrick@rivendel1:$ make -j3; make -j3 modules
これにより3つの子プロセスが生成されます。コンパイルの対象が常にキューに存在することにより、これらの子プロセスはプロセッサパワーを最大利用します。 通例では実行するパラレルメイクの個数はプロセッサの数に2を掛け、その数に1を足した数になります。
一方、 Gentoo distcc ドキュメント(*)は、
(-jN(NはCPUの合計数+1の二倍)を含むようにMAKEOPTSを修正する)
(*) http://www.gentoo.org/doc/ja/distcc.xml
またそれの原文(*)は、
(Modify MAKEOPTS to include -jN, where N is twice the number of CPUs +1 available)
(*) http://www.gentoo.org/doc/en/distcc.xml
となっています。正直な話「LinuxサーバーHacks2」は信用できるほどの翻訳ではありません。かといって Gentoo の翻訳ドキュメントも基本的にボランティアなのでなんともいえません(僕はこちらのほうが信用できますが)。それで肝心の原文を眺めてみても前者ともとれるし後者ともとれるし…そもそもこの通例ってどこから来ているのやら。 man ページにも情報なし。調べる気もあまりなし。
まあどちらにしろ Gentoo Handbook の 「 -j オプションはプロセッサ数の +1 にするべき」という解説は高確率で間違っていると思われるのですが、 -j オプションは気休め程度の効果しか期待できないと思うのでどうでもいいといえばどうでもいいのでしょう。
暇なときに検証してみたいと思います。
追記
手頃なパッケージで -j によるビルド速度の変化を見てみたところ結果は全然変わりませんでした。むしろ process scheduling/io scheduling 等々によっては逆に遅くなりそうな悪寒。
- Category(s)
- linux
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/gentoo-update/tbping
Re:久しぶりに Gentoo を更新しました
http://www.gentoo.org/news/ja/gwn/20061002-newsletter.xml
Re:久しぶりに Gentoo を更新しました
P.S. GentooJPには近い将来お世話になるかもしれないのでその時はよろしくおねがいします。