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

#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 パッケージである.

参考資料


1 つ上に戻る

メインページに戻る