|
W/O index |
Turbolinux 10D LVM2 設定(Wed Dec 03 2003)
Open Qube こと Sausalito(Sun Oct 19 2003)ソーサリトー? スペイン語風には「サウサリート」かも知れない。 かつてアプライアンスサーバのハシリとして一世を風靡したコバルト・キューブの管理ソフトウェアが、Open Qube としてオープンソース化されました。以下は、Open Qube3(コード名 Sausalito)環境を構築しつつ、ソースを読みながらのノートです。 # 自分は片手間アドミンなので、「vi でいいや」派なんですが、いや、できれば Emacs が…… 追記(Mon Dec 01 2003): コミュニティ発の "Blue Quartz" と名前を変え、目下、素の RH9 上で動くように手が加えられているようです 基本構成ブラウザ (*0) ↑ │HTTP, HTTPS ↓ Web サーバで UI (*1, HTML + PHP スクリプト, /usr/sausalito/ui/ 以下) ↑ │PHP モジュール($(CCEPHPLIBDIR)/CCE.so) ↓ CCE クライアント (*2, /usr/sausalito/lib/libcce.so) ↑ │IPC (/usr/sausalito/cced.socket) で │ CSCP (Cobalt System Configuration Protocol) ↓ CCE サーバ (*3, /usr/sausalito/sbin/cced、ハンドラの多くは in Perl) UI 部分(*1)、CCE (Cobalt Configuration Engine) 外部 API(*2)、デーモン部分(*3)が、きっちりきれいにレイヤに分かれています。Sausalito 各部には、何かとカリフォルニアの地名に基づく名前がついているのですが(これがわかりにくくてしようがない)、どうやら *1 の UI → Carmel、*2 + *3 の下まわり → CCE、両者をひっくるめて → Sausalito ということのようです。 CCE サーバのサブシステム、CODB (Cobalt Object DataBase), ED (Event Dispatcher) など。オブジェクトのクラスは XML の定義(schema)を持ち、CODB サブシステムの配下にある、なぜなら外部表現として永続するから。対してハンドラ(データの書きかえや検証の際に動くコールバック。Delphi 風に言えばプロパティハンドラ?)の定義(conf)は CONF サブシステムの下にあり、ランタイムにのみ働く。なお、CODB などというたいそうな名前がついてはいるものの、実体は /usr/sausalito/codb/objects/ の下を見てみれば……。 # SMD (Session Management Daemon) 下で FSM (Finite State Machine) が動く。CCE サーバは、CSCP で駆動される状態遷移マシンです。 CCE クライアントとサーバ起動したら、低レベルのクライアント(testcli.c)で、直接サーバにつないでみます。
何となく http か ftp に似てますね。実運用時には、こんな調子で、UI 側からは PHP の CCE クライアントモジュールが、サーバのハンドラ側からは Perl の CCE クライアントモジュールが、CCE サーバと対話をします。 sausalito-devel-tools の謎とき(というほどではないが)自分でモジュールを作ろうと思うと、謎の Sausalito のビルドシステム(sausalito-devel-tools)にぶつかります、何とかせねば(どこのビルドシステムにも言えることですが、自分に酔うのはやめましょう、自戒の意味も込めて。「えへへ、こんなに効率的なしくみを考えちゃったぜ〜」とか言っても、たいがいは話を無用に複雑にしているだけだったりするし、他人が読めない or 使えないものになります)。 モジュールの Makefile を見ると、/usr/sausalito/devel/module.mk を include しています。 "rpm: clean src_rpms mod_packing_list mod_specfile FORCE" となっていて、たかが rpm 作るのにカレントの作業環境を "clean" するのはとてもお行儀が悪いんだが、まあよしとして、問題は残り三つ "src_rpms mod_packing_list mod_specfile"。 ターゲット src_rpms を見ると、src/ もしくは src/base のようなディレクトリ下の Makefile は srpm を作るようだが、そんなの一つもないので無視。 packing_list はわからんので後まわし。 mod_specfile ターゲットを make すると spec ファイルができる……はず。テンプレートになるのは template/spec.tmpl、マクロ定義が rpmdefs.tmpl。それを /usr/sausalito/bin/mod_rpmize に通すとようやく spec ができるのだが、mod_rpmize がいろいろやるわりにドキュメントがないので、しかたなく他人の書いた perl を読むはめに……。呼び出しは "mod_rpmize rpmdefs.tmpl spec.tmpl base-ほげほげ.spec" のようになり、第一引数を「マクロ定義」、第二引数を「テンプレート」、第三引数を「spec ファイル」と今後故障します。もとい、故障しそうですけど呼称します。mod_rpmize がするのは、マクロ定義をパースしてから、テンプレートを一行ずつ読み込みつつマクロ展開し、spec ファイルに落しこむだけなんですが、問題は、テンプレート中の /\S+_SECTION/ の部分を展開するとき、セクションによってよけいな^h^h^h^hいろいろなことをしてくれるので、結局 mod_rpmize の "sub print_section" を参照しないと、何をするかわからないこと。ひとまず今困っているのは各国語の locale をつくってくれないことなので、"DESCTIPTION" の部分を見ると、"special-case locale" とあって、ここで "$ENV{LOCALES}" を参照していることがわかるので、これをセットしている /usr/sausalito/devel/module.mk を見ると、locale/(言語名)/(サービス名).po があったら locale-(言語名) パッケージをつくるようになっているので、これをつくってやると……お〜、出てきただよ。 |