Pandlerというrpm/yum管理ツールを作り始めました

皆さん、構成管理楽しんでますか?最近はChefやPuppetがやっと認められてきて普及し始めているところの様で、いろんな人が構成管理を楽しみ始めていてとてもうれしいです。

ところで、僕は前にこんなエントリを書いたりして、パッケージ管理にとっても興味のある人間なんですが、BerkshelfというChefのcookbookをBundlerの様にDSLとlockfileで管理できるというスーパー便利ツールの開発者のプレゼンをこの間聞きました。僕はこのDSLとlockfileでパッケージを管理するというやり方はすごい好きで、Bundlerに始まり他のLLのパッケージ管理も大抵そういう仕組がありますし、Berkshelfの様に言語のパッケージだけでない応用もあるわけですね。

で、だったらrpm/yum(deb/apt)も同じ様に管理できたらおもしろいんじゃないかな?と思って作り始めたのがPandlerというツールです。試行錯誤しながらやっと最低限動くものができたのでrubygemsに上げておきました。詳細はこちらのドキュメントで。

どういうツール?

Gemfileの様な感じでYumfileというのを作ってあげると、それを元に./pandler/rootというディレクトリにchrootの環境を作って勝手にインストールしてくれます。pandle execを経由すればchrootして実行する感じになるので、Pandler自体が入っているOSのパッケージの状態にはほぼ無関係に好きなパッケージを突っ込んで動作させられます。

今はただそれだけなのですが、そのうちVagrantの様にプロジェクトのホームをchrootの中にmountして見られる様にするつもりです。そうすると、rpm/yumの状況を完璧な形でどこでも再現できて、うれしい気がしてます。本当かはわかりません。

VMとかあるじゃん?なんでchroot?

21世紀にまさかのchrootという感じですが、それなりには理由があります。オーバーヘッドが少ないのはもちろんなんですが、VMを立てて使う場合個人的にめんどくさいと思ってるのがIPアドレス含むネットワークなんですよね。chrootならそれ考えなくていいのですごくシンプルです。代わりにポートがぶつかったりするので注意は必要ですが。

あと、VMだとそのOSのインストール自体でどうしても少なからぬパッケージがインストールされてしまって、lockfileで完全固定とかがしづらいんですよね。Pandlerならそれが動いてるマシンが、物理サーバだろうがVMだろうがクラウドだろうが、同じ環境を再現できます(語弊はありますがとりあえずイメージということで)。

今後

とりあえずここまで持ってくるので相当疲弊したので、日本の方の反応を見てから考えます。。。

rootでなくても動かせる様にしたいなーとかは思ってたり、deb/aptも対応したいなーとか思ってたりはしますが、何分使う機会の当分ないソフトウェアなので気力のある時に細々と頑張りたいと思います。

もし興味もって頂けて一緒に開発してもいいという方や、文句があるから色々つっこませろという方がいましたらぜひぜひご連絡下さい。

happy_siro 13-04-03 (水) 21:55

ChefやPuppetでもおんなじようなことはできると思うんですが、なんで、Pandlerを作ったんでしょう?

riywo 13-04-04 (木) 14:34

完璧な管理はかなり努力しないとできないのが大きいですね。どうしてもOSを入れるという行為自体に引きずられてパッケージが環境依存で変化してしまいます。カーネルモジュールであったりハードウェアの監視モジュールだったりも含めて。完璧に同じ環境を再現するにはまっさらなroot filesystemを使う必要があると思っていて、それはChefやPuppetではだいぶしんどいかなと(できるのかもしれませんが調べてません)。Pandlerでもカーネルだけはどうにもできないですが。

ただ、というのはほとんど後付の説明で、Yumfileというのがあったら面白いかなと思ったのが一番の動機ですw

Pandlerで作った環境の中にパッケージでchef-soloを一式入れて、その環境の中を更にプロビジョニングをするというのもやれたら面白いと思ってます。

happy_siro 13-04-09 (火) 16:22

理解しましたー。ありがとうございます!。
>Yumfileというのがあったら面白いかなと思ったのが一番の動機です
これは面白いし、便利だと思います。
うちはChefでパッケージのインストールを行うrecipeだけ作って、Roleでまとめてるんですけど、大仰でめんどくさいと時々感じます。。。