これまでシンプルなソースコードは、端末で個別にコンパイルしていましたが、それだと通常のパッケージと同じような管理ができません。そこで、Ubuntuの場合、これをdebパッケージにしておけば、APTの管理下に置くことで、ソフトウェアセンターでのインストールや削除が可能になります。
今回は、ずっと以前に作ったOpenGLのサンプルプログラム(C言語で書かれた単体のソースコード)を使ってdebパッケージを作成してみました。
なお、32bit版のUbuntu 12.04(Precise)のみに対応しています。
自作のパッケージをインストールした後に、ソフトウェア・センターでパッケージ情報を表示させたところ。
今回作成したプログラムの実行場面。
ちなみに、debパッケージ化に伴って準備したパッケージを利用して、LaunchpadのPPAで公開しています。(PPAで公開する方法については、今回は割愛しますが、水野さんの記事が参考になります)
[PPAで公開したプログラムのインストール方法]
$ sudo add-apt-repository ppa:vineuser/ppa
$ sudo apt-get update
$ sudo apt-get install glgravity
[PPAで公開したプログラムの実行方法]
端末上で次のコマンドを実行します。マウスでグリグリ遊んでみてください。
$ GLgravity
今回のサンプルはシンプルなパッケージですが、debパッケージの基本的な作り方さえわかれば、Pythonなどを多用した複雑なプログラムに応用する道も見えてくるはずです。
$ sudo apt-get install build-essential libgtk2.0-dev \
dpkg-dev debhelper devscripts fakeroot lintian dh-make
また、別途、作成するプログラムに必要な開発パッケージもインストールしておきます。今回、僕が利用したOpenGLのサンプルプログラムの場合、freeglut3-devというパッケージが必要でした。
$ mkdir -p ~/build/sample-0.1
sample-0.1ディレクトリの中に、パッケージ化したいプログラムのソースコードとMakefileを保存します。Makefileには、installとcleanのターゲットをそれぞれ指定しておく必要があります。
以降の作業では、端末で「~/build/sample-0.1」に移動して行います。
$ cd ~/build/sample-0.1
$ dh_make -n -s -e hogehoge@gmail.com
「hogehoge@gmail.com」の部分は、後でPPAに追加する場合、PPAに登録したGPGキーに対応したものを記載しておきます。公開せず、個人的に利用するだけであれば、メールアドレスの形式なら何でも構いません。
debianディレクトリの中には、今回は必要としないファイルがありますので、不要なファイルを削除しておきましょう。なお、変更しないファイルの中にも消してはいけないものがあるので、注意が必要です。
$ rm debian/*.ex debian/*.EX debian/README.Debian debian/README.source
debian/controlの編集
debianディレクトリの中にある「control」というファイルは、作成するプログラムのコンパイルや実行の際に必要とされる依存パッケージを指定したりする、非常に重要なファイルです。プログラムの概略を記述する部分もあります。
$ nano debian/control
debian/copyrightの編集
著作権情報を記述します。デフォルトでは、GPL3が適用されます。
$ nano debian/copyright
インストール先を指定する
(パッケージ名).installという名称のファイルを作成し、次のような書式でインストール後にどのファイルをどこに配置するかを指定します。
[例: glgravity.install ]
GLgravity usr/bin
(例の意味)
パッケージ名:glgravity → ファイル名を「glgravity.install」とする。
ファイル配置:コンパイル後のGLgravityというバイナリ実行ファイルを/usr/bin/GLgravityに配置する。
配置先の指定ディレクトリは、「/usr/bin」のように絶対パスにせず、「usr/bin」のようにルートディレクトリからの相対パスで指定しておく必要があります。/usr/local以下には配置できないようです。
なお、ここで指定していませんが、copyrightとchangelog.Debian.gzというファイルが、デフォルトで/usr/share/doc/(パッケージ名)に配置されます。
$ dch -v (新たなバージョン番号)
自動的に、debian/changelog.dchの編集画面に切り替わるので、内容を編集して保存します。
dpkg-buildpackageとfakerootの場合は、パッケージの最上位のディレクトリ(最初に作成したsample-0.1など)で実行します。
dpkg-buildpackageを利用
$ dpkg-buildpackage -us -uc
fakerootを利用
$ fakeroot debian/rules binary
これで、作業ディレクトリの1つ上のディレクトリにdebパッケージが作成されるとともに、debian/(パッケージ名)/usr/以下に実際にインストールされるファイル群が配置されます。なお、作業ディレクトリの1つ上のディレクトリには、debパッケージだけでなく、下記のようなファイルが作成されます。
glgravity_0.1-ppa1_i386.changes
glgravity_0.1-ppa1.dsc
glgravity_0.1-ppa1_i386.deb
glgravity_0.1-ppa1.tar.gz
glgravity_0.1-ppa1.dscは、pbuilderというコマンドを使用する際に用いることができます。pbuilderは、LaunchadのPPAでも利用されているので、PPAできちんとビルドできるかどうかを事前に確かめるのに便利です。なお、pbuilderを実行するには、/var/cache内を利用するため、sudoが必要です。
$ sudo /usr/sbin/pbuilder create --distribution precise
(preciseの部分は、ubuntuのバージョンを指定)
$ sudo /usr/sbin/pbuilder glgravity_0.1-ppa1.dsc
(glgravity_0.1-ppa1.dscの部分は、該当するdscファイルを指定)
pbuilderでのビルドが成功すると、/var/cache/pbuilder/result 内に、fakerootなどの実行時と同様なファイルが作成されます。
GPGキーでの署名やPPAへのアップロード手順などを除けば、今回試したのは以上です。
できるだけ一般的な記載にしようと試みましたが、一部に今回特有のファイル名など混在し、かつ、間違いや説明不足なところもあるかも知れません。修正が必要なところは、時間の許す限り、修正していこうと思います。
ツイート
今回は、ずっと以前に作ったOpenGLのサンプルプログラム(C言語で書かれた単体のソースコード)を使ってdebパッケージを作成してみました。
なお、32bit版のUbuntu 12.04(Precise)のみに対応しています。
自作のパッケージをインストールした後に、ソフトウェア・センターでパッケージ情報を表示させたところ。
今回作成したプログラムの実行場面。
ちなみに、debパッケージ化に伴って準備したパッケージを利用して、LaunchpadのPPAで公開しています。(PPAで公開する方法については、今回は割愛しますが、水野さんの記事が参考になります)
[PPAで公開したプログラムのインストール方法]
$ sudo add-apt-repository ppa:vineuser/ppa
$ sudo apt-get update
$ sudo apt-get install glgravity
[PPAで公開したプログラムの実行方法]
端末上で次のコマンドを実行します。マウスでグリグリ遊んでみてください。
$ GLgravity
今回のサンプルはシンプルなパッケージですが、debパッケージの基本的な作り方さえわかれば、Pythonなどを多用した複雑なプログラムに応用する道も見えてくるはずです。
開発環境の導入
まず、debパッケージの作成に必要なものをインストールしておきましょう。$ sudo apt-get install build-essential libgtk2.0-dev \
dpkg-dev debhelper devscripts fakeroot lintian dh-make
また、別途、作成するプログラムに必要な開発パッケージもインストールしておきます。今回、僕が利用したOpenGLのサンプルプログラムの場合、freeglut3-devというパッケージが必要でした。
ソースファイルの準備
ホームディレクトリ内に作業ディレクトリを準備します。ソースファイルを格納するディレクトリは、「パッケージ名-バージョン番号」という形式で作る必要があります。ここでは、~/buildというディレクトリの中にsampleというパッケージを作成することを前提としました。$ mkdir -p ~/build/sample-0.1
sample-0.1ディレクトリの中に、パッケージ化したいプログラムのソースコードとMakefileを保存します。Makefileには、installとcleanのターゲットをそれぞれ指定しておく必要があります。
以降の作業では、端末で「~/build/sample-0.1」に移動して行います。
$ cd ~/build/sample-0.1
パッケージ構成の雛形を作成する
次のコマンドを実行することで、debianというディレクトリが作成され、debパッケージに必要なファイル一式が作成されます。$ dh_make -n -s -e hogehoge@gmail.com
「hogehoge@gmail.com」の部分は、後でPPAに追加する場合、PPAに登録したGPGキーに対応したものを記載しておきます。公開せず、個人的に利用するだけであれば、メールアドレスの形式なら何でも構いません。
debianディレクトリ内の調整
不要ファイルの削除debianディレクトリの中には、今回は必要としないファイルがありますので、不要なファイルを削除しておきましょう。なお、変更しないファイルの中にも消してはいけないものがあるので、注意が必要です。
$ rm debian/*.ex debian/*.EX debian/README.Debian debian/README.source
debian/controlの編集
debianディレクトリの中にある「control」というファイルは、作成するプログラムのコンパイルや実行の際に必要とされる依存パッケージを指定したりする、非常に重要なファイルです。プログラムの概略を記述する部分もあります。
$ nano debian/control
debian/copyrightの編集
著作権情報を記述します。デフォルトでは、GPL3が適用されます。
$ nano debian/copyright
インストール先を指定する
(パッケージ名).installという名称のファイルを作成し、次のような書式でインストール後にどのファイルをどこに配置するかを指定します。
[例: glgravity.install ]
GLgravity usr/bin
(例の意味)
パッケージ名:glgravity → ファイル名を「glgravity.install」とする。
ファイル配置:コンパイル後のGLgravityというバイナリ実行ファイルを/usr/bin/GLgravityに配置する。
配置先の指定ディレクトリは、「/usr/bin」のように絶対パスにせず、「usr/bin」のようにルートディレクトリからの相対パスで指定しておく必要があります。/usr/local以下には配置できないようです。
なお、ここで指定していませんが、copyrightとchangelog.Debian.gzというファイルが、デフォルトで/usr/share/doc/(パッケージ名)に配置されます。
パッケージ・バージョンを変更する
パッケージのバージョンを変更するには、dchというコマンドを使って、changelog.dchの内容を編集します。変更を行ったユーザ名とメールアドレスは適切に書き換えておきましょう。$ dch -v (新たなバージョン番号)
自動的に、debian/changelog.dchの編集画面に切り替わるので、内容を編集して保存します。
debパッケージを作成する
debパッケージの作成方法には、複数の方法があります。dpkg-buildpackageとfakerootの場合は、パッケージの最上位のディレクトリ(最初に作成したsample-0.1など)で実行します。
dpkg-buildpackageを利用
$ dpkg-buildpackage -us -uc
fakerootを利用
$ fakeroot debian/rules binary
これで、作業ディレクトリの1つ上のディレクトリにdebパッケージが作成されるとともに、debian/(パッケージ名)/usr/以下に実際にインストールされるファイル群が配置されます。なお、作業ディレクトリの1つ上のディレクトリには、debパッケージだけでなく、下記のようなファイルが作成されます。
glgravity_0.1-ppa1_i386.changes
glgravity_0.1-ppa1.dsc
glgravity_0.1-ppa1_i386.deb
glgravity_0.1-ppa1.tar.gz
glgravity_0.1-ppa1.dscは、pbuilderというコマンドを使用する際に用いることができます。pbuilderは、LaunchadのPPAでも利用されているので、PPAできちんとビルドできるかどうかを事前に確かめるのに便利です。なお、pbuilderを実行するには、/var/cache内を利用するため、sudoが必要です。
$ sudo /usr/sbin/pbuilder create --distribution precise
(preciseの部分は、ubuntuのバージョンを指定)
$ sudo /usr/sbin/pbuilder glgravity_0.1-ppa1.dsc
(glgravity_0.1-ppa1.dscの部分は、該当するdscファイルを指定)
pbuilderでのビルドが成功すると、/var/cache/pbuilder/result 内に、fakerootなどの実行時と同様なファイルが作成されます。
GPGキーでの署名やPPAへのアップロード手順などを除けば、今回試したのは以上です。
できるだけ一般的な記載にしようと試みましたが、一部に今回特有のファイル名など混在し、かつ、間違いや説明不足なところもあるかも知れません。修正が必要なところは、時間の許す限り、修正していこうと思います。
ツイート