Debianパッケージを自作してみる
ふとDebianパッケージを自作してみたくなったので、パッケージビルドをやってみた話。
今回はpng2aaのソースをビルドしてDebianパッケージにしてみる。
開発環境構築
いつもの。
$ sudo apt-get install build-essential
これでgccとかmakeとかのDebianパッケージ関係なくプログラミングで使う開発環境をインストールできる。このパッケージは配布したいパッケージの依存関係に含めなくてよい。
$ sudo apt-get install devscripts
これはDebianパッケージの作成に必要なツールをインストールできる。debuildとかそのへん。
$ sudo apt-get install dh_make
dh_makeは普通のソースをDebianパッケージ用のフォーマットに変形してくれる。
ソースをダウンロード
$ mkdir ~/png2aa
$ cd ~/png2aa
適当にワークディレクトリを作って、移動する。
$ wget https://github.com/shumon84/png2aa/archive/v1.2.tar.gz
パッケージをビルドしたいプログラムのソースを自分のリポジトリからダウンロードしておく。
もし、Debianパッケージを作ってみたいけど、特に配布したい自作プログラムもない場合は、適当に公式パッケージのソースをダウンロードしてきてパッケージビルドまでやってみると良いかもしれない。
$ apt-get source unzip
例として、unzipのソースをダウンロードするにはこうする。
もしsourceができない場合は、deb-srcがコメントアウトされていると思うので、/etc/apt/source.listを編集。
最近のDebian系のディストリビューションは初期設定でsourceができないようになっていることが多いみたい。
ビルドにはunzipの関連パッケージも必要なので、それもダウンロードする。
$ sudo apt-get build-dep unzip
パッケージをビルドする
まずはダウンロードしてきたソースコードを<package_name>_<upstream_version>.orig.tar.gzの形式になるように名前を変更する。
$ mv v1.2.tar.gz png2aa_1.2.orig.tar.gz
例えば今回は配布したいパッケージ名が"png2aa"でバージョンが"1.2"なので、"png2aa_1.2.orig.tar.gz"となるように変更した。
$ tar zxvf png2aa_1.2.orig.tar.gz
ソースをワークディレクトリ上に展開する。
$ ls -F png2aa-1.2/ png2aa_1.2.orig.tar.gz
となっていればOK。
展開したディレクトリ上でdh_makeを実行します。
$ cd png2aa_1.2/
$ dh_make
パッケージの種類を聞かれるますが、png2aaはsingleアプリケーションなので、sをタイプします。ライブラリの場合はlをタイプしてください。
これでpng2aa-1.2/debian/が生成されます。
makeが通るか試してみます。
$ debian/rules build
もしmakeがこけるなら、debian/rulesを編集してみてください(中身はただのMakefileなので簡単に編集できます)
次は、いよいよDebianパッケージをビルドします
$ sudo dpkg-buildpackage -us -uc
これでパッケージができあがります。簡単だね。
一つ上の階層に.debファイルがあるはずなので確認してみてください。
これをローカルにインストールしたい場合は
$ sudo debi
これでパッケージを追加できるので、
$ sudo apt-get install png2aa
でインストールできるようになります。
ここからさらにDebianにパッケージをアップロードしたい場合は、dputとかをする必要がありますが、色々さらに設定しないといけないみたいです。
この記事は、以下の情報を元に書かれています。
Ubuntu 16.04: apt sourceでソースコードをダウンロードする - Narrow Escape
debパッケージ作成方法をステップバイステップでまとめました
独学Linux : シンプルなソースコードからdebパッケージを作成する方法
debianパッケージの作り方 - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
Debian 新メンテナーガイドとDebianパッケージングチュートリアルを読むとDebianパッケージについて大体理解できると思う。