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/.

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です