debian パッケージの作成方法
ここでは, Linux ディストリビューションの1つである debian におけるソフトウェアパッケージ(以下, deb パッケージ)を作成する方法を示す.
単純に, 自身が開発している数値解析ライブラリを deb パッケージ化してみたくなっただけである.
大前提
ここでは, ソースからエラーなくコンパイルできるソフトウェア, ライブラリがすでに存在しているという前提で話を進める.
今回は辻野謹製の Fortran 90 用数値解析ライブラリ STPK のソースを用いて deb パッケージのテスト作成を行う.
本文は 第一参考資料 に則って作成している.
以下, "$" マークは端末上でのコマンド操作, "#" マークはコメントを表す.
事前準備
環境変数の設定
$ export DEBFULLNAME="Satoki TSUJINO" # パッケージメンテナの名前 $ export DEBMAIL=xxxx@xxxxxxxxxxx # メンテナのメールアドレス
最低限パッケージの導入
build-essential
$ sudo apt-get install build-essential
- libc6-dev, g++, make, dpkg-dev が導入される.
- apt-cache show で build-essential を見ると, deb パッケージ作成に必要不可欠なパッケージらしい.
dh_make
$ sudo apt-get install dh-make
- man によると, 通常のソースファイルパッケージを deb パッケージ用のフォーマットに変換するコマンドらしい.
fakeroot
$ sudo apt-get install fakeroot
devscripts
$ sudo apt-get install devscripts
pbuilder
$ sudo apt-get install pbuilder
CDBS
$ sudo apt-get install cdbs
deb パッケージ化するソフトウェア・ライブラリのソース取得
ここでは, STPK ライブラリ (Ver.0.9.5.0, 上記のサイトから取得可能) のソースを用いる.
$ tar zxvf libstpk-0.9.5.0.tar.gz $ cd libstpk-0.9.5.0 $ export FC=ifort $ export FCFLAGS='-assume byterecl -convert big_endian' $ ./configure $ make
このように, make まで通るかを確認.
注意もし, 依存パッケージ等が必要な場合は適宜インストールし, configure をエラーなく終わる環境にしておく. その際, 導入したパッケージを記録しておく.
パッケージの作成
dh_make の実行
$ dh_make --createorig --library Maintainer name : Satoki TSUJINO Email-Address : satoki@unknown Date : Thu, 10 Jan 2013 12:32:09 +0900 Package Name : libstpk Version : 0.9.5.0 License : blank Type of Package : Library Hit <enter> to confirm: # ここで Enter. # [--createorig] : オリジナルのソースファイルを作成 # [-c <license>] : どのライセンスか(*). # [--library] : ソースがライブラリである. # [-b] : CDBS を使用.
*STPK ライブラリはまだライセンスを確定していないため, このオプションは今回用いない. dh_make の man を見ると, ない場合はライセンスの部分がすべて空白で処理されるらしいので問題ないであろう.
実行後, カレントディレクトリに debian というディレクトリが生成されている.
$ ls README.Debian emacsen-remove.ex libstpk1.dirs preinst.ex README.source emacsen-startup.ex libstpk1.install prerm.ex changelog init.d.ex manpage.1.ex rules compat libstpk-dev.dirs manpage.sgml.ex shlibs.local.ex control libstpk-dev.install manpage.xml.ex source copyright libstpk.cron.d.ex menu.ex watch.ex docs libstpk.default.ex postinst.ex emacsen-install.ex libstpk.doc-base.EX postrm.ex
.ex, .EX を削除.
$ rm -f debian/*.ex debian/*.EX
ライブラリのテストインストール
$ fakeroot debian/rules install $ tree debian/libstpk debian/libstpk |-- DEBIAN `-- usr |-- include | |-- alge_solv.mod ------------ snip ------------ | `-- typhoon_analy.mod |-- lib | `-- libstpk.a `-- share `-- doc `-- libstpk |-- README.Debian |-- TODO |-- changelog.Debian.gz `-- copyright
control の編集
必要最低限
- Maintainer
- なぜか, 環境変数設定でメールアドレスを指定したにも関わらずドメイン名が表記されず "unknown" となっていたので編集.
- Package
- 用意していない dev 版まで自動的に記載されていたので, libstpk-dev のパラグラフはコメントアウトする.
以下, 編集前後の control
- Maintainer
#Vcs-Git: git://git.debian.org/collab-maint/libstpk.git #Vcs-Browser: http://git.debian.org/?p=collab-maint/libstpk.git;a=summary -#Package: libstpk-dev -#Section: libdevel -#Architecture: any -#Depends: libstpkBROKEN (= ${binary:Version}) -#Description: <insert up to 60 chars description> -# <insert long description, indented with spaces> +Package: libstpk-dev +Section: libdevel +Architecture: any +Depends: libstpkBROKEN (= ${binary:Version}) +Description: <insert up to 60 chars description> + <insert long description, indented with spaces> -#Package: libstpkBROKEN -Package: libstpk +Package: libstpkBROKEN Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}
- オプション
- Homepage : STPK のダウンロードページを表記
copyright の編集
- 必要最低限
- テンプレートで置き換えが要求されている部分.
changelog の編集
- 必要最低限
- ディストリビューションやリリースバージョン.
- ディストリビューションはビルドした計算機のものを記載.
- ディストリビューションやリリースバージョン.
パッケージポリシーのチェック
$ debuild -rfakeroot -uc -us
以上, debian/ の 3 つの編集したファイルが deb パッケージのポリシーに違反していないかをチェックする.
もし, lintian のチェックで "E" 表記が出た場合は, これを解消すること. エラーの内容は検索すればヒットするので, エラー詳細はヒット先を参照すること.
ビルドテスト
pbuilder の設定
$ sudo pbuilder --create distribution ディストリビューションの名前 $ ls /var/cache/pbuilder/base.tgz /var/cache/pbuilder/base.tgz $ cd ../ # 作業ディレクトリの親にファイルが複数生成される. $ sudo pbuilder --build \ --distribution ディストリビューション名 \ --basetgz /var/cache/pbuilder/base.tgz \ libstpk_0.9.5.0.dsc
ここでエラーがでなければ作業ディレクトリの親に存在する拡張子 .deb がビルドテストを通った deb パッケージである.