おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

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 はいるかどうかわかんないですが プリンタドライバの場合は rpmdeb 両方作らないといけないので必須になります。

プリンタドライバパッケージ作成用の追加設定

ほとんどの方には関心がない内容でしょうが、ブログのタイトルがタイトルなんでお付き合いくださいナ。

まあ結論から言ってしまえば以下のようにします。

(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 でしこしこ入れるしかないのかなと。それは別エントリで。

*1:それが LSB のゴールなんだからあたりまえだ。

*2:ホントは私は aptitude 派なので chroot の環境作ったときに aptitude もいれときました。ので apt-get じゃなくて aptitude でやってます。