Ubuntu に LSB 3.2 の開発環境を構築してみよう [追記あり]
LSB とは Linux Standards Base の略で……ってのはぐぐればなんぼでも出てくるので省略。
仕事の都合で LSB 3.2 (いまの最新は 4.0 だけど、取り込まれた環境はないので、実質的には 3.2 が最新) のアプリケーション開発環境を作る必要ができたので、メモレベルだけどさくっと記録しときます。
厳密にはアプリではなく、プリンタドライバの配布パッケージ:
Distribution Independent Printer Driver Package
を作るためなんですけどね。
このやりかたで環境を作ってアプリを作れば、自然と LSB 3.2 対応になり、LSB 3.2 の環境なら動くものになる……はず*1。
当たり前だけど開発環境にうかつに新しいライブラリとか入れちゃうといつの間にか LSB 非互換になっちゃうとかあるので、別の環境を用意するのがよい子のお約束でありましょう。
いつもの私なら仮想化でやるところだけど、こういう場合は chroot を使うもんだ、との声が聞こえたので試してみることにした。環境はいつもの Ubuntu Jaunty (これ自体が VMware Player で動いてるんだけど)。
chroot の環境を作る
ここはなにも考えず Ubuntu Japanese Wiki の:
The Ubuntu Packaging Guide 日本語版/chroot環境
をマネすればおっけ。
私は LSB 3.2 準拠の LTS ということで hardy にしました。
また chroot 用の環境は /var/chroot に作れと書いてありましたが、もしかして他の環境 (たとえば LSB 4.0 とか) も作りたくなるかもしれないので /var/chroot/hardy と一個階層を掘りました。まあそこらへんは適宜読み替えてください。
上記のページはどっちが元環境の操作でどっちが chroot した環境の操作かちょこっとわかりにくいときもあるのですが、まあそこらへんは雰囲気でカバーしてください (ヒドイ)。
LSB のインストール
前述のようにプリンタドライバのパッケージを作るためなので、ドキュメントに従うと、
"lsb-build-base", "lsb-build-cc", "lsb-build-c++", "lsb-build-libbat", "lsb-appchk", "lsb-pkgchk"
と、それから "lsb" を入れろと書いてあります。
しかし調べると、まず lsb-build-libbat は LSB 4.0 から入ったものみたいなので無視。
lib-build-c++ は Debian 系の場合 lib-build-cc と一緒になっているのでこれも無視。
それから、Hardy の場合は LSB 2 系と LSB 3 系の両方に対応しているので、どちらかを明示的に指定しなければいけません。
ということでまとめると、Ubuntu Hardy の場合なにも考えずにこれで OK*2。
$ dchroot -d
(myhroot)xxxxx ~$ apt-get install lsb-build-base3 lsb-build-cc3 lsb-appchk3 lsb-pkgchk3 lsb lsb-rpm
lsb-rpm はいるかどうかわかんないですが プリンタドライバの場合は rpm と deb 両方作らないといけないので必須になります。
プリンタドライバパッケージ作成用の追加設定
ほとんどの方には関心がない内容でしょうが、ブログのタイトルがタイトルなんでお付き合いくださいナ。
まあ結論から言ってしまえば以下のようにします。
(myhroot)xxxxx ~$ apt-get install cupsys cupsddk cupsys-bsd lsb-priting
単純に、lsb-printing が lpr を要求するんですが、lpr パッケージとか入れられても少し悲しいのでせっかくだから cups 関係全部入れてみたってことです。cupsys-bsd というのは cups のフロントエンドの lpr コマンドが入ったパッケージ (bsd ってのは lpr が bsd 系のコマンドだから)。
あ、cupsys ってのは昔の名残で、Ubuntu の場合 Intrepid (8.10) から、Debian は Lenny (5.0) から、cups って名前に変わってますのでご注意です。
パッケージを実際に作るにはって話はさすがに読者が全国でも誰一人いなさそうな気がするので(プリンタドライバを作る人しか読まないし、ベンダで作ってるような人は私よりずっと英語も技術も堪能なので上記ドキュメント読めちゃうしね) まあここまでということで。
(2009.06.26 追記)
試してみたところ、上のやりかた (LSB 関連のツールを APT で取る方法) だとパッケージの依存関係がうまく解決できなくてダメなようです。
RH 系のディストリ使えばよい気もしますが悔しいので別のやりかたを模索します。とりあえず TLF の LSB のディレクトリ から rpm でしこしこ入れるしかないのかなと。それは別エントリで。