Ubuntu Weekly Recipe

第152回 パッケージをビルドしてみる

この記事を読むのに必要な時間:およそ 3 分

寒い冬にはパッケージビルド!?

ようやく冬らしい季節なってきました。みなさんの部屋には,もちろん暖房器具があるでしょう。また,部屋の中にはきっと,たくさんのPCもあるのではないかと思います。筆者の部屋にも,数えるとうんざりするぐらいたくさんあります。しかしながら,PCは熱を出すくせに熱には弱く,排熱をしないと壊れてしまいます。

せっかくPCがたくさんあるのなら,これで暖を取るのもアリではないでしょうか。とはいえ,最近のPCは以前よりも発熱量は減っています。連続して発熱させるためには,CPUを100%(マルチコアであれば,それ以上)で稼動させるパッケージのビルドが最適なのです。

……と小咄はこのぐらいにして,今回はパッケージをビルドする方法を紹介します。

パッケージのビルドとは

パッケージのビルドというのは,ソースコードからバイナリパッケージを生成することだと思ってください。⁠オープンソース・ソフトウェア」は誰でもビルドできるので,せっかく使っているのであれば,パッケージのビルドをやってみない手はありません。ただし,注意点もあるので,それは最後にまとめます。

手法はそれこそたくさんあってとても全部は紹介しきれないため,ソースパッケージが存在する場合と,ソースから一発でパッケージが生成できる場合を紹介します。もちろんここで紹介しているものはどれも簡単にできるものばかりなので,ここに当てはまらないパターンのほうが多いかもしれませんが,そのあたりは試行錯誤してみてください。

なお,ターゲットとするUbuntuのバージョンは10.10であり,操作はすべてコマンドラインで行います。

準備

パッケージをビルドするのに最低限必要なパッケージをインストールします。

$ sudo apt-get install build-essential devscripts

あとは,適当なフォルダを作成し,そこでビルドを行うと簡単でしょう。

すでにソースパッケージがある場合

今更いうまでもなく,Ubuntuもリリース以後は原則としてバージョンアップは行われません。そのため,ピンポイントで最新のパッケージを使いたい場合があると思います。一番簡単なのは,すでにソースパッケージがあり,これをビルドすることです。例えばUbuntu 10.10のリリース後は,11.04に相当するものの開発が開始され,新しいパッケージはこちらに入ります。Debianの開発版(sid)からもらってくるのもありでしょう。

どのような新しいパッケージが開発版に入ったかは,メーリングリストで簡単に調べることができます。Ubuntu 11.04相当だとNatty-changesDebianだとdebian-devel-changesです。ただ,これらのメール全部に目を通すのは大変なので,Ubuntu Packages SearchDebianのパッケージ検索で探すのが簡単でしょう。

例えばSylpheedを例にすると,Ubuntu 10.10には3.1.0 Beta2が入っていますが,Debian experimentalには3.1.0 Beta4が入っています。 Ubuntuには,Debianにはない独自の修正が入っていて,これがないと正しく動作しない場合もあるため,Debianにあるパッケージを単純にUbuntuに持ってこられるわけではありませんが,Sylpheedに限るとその問題はなく,またBeta4というバージョンでexperimentalに入っているので不安定※1と思われがちですが,これもSylpheedに限るとそうでもありません※2)⁠

※1
ここでの不安定は,使用中に落ちるとか,致命的なものを指します。
※2
こういう情報をどこから収集するのかというの話はありますが,これは各自で努力するしかなさそうです。

ここでは,DebianのリポジトリからSylpheed 3.1.0 Beta4のパッケージを取得することにします。

$ dget -u http://ftp.jp.debian.org/debian/pool/main/s/sylpheed/sylpheed_3.1.0~beta4-1.dsc

これだけです。dgetコマンドでdscファイルを指定すると,必要なソースパッケージを取得することができます。Sylpheed以外の場合,このURLから予測できるのではないかと思います。例えばRhythmboxは,pool/main/r/rhythmboxにあります。Ubuntuでもディレクトリの構成はほぼ同じですが,mainのほかにuniverseやmultiverseがあるのが注意点です。例えばsylpheedはuniverseなので,pool/universe/s/sylpheedにあります。dgetのオプションの-uは,署名を検査できなくても展開するという意味です。

次に,ビルドに必要なパッケージをインストールします。

$  sudo apt-get build-dep sylpheed

これはあくまで今リポジトリにあるSylpheedのビルドに必要なものであり,バージョンが新しくなると当然のことながら必要なものは増減します。足りない場合,たいていはとあるファイルがないということが多いので,前出のパッケージ検索でそのファイル名を検索すると出てくることが多いです。したがって,そのファイルが含まれているパッケージをインストールすると解決しますが,リポジトリにあるものよりも新しいバージョンが要求される場合は,あらかじめそのパッケージを用意する必要があります。ビルドに必要なものがあまりに多いと,諦めたほうがいいでしょう。筆者もそうしています。

ひととおりインストールが終わったら,実際にビルドを開始します。

$ cd sylpheed-3.1.0~beta4/
$ dpkg-buildpackage -r -uc -b

dpkg-buildpackageコマンドを使用しますが,-bはバイナリのみ,-ucは署名をしないというオプションです。-rは説明が長くなるので省略しますが,ユーザ権限でビルドするのに必要なものだと思ってください。-j3などのオプションを付けるとビルドが速くなりますが,これもやはり省略します。このオプションを使用すると,ものによってはビルドに失敗することもあるので,使用する場合はよく理解してからにしたほうがいいでしょう。

次のようなメッセージが出力されれば,無事に成功しています。

dpkg-deb: `../sylpheed_3.1.0~beta4-1_i386.deb' にパッケージ `sylpheed' を構築しています。 
dpkg-deb: `../sylpheed-dbg_3.1.0~beta4-1_i386.deb' にパッケージ `sylpheed-dbg' を構築しています。 
dpkg-deb: `../sylpheed-i18n_3.1.0~beta4-1_all.deb' にパッケージ `sylpheed-i18n' を構築しています。 
dpkg-deb: `../sylpheed-plugins_3.1.0~beta4-1_i386.deb' にパッケージ `sylpheed-plugins' を構築しています。 
dpkg-genchanges -b >../sylpheed_3.1.0~beta4-1_i386.changes 
dpkg-genchanges: binary-only upload - not including any source code 
dpkg-source --after-build sylpheed-3.1.0~beta4 
dpkg-buildpackage: binary only upload (no source included) 

最後にできたパッケージをインストールします。ややこしいことになるので,前のバージョンをインストールしてあるのが前提とします。たいていは次のようにそのままインストールします。

$ cd ../
$ sudo dpkg -i sylpheed_*.deb sylpheed-i18n_*.deb    ※3

エラーが出た場合は,次のコマンドを実行してみてください。

$ sudo apt-get -f install

これで足りないパッケージが入手できる場合は,取得してインストールが完了します。

※3
バージョンが変わっても対応できるようにしています。

著者プロフィール

あわしろいくや

Ubuntu Japanese Teamメンバー。Ubuntu Japanese Teamではパッケージングなどを担当。ほかには日本語入力関連やOpenOffice.org日本ユーザー会コミッティも兼任。

コメント

コメントの記入