独自のDebパッケージやaptリポジトリを作ってみよう

 DebianやUbuntuでは、Debパッケージという形式でソフトウェアが配布されているが、公式に配布されているパッケージを利用するだけでなく、パッケージを自分で作成して利用することも可能だ。本記事では独自のDebパッケージを作成する方法や、apt-getコマンドで独自に作成したパッケージをインストールできる独自リポジトリの作成方法を紹介する。

独自のDebパッケージを作るメリットとは

 DebianやUbuntuなどDebianから派生したディストリビューションでは、dpkgなどのツールを使ったパッケージ管理が行われている。これにより、Debパッケージ(拡張子は.deb)という形式で配布されているソフトウェアやファイルをインストールしたり、インストールしたソフトウェアのアップデートやアンインストールなどの管理を行える。

 一般的に使われているソフトウェアの多くは、各ディストリビューションによってそのDebパッケージが作成され配布されている。しかし、ユーザーが独自にDebパッケージを作成することも可能だ。DebianやUbuntuでは非常に多くのパッケージが提供されているため、独自のDebパッケージを作成する機会は多くない。しかし、提供されているパッケージのものよりも新しいバージョンのソフトウェアが必要な場合や、ソフトウェアを独自にカスタマイズしたい場合などもあるだろう。このような場合、ソフトウェアをソースコードからビルドしたのち、パッケージの形にしてインストールすることが推奨されている。パッケージを作成することでインストール/アンインストールやバージョン管理、依存性管理が容易になるほか、ほかのマシンへのインストールも簡単にできるようになるというメリットがあるからだ。

 Debパッケージの作成手順は複雑で、一からパッケージを作成するとなるとそれなりの知識や手間が必要だ。そのため、本記事ではDebパッケージ作成の第一歩として、既存のパッケージを修正して独自パッケージを作る方法と、設定ファイルやスクリプトなどをパッケージとして配布する方法について説明する。

既存のパッケージを修正して独自パッケージを作成する

 Debian系のディストリビューションでは、各パッケージについてバイナリパッケージだけでなく、そのパッケージをビルドするための「素材」である「ソースパッケージ」も同時に配布されるのが一般的だ。既存のパッケージをカスタマイズするには、このソースパッケージを利用するのが簡単だ。ソースパッケージは通常、表1の3つのファイルから構成される。

表1 ソースパッケージを構成するファイル
ファイルの説明拡張子
アップストリームのソースアーカイブ.orig.tar.gz
パッケージに関する設定情報ファイル.dsc
オリジナルソースコードに適用するためのパッチ.diff.gz

 なお、パッケージ化するソフトウェアについて、そのオリジナルの開発者らが配布しているものを「アップストリーム(上流)」と呼ぶ。つまり、「アップストリームのソースアーカイブ」というのは、オリジナルの開発者らが配布しているソースアーカイブのことを指す。

ソースパッケージの入手

 ソースパッケージを入手するには、「apt-get source <パッケージ名>」コマンドを実行すれば良い。たとえば、Apache HTTP Serverが含まれる「apache2」パッケージのソースパッケージを入手するには、以下のようにする。

$ apt-get source apache2

 コマンドを実行すると、リポジトリからソースパッケージがダウンロードされるとともに、コマンドを実行したディレクトリにパッケージ作成作業に使われる作業ディレクトリが作成され、ソースコードの展開などが行われる。以後、このディレクトリをソースディレクトリと呼ぶ。

 なお、apt-getコマンドを利用せずに、ミラーサイトなどから手動でソースパッケージを入手しても構わない。この場合、.orig.tar.gzファイルと.dscファイル、.diff.gzファイルを同じディレクトリに格納した上で以下のようにdpkg-sourceコマンドを実行することで、ソースディレクトリへのソースコードの展開などを行える。

$ dpkg-source -x <パッケージの.dscファイル>

パッケージのビルド

 apt-get sourceコマンドによって作成されたディレクトリ内には、debパッケージの作成に必要なすべての要素が含まれており、このディレクトリ内で「debuild」コマンドを実行することでバイナリパッケージを作成できる。なお、debuildコマンドは「devscripts」パッケージに含まれているので、実行の際はこのパッケージをインストールしておく必要がある。

# apt-get install devscripts

 また、パッケージによっては、ビルドの際に特定のパッケージやファイルなどを必要とする場合がある。このような依存パッケージは、「apt-get build-dep <ビルドするパッケージ名>」コマンドでインストールできる。たとえばapache2パッケージのビルド時に必要なパッケージをインストールするには、以下のようにする。

# apt-get build-dep apache2

 パッケージを作成するための準備が整ったら、ソースディレクトリ内で以下のようにdebuildコマンドを実行すると、バイナリパッケージの作成が実行される。

$ debuild -uc -us -b

 ここで、「-uc」および「-us」オプションはパッケージへの署名を省略するオプション、「-b」オプションはバイナリパッケージのみの生成を指定するオプションだ。このコマンドを実行すると、configureやmakeなどビルドに必要な処理が実行され、生成されたバイナリがソースディレクトリの親ディレクトリ内に作成される。

 なお、ビルド後にはdebianディレクトリ内に作業ファイルや中間ファイルが残されるが、これを削除するには以下のコマンドをソースディレクトリ内で実行すれば良い。

$ fakeroot debian/rules clean