OpenSolaris HotTopics Seminar

3/19に、Sun MicrosystemsさんによるOpenSolaris HotTopics Seminar に行ってきた。今回は久しぶりの用賀での開催。なにげに登録で1getしたのは秘密だ。

さて今回のお題は、jp-osugリーダーの瀧さんによる、IPSによるパッケージ作成とか、コントリビュータになる話。瀧さんのプレゼンテーションは瀧さんのサイトで公開されている。

IPS(ImagePackageSystemの略)というのは、OpenSolarisで採用されているパッケージングシステムである。aptとかyumとかを参考にして作られていて、ネットワーク経由でパッケージのインストール・更新・削除・検索などを行えるのが特徴。ただ、先を急ぎすぎて、ネットワーク上のレポジトリにしかパッケージが無いという特徴があり、ネットワークが繋がっていない環境でパッケージの追加・更新を行えないという罠がある。なお、インストール済みパッケージの情報だけはローカルに持っているので、インストール済みパッケージの情報取得、削除などは行える。

さて、じゃあどうやってIPSにパッケージを登録するかというと、local環境(もちろんlocalhostでも構わない)でIPSレポジトリを上げる。これはサービスを一つ起動するだけ。そして pkgsend というコマンドを使用して、manifest(インストールするファイルの情報や、パッケージ情報をまとめたファイル)を作って、その通りにファイルをlocalレポジトリに登録する。あとは、pkgsend でSVR4 pkgをimportすると言うことも出来る。ただ、これだとSVR4パッケージと同じで、インストールするファイルをbuild した時の情報が残らない、という問題点がある。

そこで登場するのがpkgbuild である。もともとpkgbuildは、RPMのspecファイルを利用してSVR4パッケージを作成するツールだったのだが、最近ではIPSにパッケージを登録出来るようになっている。もちろん、IPS の manifest ファイル特有の情報や legacy package 情報(SVR4パッケージ互換の情報)のための情報を入れるため、独自のマクロを使用したりする。ここでも問題があって、SRPM相当のファイルを作れないとか、書き方に標準的な作法がないとか、というところが今後の課題。詳しいことは瀧さんのスライドを参照して下さい。力作です。

その後は、SUN黒田さんによる、Legacy環境(Solaris10とか)で、IPSを動かしてしまう話。IPSサービスはpkg.depotdというデーモンがその実体なのだが、これはPythonで書かれていて、ただのWebアプリケーションと同じである。つまり、Pythonが動く環境なら、Solaris10でも、LinuxでもIPSが動いてしまうのだ。ということで、Solaris10でIPSを動かすデモとか、その注意点とか。

次は毎度恒例、原口さんによる3分クッキング。今回は、pkgsend コマンドで、localレポジトリに簡単にパッケージを登録してしまう方法。

あとサトカズによる飛び入り企画、長南さん作のipsget.pyのご紹介。これは、remotoのIPS レポジトリをぶっこ抜いて全コピーしてしまうコマンド。しかも、gzipやsha1sumを使用してファイルチェックして、ダウンロードに失敗したファイルを再ダウンロードしたり、multi-thread で動いてダウンロードスレッドを複数個動かしたり出来る優れもの。しかもPython製なので、どこでも動く!そして、コピーしたレポジトリを使って、localhostにremoteのレポジトリのミラーを立てたり出来る。これの何がうれしいかというと、不安定なレポジトリ(例えば開発用のdevや、コントリビュータ用のjucrなど)は、まれに落ちていることがあったり、置いてあるパッケージの出来がイマイチだったりする。なので、ある程度安定した部分のレポジトリを残しておくことで、パッケージを安定供給出来たりする。また、OpenSolarisではZone作成時にいちいちレポジトリからパッケージをインストールしたりする。そのため、クローズドネットワークの環境では、Zoneを作るのが大変なのだ。ここで、ミラーしたパッケージディレクトリをコピーして、クローズドネットワーク内にレポジトリを用意することで、外のサイトへの穴を開けなくてもZoneを作ったり出来るのである。大変便利!ということで、ありがとう長南さん、ありがたく使わせてもらっています。

で、その後有志による懇談会。まあ、この懇談会が一番面白いわけですが。ということで、(きっと全員)終電を逃すことなく無事帰宅しました。