Lion (10.7.2) だと Gentoo Prefix が Python のビルドに失敗する

Python 本体ではなく,Mac に関連している部分でエラーが発生しているよう.なので aqua USEフラグを無効にすることで,とりあえず Python をインストールすることができます.

Gentoo Prefix Bootstrap Process for Mac OS X の手順に従っている場合は,Code Listing 1.11 をenv USE="-aqua" FEATURES="-collision-protect" emerge --oneshot portageとすることで,インストールには成功するようになります.

Code Listing 1.16 でも Python のビルドが発生するので,修正されるまでは ${EPREFIX}/etc/portage/package.use あたりに dev-lang/python -aqua と追記してしまうのが良さそうです.

インストールした Gentoo が起動中に止まる

現状、Gentoo Linux AMD64 Handbook に従って作業をおこなうと、新しい環境の起動中に止まってしまう問題に遭遇します。とくにエラーらしいエラーはなく、init-early.sh used greatest stack depthと出力された段階から先に進みません。

これはGentoo Forums :: View topic - kernel hangs at “init-early.sh used…” [solved]にあるように既知の問題ですが、現時点でもバグはオープンのままなので注意が必要です。quick fix は bug 368597 の Comment 74にまとめられています。

Gentoo prefix on Xcode 4.2

ベータ版の Xcode 4.2 をインストールしたので、Gentoo prefix を再インストールした。基本的にはGentoo Prefix Bootstrap Process for Mac OS Xに従えばよろしいが、注意点が3つある。

/usr/bin/gcc が llvm-gcc を指すようになっている

しかし現状の prefix portage には Apple版の llvm および llvm-gcc はふくまれていないので、llvm-gcc が使われてしまうのは困る。実際いくつかのパッケージがビルドできない。具体的には gcc-apple とか。

対応として、作業の前に export CC="/usr/bin/gcc-4.2" CXX="/usr/bin/g++-4.2" として、使用するコンパイラを gcc に変更しておく。emerge --oneshot --nodeps gcc-apple が終了したら unset CC CXX し、hash -rすれば良い。

python の bootstrap に失敗する

これも llvm-gcc がらみかと最初思ったが、よくわからない。CHOST="x86_64-apple-darwin10" してるせいかと思ったが、portage を使ったインストールはうまくいくので違うらしい。

対応としては、とりあえず単に無視してみた。それでも大丈夫なようだ。

最後の emerge -eav systemで、findutils の emerge に失敗する

エラー自体は既知のもので修正されているようなのだが、何度 emerge しても失敗する。

今日は時間がないので、これについては明日調べる。

ACM KDD,WSDM,WWWの近年の論文を読む会 (4)

@norizmが主催するACM KDD,WSDM,WWWの近年の論文を読む会の第4回目で,前回に引きつづき論文紹介をしました.

Espresso 型ブートストラッピング法における意味ドリフトのグラフ理論に基づく分析

@mamorukさんの2010年の論文 (人工知能学会論文誌 2010 vol. 25 (2) pp. 233-242) .ブートストラッピング法を用いて解かれるようなタスク (語義曖昧性解消や関係抽出,固有表現抽出) において問題となる意味ドリフトと呼ばれる現象を,グラフ理論の分野におけるリンク解析の視点から分析している.

ブートストラップング法として Espressoを,グラフカーネルとしては von Neumann カーネルと正則化ラプラシアンカーネルを例に,語義曖昧性解消タスクにおける適合率を実験的に比較することで,

  1. ブートストラッピング法において意味ドリフトは不可避であり,ヒューリスティクスの効果も限定的であること
  2. 意味ドリフトの原因が,グラフのリンク解析におけるトピックドリフトであること
  3. リンク解析で用いられている von Neumann カーネルと正則化ラプラシアンが意味ドリフ トを抑制すること
を示している.

また,停止条件などのパラメータの調整が難しいブートストラッピング法にくらべ,2つのカーネルは拡散係数しか持たないことから,比較的調整は容易とのこと.

感想

2つのグラフカーネルが意味ドリフトを抑制すると書かれているけれど,挙げられている実験結果は最適パラメータでのEspressoとほぼ同等.なので正確には,「調整の難しいEspressoの最適パラメータにおける適合率と同等の結果を,2つのグラフカーネルはより簡単な調整だけで達成できる」なのではないかと思った.あ,要するに抑制してることになるのか.

HITSアルゴリズムなつかしい.学部4年の頃に使った.トピックドリフトとか全然意識してなかったけど.

読んでみたい参考文献

Gentoo とさくらVPS

2010年9月1日からさくらのVPSが正式スタートしました.初期インストールで選べるのは CentOS だけなので,他のさくらインターネットのサービス同様 Gentoo を選ぶことはできません.

しかしコントロールパネルからシリアルコンソール (ttyS0) を操作することができるので,上手くやれば CentOS 以外の様々な Linux ディストリビューションやFreeBSDをインストールしてしまうことができます (噂によれば Windows さえも :).

月額980円と安価なので,個人用途でも仕事でも色々と使えそうです.しかし毎回手動で作業するのは面倒なので,作業工程をスクリプトの形でほぼ自動化してみました.以下,スクリプトがどのようにGentooをインストールしていくか,作業の備忘録も兼ねて簡単に記述していきたいと思います.

bootstrap-0-prepare.sh

CentOS 上で必要な作業.インストール時には CentOS を削除する必要があるので,スワップ領域 (/dev/hda3: 2GB) に最新の Gentoo minimal install CD を展開し,こちらを使って再起動を行います.起動後にCDの領域を探す処理が入っているので,CDの内容の展開は必須です.

最新の minimal CD のダウンロードや展開,GRUBの設定変更も自動です.また再起動後にも問題なくインターネットに接続できるよう,ネットワーク周りの設定もバックアップしておきます.シリアルコンソール周りの設定は特にいじらなくても起動できるようです.

本当は後述の Gentoo 上での作業まで一括自動実行にしたかったのですが,CentOS がマウントできる squashfs のバージョンが古すぎて (Gentoo の squashfs のバージョンが新しすぎて) イメージが編集できないため,一旦パス.

bootstrap-1-base.sh

Gentoo の標準的なインストールは,ディスクやネットワークの設定,stageファイルの展開などを行うフェーズと,インストールした領域に chroot して実際の具体的な設定を行うフェーズに大きく分かれ,このスクリプトはハンドブックの3章から6章の頭までに相当する,chroot までの作業を行います.

バックアップしたネットワーク設定の復元や,最新の stageファイルのダウンロードなどもすべて自動です.また,スワップ領域を潰してしまっている関係で,物理メモリ 512MB だけだと emerge が途中でコケてしまう恐れがあることから (というかコケた),適当な大きさのスワップファイルを作成して有効化しています.

ここから後のスクリプトは自動的に実行されるよう,前のスクリプトの内部で設定されます.手動で実行する必要はありません.

bootstrap-2-chroot.sh

chroot 後,ハンドブックの6章途中から10章までの作業を行います.おおむねハンドブックで推奨される通りの作業内容ですが,具体的なツールのインストールを行うので,設定しているシステムの仕様目的によってはカスタマイズの余地があるかもしれません (でも本当に必要最低限です.syslog-ng, vixie-cron, ntpd, logrotate).

カーネルの構築や,システムの設定,あとルートパスワードの設定も行います.ただpasswdコマンドを実行しているだけなので,インストール中にいきなりパスワード入力を求められ (てインストールが中断しま) す.これはどうにかした方がいいかもしれない.

自動的に再起動します.

bootstrap-3-finalize.sh

ハンドブックでいうと11章に相当.インストール時に作成したファイルの削除や,スワップ領域の復元などを行います.ユーザーの作成は行いません.

自動的に再起動します.

bootstrap-4-decorate.sh

このスクリプトは必ずしも実行する必要はないので,自動で実行はされません.でもたぶん実行した方がいいと思います.

現在インストールされている全パッケージのアップデートと,sudo, iptablesのインストールを行います.ポートは22/tcp以外すべて閉じます.sudoはwheelグループで有効にします.

あぁ,あとsshd の認証を公開鍵認証のみに変更します.実行前にユーザー作成して公開鍵を置いておいた方が楽かも.

今後の展望

現状さくらのVPSは同一設定のみ提供されているっぽいので,かなり細かくコンパイラオプションを指定したバイナリパッケージであっても,すべてのホストで使いまわすことができます.また物理メモリは512MBと若干貧弱ですが,CPUの処理能力は申し分ない性能です.

distcc を使って emerge の処理を各ホストに分散し,生成したバイナリパッケージはすべてのホストで使い回せるようになどできたら,なかなか面白いかもしれません.

まぁこれはさくらのVPSに限らない話だけど.

まとめ

公式にはCentOSしか提供されていないさくらVPSにおいて,FreeBSDやDebianのインストール手法を参考に,Gentooをインストールする具体的な方法をまとめました.また実際のインストール作業を支援する目的から,作業の大半を (半)自動化したスクリプトも作成しました.

みなさんも楽しい Gentoo Life を送りましょう.Gentoo かわいいよ Gentoo.