それほど機会は無いと思うが、debパッケージはもちろん個人でも作ることができる。
難度が高いので、初心者の方は飛ばした方が良いが、知っておきたいという方もいるだろう。このページではdebパッケージの作り方についてまとめてみた。参考にしてほしい。
rpmパッケージの作り方は下記で解説したのでこちらもご参考に。
目次
debパッケージを作成する意味
「tar.gz」などのソースでのソフトウェアパッケージ管理ができないというわけではない。
しかし実際のところ、ディストリビューション毎に用意されたパッケージ管理方法にそって管理したほうがクリーンにシステムを保つことが出来る。
「configure」「make」「make install」はLinuxの世界共通であり、パッケージを作成する段階でも実行される。「ならば共通的な方法でよいのでは?」と思うかもしれないが、実際に触れてみると、まれに「インストールは出来るがアンインストール方法が提供されていない」というパッケージがある。
その場合手動でインストールしたファイルを全て削除することになる。このように雑な管理をしなければならない場合に遭遇するので、管理コストを考えてもディストリビューション毎のパッケージ管理に触れておくことは有意義だ。
debianの場合「ないものはない」と言えるようなパッケージの品揃えをしているので、実際に一からパッケージを作成する場面は少ないだろう。しかしパッケージ作成の全体の流れを把握しておいた方が保守管理の役に立つだろう。
すでにあるパッケージをビルドしてみる
編集を加えない単純なリビルドは難しいことはない、大まかな流れをつかむために練習がてらやってみよう。保守の全体の流れが掴めるはずだ。
基礎開発環境をととのえる
まずは環境を整える。
これは最初だけ実行すればよい、開発するための環境が整えば以降はその環境を使用してゆけばよい。
基礎開発パッケージをインストールする。これにより「gcc」や「make」といったツール郡がインストールされる。
# apt-get install build-essential
Debian固有のパッケージ作成ツール郡をインストールする。「debuild」コマンドなどはこのパッケージのなかに含まれる。
# apt-get install devscripts
ここまでで基礎的な開発環境の準備はととのった。次は実際にビルドしたいソースをもってくることになる。
ソース入手からビルドまで
とりあえず、パッケージをビルドするための作業台となるディレクトリを作成、移動する。
$ mkdir mypkg
$ cd mypkg
ビルドしたいパッケージのソースコードとパッチ郡一式をapt-getでダウンロードしてくる。
$ apt-get source unzip
ダウンロードされた物を確認
$ ls
もってきたソースコードをビルドするための関連パッケージをすべてインストールする。
# apt-get build-dep unzip
完了したら、展開されている、ソースコードのディレクトリへ移動する。
$ cd unzip-6.0
debuildコマンドを発行し、実際にパッケージをビルドする。「-uc」「-us」パッケージへの署名に関してのオプションだ。今回は署名を省略するのでこのオプション使用する。「-b」でバイナリパッケージを作成するという意味だ。
$ debuild -uc -us -b
バイナリパッケージが作成されているか確認する。
$ ls ../
パッケージ作成時につくられた一時ファイルを削除する。
$ fakeroot debian/rules clean
ダウンロードしてきたファイルと「debian」ディレクトリを確認してみる
ダウンロードしてきたファイルを確認しよう
hoge.debian.tar.xzこれらにはDebian固有のファイル郡がおさまっている。パッチなどだ。
unzip_6.0-16+deb8u2.debian.tar.xz
パッケージに関して設定情報ファイルがおさめられている。
unzip_6.0-16+deb8u2.dsc
大本のオリジナルなアーカイブが納められている。
unzip_6.0.orig.tar.gz
Debian固有のものを含め全てのものが展開されているソースディレクトリ
unzip-6.0
ソースディレクトリ内に「debian」というディレクトリが存在するのがわかると思う。このなかにパッケージ作成のための、「レシピ」が収まっている。
rules
このファイルの中身はmakeスクリプトと同じ書式で記述される
ターゲットは以下のようになっている。
clean | ビルド時に生成されるファイルをクリアする |
build | ソースコードをビルドする |
build-arch | アーキテクチャに依存するビルドをおこなう |
build-indep | アーキテクチャに依存しないビルドをおこなう |
install | ビルドしたバイナリや作業用ディレクトリにインストールする |
binary | バイナリパッケージ作成 |
binary-arch | アーキテクチャに依存するバイナリパッケージ作成 |
binary-indep | アーキテクチャに依存しないバイナリパッケージ作成 |
get-orig-source | オリジナルの最新ソースアーカイブをダウンロード |
patch | パッチを実行する |
control
このファイルにはパッケージの情報とその他説明が記述される。ざっと見てみよう。
changelog
変更履歴が記述される。以下のようになっている。
copyrightもしくはcopyright.in
パッケージの著作権情報が記述される。
模擬的なdebパッケージを作成してみる
記述を簡略化するためのツールとして「cdbs」をインストールする。
# apt-get install cdbs
作業用ディレクトリの作成
$ mkdir testdpkg-sample
作業ディレクトリに移動
$ cd testdpkg-sample
インストール後にテストするための簡単なスクリプト作成
$ touch hello-deb.sh
$ echo "echo hello" > hello-deb.sh
debianディレクトリの作成
$ mkdir debian
$ cd debian
各種ファイルの作成
$ touch rules control changelog copyright
「control」ファイル記述
$ vi control
1 2 3 4 5 6 7 8 |
Source: testdpkg-sample Maintainer: Ken <sample@example.com> Build-Depends: cdbs, debhelper Standards-Version: 0.1 Package: testdpkg-sample Architecture: all Description: sample |
「rules」ファイル記述
$ vi rules
1 2 3 4 5 6 7 |
#!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk install/testdpkg-sample:: install -pd $(DEB_DESTDIR)/usr/bin install -pm 755 hello-deb.sh $(DEB_DESTDIR)/usr/bin |
「changelog」ファイル記述
$ vi changelog
1 2 3 4 5 |
testdpkg-sample (0.1-1) unstable; urgency=low * initial release -- Ken <sample@sample.com> Sat, 8 Oct 2016 00:00:00 +0900 |
パッケージを作成
$ debuild -us -uc
途中質問されると思うが「y」で問題ない。
ファイルの確認
$ ls ../testdpkg-sample_0.1-1_all.deb
無事にパッケージが作成されるはずだ。
インストールとアンインストールをしてみる
# dpkg -i testdpkg-sample_0.1-1_all.deb
$ hello-deb
出力結果
1 |
hello |
# dpkg -r testdpkg-sample
rpmとくらべると少々複雑?
「rpmとくらべると少々複雑」かもしれないが、rpmのspecファイルが「rules」「control」「changelog」「copyright」に分割されているだけであると考えると気が楽になるだろう。
実際rpmパッケージもdebパッケージも「レシピを元にパッケージを生成する」という部分は共通だ。
まとめ
このページではdebパッケージの作り方についてまとめてきた。複雑な部分もあるので初心者の方はざっくりと読むだけでも十分だ。
「debian系でパッケージを作りたい」と思った時に参考にしていただければと思う。
コメント