JPOSUG のパッケージを作ってきて 5 年以上になっていた
(commit ログによると初コミットが [2012-03-24]、
Solaris をまともに触りだしたのが [2011-03-01])のだけど、
いろいろと思うところがあるので書き出しておく。
1. 自分が作ったパッケージが多過ぎる
JPOSUG のパッケージビルドシステムとして、
ここまでパッケージが多くなるとは想定されていなかっただろうし、
自分が作ったパッケージすらメンテナンスしきれていないし。
ビルドシステム的な問題は、
https://github.com/ftnk/jposug-build-tools で
自分としては、使える形にはしているつもり。
自分が作ったパッケージが多いのは、
Perl の cpan module や Rubygems などが多いというのが大きい。
cpan module や Rubygems などは雛形を生成するスクリプトを用意したので、
パッケージ作成のコストが低くなっているというのもある。
作ったパッケージが多過ぎる結果、自分がよく使うものは更新するが、
仕事で必要だったけど今は使っていないものなどは更新できていない。
2. パッケージを作っている人がすくない
まあ、JPOSUG のパッケージの存在感のなさと、
パッケージが必要だという人の少なさもあるとは思うけれど、
パッケージを作っている人が少ない。
今年は、自分以外のコミットはないだろうと思いつつ hg pull すると、
たまに @karky7 のコミットが降ってくるという感じだったし。
3. 複数の環境(Oracle Solaris、OpenIndiana など)を考えるのは難しい
もともと、複数の環境でビルドされることを考慮していたようだが、
使わない環境のことを考慮できないし、わざわざ環境を用意してビルドしてみる
というコストを払うのは割にあわないので、自分は Oracle Solaris でしか確認していない。
spec file を書く上では、どの環境ではどのパッケージがあるとか、
コンパイラは何を使えるとか、GCC のバージョンは何があるとか、
そのあたりを考慮するのはつらい。
4. 公式パッケージとの衝突
JPOSUG のパッケージは
- IPS package name に jposug という prefix をつけたりせず、Oracle Solaris と同様の命名をしている
- /opt/jposug 以下などにインストールせず、/usr 以下にインストールする
という点で、Oracle Solaris のパッケージと衝突することがある。
例えば、PHP 7.1 が出た時点では、Oracle Solaris は PHP 7.1 を持っていないので、
web/php-71 という IPS package name で /usr/php/7.1 以下にインストールしても問題なかったが、
11.3.23 で pkg://solaris/web/php-71 が用意され衝突するようになるとか。
このような衝突が起きると、
- pear、pecl、Rubygems などのパッケージのビルドしなおしする必要が発生する可能性がある
- 公式にパッケージは最新のバージョンが入ってこないので、バージョンが下がることがある
など面倒なことが発生し得るし、公式のパッケージだと、
依存関係のため、特定のパッケージだけをアップデートすることが難しく、
全体をアップデートしないといけないということになりがちなので、運用上つらい。
このあたりを解決するため、
- IPS package name に jposug という prefix をつける
- /opt/jposug 以下にインストールする
という方向にして行く必要がある。
あと、例えば、Ruby 2.3 のパッケージを作るとすると、IPS package name は
jposug/runtime/ruby-23jposug とするのがよさそう。
jposug/runtime/ruby-23 としてしまうと、Ruby 2.3 をインストールするため、
pkg install ruby-23 とすると、公式パッケージの runtime/ruby-23 なのか
jposug/runtime/ruby-23 なのか判断できずインストールされないはずなので。