寒い冬にはパッケージビルド!?
ようやく冬らしい季節なってきました。みなさんの部屋には、もちろん暖房器具があるでしょう。また、部屋の中にはきっと、たくさんのPCもあるのではないかと思います。筆者の部屋にも、数えるとうんざりするぐらいたくさんあります。しかしながら、PCは熱を出すくせに熱には弱く、排熱をしないと壊れてしまいます。
せっかくPCがたくさんあるのなら、これで暖を取るのもアリではないでしょうか。とはいえ、最近のPCは以前よりも発熱量は減っています。連続して発熱させるためには、CPUを100%(マルチコアであれば、それ以上)で稼動させるパッケージのビルドが最適なのです。
……と小咄はこのぐらいにして、今回はパッケージをビルドする方法を紹介します。
パッケージのビルドとは
パッケージのビルドというのは、ソースコードからバイナリパッケージを生成することだと思ってください。「オープンソース・ソフトウェア」は誰でもビルドできるので、せっかく使っているのであれば、パッケージのビルドをやってみない手はありません。ただし、注意点もあるので、それは最後にまとめます。
手法はそれこそたくさんあってとても全部は紹介しきれないため、ソースパッケージが存在する場合と、ソースから一発でパッケージが生成できる場合を紹介します。もちろんここで紹介しているものはどれも簡単にできるものばかりなので、ここに当てはまらないパターンのほうが多いかもしれませんが、そのあたりは試行錯誤してみてください。
なお、ターゲットとするUbuntuのバージョンは10.10であり、操作はすべてコマンドラインで行います。
準備
パッケージをビルドするのに最低限必要なパッケージをインストールします。
あとは、適当なフォルダを作成し、そこでビルドを行うと簡単でしょう。
すでにソースパッケージがある場合
今更いうまでもなく、Ubuntuもリリース以後は原則としてバージョンアップは行われません。そのため、ピンポイントで最新のパッケージを使いたい場合があると思います。一番簡単なのは、すでにソースパッケージがあり、これをビルドすることです。例えばUbuntu 10.10のリリース後は、11.04に相当するものの開発が開始され、新しいパッケージはこちらに入ります。Debianの開発版(sid)からもらってくるのもありでしょう。
どのような新しいパッケージが開発版に入ったかは、メーリングリストで簡単に調べることができます。Ubuntu 11.04相当だとNatty-changes、Debianだとdebian-devel-changesです。ただ、これらのメール全部に目を通すのは大変なので、Ubuntu Packages SearchやDebianのパッケージ検索で探すのが簡単でしょう。
例えばSylpheedを例にすると、Ubuntu 10.10には3.1.0 Beta2が入っていますが、Debian experimentalには3.1.0 Beta4が入っています。 Ubuntuには、Debianにはない独自の修正が入っていて、これがないと正しく動作しない場合もあるため、Debianにあるパッケージを単純にUbuntuに持ってこられるわけではありませんが、Sylpheedに限るとその問題はなく、またBeta4というバージョンでexperimentalに入っているので不安定[1]と思われがちですが、これもSylpheedに限るとそうでもありません[2]。
ここでは、DebianのリポジトリからSylpheed 3.1.0 Beta4のパッケージを取得することにします。
これだけです。dgetコマンドでdscファイルを指定すると、必要なソースパッケージを取得することができます。Sylpheed以外の場合、このURLから予測できるのではないかと思います。例えばRhythmboxは、pool/main/r/rhythmboxにあります。Ubuntuでもディレクトリの構成はほぼ同じですが、mainのほかにuniverseやmultiverseがあるのが注意点です。例えばsylpheedはuniverseなので、pool/universe/s/sylpheedにあります。dgetのオプションの-uは、署名を検査できなくても展開するという意味です。
次に、ビルドに必要なパッケージをインストールします。
これはあくまで今リポジトリにあるSylpheedのビルドに必要なものであり、バージョンが新しくなると当然のことながら必要なものは増減します。足りない場合、たいていはとあるファイルがないということが多いので、前出のパッケージ検索でそのファイル名を検索すると出てくることが多いです。したがって、そのファイルが含まれているパッケージをインストールすると解決しますが、リポジトリにあるものよりも新しいバージョンが要求される場合は、あらかじめそのパッケージを用意する必要があります。ビルドに必要なものがあまりに多いと、諦めたほうがいいでしょう。筆者もそうしています。
ひととおりインストールが終わったら、実際にビルドを開始します。
dpkg-buildpackageコマンドを使用しますが、-bはバイナリのみ、-ucは署名をしないというオプションです。-rは説明が長くなるので省略しますが、ユーザ権限でビルドするのに必要なものだと思ってください。-j3などのオプションを付けるとビルドが速くなりますが、これもやはり省略します。このオプションを使用すると、ものによってはビルドに失敗することもあるので、使用する場合はよく理解してからにしたほうがいいでしょう。
次のようなメッセージが出力されれば、無事に成功しています。
最後にできたパッケージをインストールします。ややこしいことになるので、前のバージョンをインストールしてあるのが前提とします。たいていは次のようにそのままインストールします。
エラーが出た場合は、次のコマンドを実行してみてください。
これで足りないパッケージが入手できる場合は、取得してインストールが完了します。
ソースコードからビルドできる場合
ソースコードから直接パッケージがビルドできることは、実のところほとんどありません。したがって、ここで紹介する方法はMozc専用だと思っていただいたほうがいいです。
Mozcはビルド方法が公開されているので、このとおりにやればいいのですが、アレンジを加えてみたいと思います。
まずは、ビルドに必要なパッケージをインストールします。
インストールするパッケージは若干減らしていますが、前ページの「準備」でいくつかのパッケージをインストールしてあるため、これで問題ありません。
それでは、Mozcのソースコードを取得し、ビルドしましょう。
オフィシャルのビルド方法とは異なり、 packageフォルダ以下で行っているのでこうなります[4]。ソースコードの取得には少々時間がかかります。ビルドのコマンドも変更していますが、これは統一感を出すためにこうしたのであり、オフィシャルのビルド方法と同じでも構いません。
あとはインストールするだけです。設定方法は、ここでは省略します。
注意点
自前でビルドしたパッケージをインストールするのは、とてもリスクのあることです。依存関係の解決がうまくいかない場合は、再インストールが必要になることもあるでしょう。とはいえ、みんな環境を壊して成長していくものです。
一番問題が顕在化する可能性が高いのは、アップグレードの時です。まさにMozcで、Ubuntu10.04から10.10へのアップグレードで問題がありました。これも、自前ビルドないしどこかで入手したパッケージを使っていることによって起きた問題です[5]。こういったことは今後も考えられますので、このようなトラブルが起きても自力で解決できるスキルが必要とされます。逆にそこまでやる気がないのであれば、提供されているものをそのまま使うのがオススメです。でも、せっかくオープンソースなのですから、努力してみるのもいいでしょう。スキルは自分で身につけるしかありません。
作成されたパッケージはPPAで公開することもできますが[6]、パッケージングについて経験を積み、「キレイなパッケージ」を作成できるようになったという自信がつくまでは、公開は避けたほうがいいでしょう。パッケージに関して質問されて、答えられるスキルがあるかどうかというのが一つの試金石のような気はしますが、具体的にこうという線引きは、当然のことながらありません。