How to create .deb package file for Ubuntu, Debian single binary
Ubuntuなどで使えるDebianパッケージファイル(.deb)の作成方法を記す。
自作プログラムなどを配布して他のUbuntuなどで簡単に使ってもらう方法がないか考えた。シェルスクリプトでコピーや削除を自動的に行うようにしていたが,どうしても端末からコマンドを入力する必要があり煩雑だと感じた。そこで,Ubuntuで一般的にパッケージのインストールで使われているDebianパッケージファイル(.debファイル)を作りたいと考えた。
うまく成功したので手順をここでまとめる。
前提
MoeCalcという独自パッケージを以下のディレクトリにインストールする。
/opt/MoeCalc
今回はソースコードは配布せずビルド済みのバイナリのみを配布する。
環境の用意
以下のコマンドでパッケージ化に必要なコマンド類をインストールする。
sudo apt-get install build-essential libgtk2.0-dev dpkg-dev debhelper devscripts fakeroot lintian dh-make
dh_makeでのパッケージひな形の作成に使用する名前やメールアドレスを環境変数に設定する。
export DEBEMAIL="e-mail@example.com"
export DEBFULLNAME="Ken SENOO"
メールアドレスは公開するつもりでないなら,メールアドレスの形式なら何を書いてもいい。
参考:Ubuntu Manpage: dh_make – prepare Debian packaging for an original source archive http://manpages.ubuntu.com/manpages/lucid/man8/dh_make.8.html
パッケージングディレクトリの用意
パッケージ化したいファイル一式を以下の命名規則のディレクトリに格納。
パッケージ名-バージョン番号
例:moecalc-v0.4
mkdir -p ~/tmp; cd ~/tmp
wget -nc https://github.com/lamsh/MoeCalc/releases/download/v0.4/moecalc-v0.4.tar.gz
tar zxf moecalc-v0.4.tar.gz
mv moecalc-v0.4 moecalc-0.4
パッケージひな形の作成
パッケージ化したいディレクトリに移動して以下のコマンドを入力。
cd moecalc-0.4
dh_make -n -s
-nオプション:origファイルの作成しない。
-sオプション:シングルバイナリのパッケージングを選択。このオプションを付けなければ,パッケージングの種類を確認してくる。
-cオプション:ライセンスのひな形を選択。既定はGPL3。
コマンドを入力すると以下のように確認してくるのでEnter
を入力。
Maintainer name : Ken SENOO Email-Address : e-mail@example.com Date : Sat, 02 May 2015 15:23:19 +0900 Package Name : moecalc Version : 0.4 License : gpl3 Type of Package : Single Hit <enter> to confirm:
不要ファイルの削除
dh_make
で作ったひな形の中には使わないファイルもたくさんあるので削除しておく。
rm debian/{*.ex,*.EX,README.Debian,README.source}
debian/controlの編集
control
ファイルでパッケージの各種情報を記入する。Ubuntu Sotfware Centerで表示されたりいろんなところでここの情報が参照される。重要なファイル。
cat debian/control
Source: moecalc Section: unknown Priority: optional Maintainer: Ken SENOO <e-mail@example.com> Build-Depends: debhelper (>= 8.0.0) Standards-Version: 3.9.4 Homepage: <insert the upstream URL, if relevant> #Vcs-Git: git://git.debian.org/collab-maint/moecalc.git #Vcs-Browser: http://git.debian.org/?p=collab-maint/moecalc.git;a=summary Package: moecalc Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: <insert up to 60 chars description> <insert long description, indented with spaces>修正すべき箇所は主に以下4箇所。
- Section:aptitudeなどでソートしたりするときに使う分類。困ったら
misc
と書いておく。 - Debian JP Project – Debian ポリシーマニュアル – Debian アーカイブ http://www.debian.or.jp/community/devel/debian-policy-ja/policy.ja.html/ch-archive.html#s-subsections
- Maintainer:メンテナーの名前とメールアドレスを記入。最初に環境変数で設定しているので変更は不要。
- Homepage:パッケージに関係のあるURLを記入。日本語はうまく認識されない。
- Description:ソフトウェアセンターなどで表示される説明文を記入。
今回は以下のように記入した。
Source: moecalc Section: misc Priority: optional Maintainer: Ken SENOO <e-mail@example.com> Build-Depends: debhelper (>= 8.0.0) Standards-Version: 3.9.4 Homepage: http://moebuntu.wiki.fc2.com/wiki/%E8%90%8C%E3%81%88%E9%9B%BB%E5%8D%93%E3%81%B7%E3%82%8D%E3%81%98%E3%81%87%E3%81%8F%E3%81%A8 #Vcs-Git: git://git.debian.org/collab-maint/moecalc.git #Vcs-Browser: http://git.debian.org/?p=collab-maint/moecalc.git;a=summary Package: moecalc Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: An open-source calculator for moebuntu. This package provides 'moecalc' command.
ソフトウェアセンターでは以下の図のようにcontrolファイルの中身を使って説明文を表示している。
debian/copyrignt
copyright
ファイルで著作権情報を記述。
cat debian/copyright
必要に応じて編集する。今回は変更していない。
debian/changelog
必要に応じてdebian/changelogファイルを修正する。今回は編集しなくても問題ない。
編集する際はdchコマンドを使えばうまくできる。
debian/install
今回はシングルバイナリの配布なので,Makefileは使わずにインストール先を個別に指定する。そのため,インストール先の指定ファイルの作成する。
具体的にはパッケージング中に実行されるdh_install
でインストールするファイルとそのインストール先を指定する。dh_install
の設定には以下の2ファイルを使う。
- install
- <package>.install
<package>にはパッケージ名(今回はmoecalc)が入る。
上記2ファイルの書式は以下のようにインストール元 インストール先
とする。
src/bar usr/bin
インストール先は/からの相対パスにする。
具体的には今回は以下のようにdebian/installファイルを作成した。
echo '
moecalc opt/MoeCalc moecalc.png opt/MoeCalc bg.jpg opt/MoeCalc moecalc.desktop usr/share/applications nw.pak opt/MoeCalc icudtl.dat opt/MoeCalc
' > debian/install
debian/links
アプリケーションで使用する画像の格納場所を/opt/MoeCalcにしている。一方システムのPATHとして認識されるために/usr/binにプログラムを配置したい。起動元プログラムの位置関係を維持するためにシンボリックを/usr/binに貼り付けることで対処する。
具体的にはパッケージング中に実行されるdh_link
でシンボリックリンクする元ファイルと貼り付け先を指定する。設定にはinstallと同じように以下の2ファイルを使う。
- links
- <package>.links
以下のようにしてdebian/linksファイルを作成した。
echo '
/opt/MoeCalc/moecalc usr/bin/moecalc
'> debian/links
debian/rules
パッケージングの時にdh_stirp
コマンドを実行してバイナリを圧縮している模様。そのため,既にupxコマンドで圧縮されたバイナリがあるとここで以下のエラーメッセージが表示される。
dpkg-buildpackage -us -uc
...................
dh_strip strip: error: the input file 'debian/moecalc/opt/MoeCalc/moecalc' has no sections dh_strip: strip --remove-section=.comment --remove-section=.note debian/moecalc/opt/MoeCalc/moecalc returned exit code 1 make: *** [binary] Error 29
このエラーが出ると,バイナリがうまくパッケージ化されない。これを防ぐため,upxで圧縮されたバイナリをdh_stripの対象から除外する。
debian/rulesの末尾に以下の内容を追記する(行頭はタブ)。
echo '
override_dh_strip: dh_strip --exclude moecalc
' >> debian/rules
参考:build – debuild creates link instead of copying binary file – Stack Overflow http://stackoverflow.com/questions/21142719/debuild-creates-link-instead-of-copying-binary-file
パッケージ化
ここまでできれば以下のコマンドでパッケージングを行う。
dpkg-buidpakcage -us -uc
-us:.dscファイルにGPGでサインしないオプション
-uc:.changesファイルにGPGでサインしないオプション
パッケージングを行うコマンドはこの他にもいくつかある。- fakeroot
- debuild
内部でdpkg-buidpackageを使っているのでdpkg-buildpackageを使えばよい。このほうがエラーメッセージがなどが表示されてわかりやすい。
パッケージングは以下のディレクトリに仮想的なインストールディレクトリを作り,そこにパッケージを配置してパッケージファイルを作成している模様。
debian/moecalc/
|--DEBIAN/
|--opt/
+--usr/
パッケージングがうまくいっているかはここにうまくファイルが格納されているかでも確認できる。パッケージ化が成功するとパッケージ化ディレクトリの外にパッケージファイル類が生成される。
ls ../
moecalc-0.4/ moecalc_0.4.tar.gz moecalc_0.4_amd64.deb moecalc-v0.4.tar.gz moecalc_0.4_amd64.build moecalc_0.4.dsc moecalc_0.4_amd64.changes
moecalc_0.4_amd64.deb
ファイルがパッケージファイルとなる。
このファイルを右クリック▷Ubuntuソフトウェアセンターで開くことでインストールできる。アンインストールは他のパッケージと同様にUbuntuソフトウェアセンターから検索してアンインストールできる。
これでひとまずバイナリファイルのパッケージ化がうまくできた。改善点としてはPPAへの登録方法やスクリーンショットの登録方法などがあるだろう。今後必要に応じて調査していきたい。
パッケージ化にあたって以下の情報が非常に参考になった。
参考情報:- 独学Linux : シンプルなソースコードからdebパッケージを作成する方法 http://blog.livedoor.jp/vine_user/archives/51940442.html
- Rodin, Josip & Aoki, Osamu (2014) : Debian 新メンテナーガイド. https://www.debian.org/doc/manuals/maint-guide/.