Ubuntu Weekly Recipe

第16回パッケージの使いこなし:必要なファイルの含まれるパッケージの探し方, Debianパッケージの流用

Ubuntuはパッケージによってソフトウェアを管理しています。今回は、必要なファイルが含まれるパッケージの探し方と、どうしても使いたいソフトウェアが存在しない場合の「裏技」を紹介します。

必要なファイルの含まれるパッケージの探し方

packages.ubuntu.comの利用

あるファイルが含まれているパッケージを探したい場合(たとえば、⁠libssl.soがどのパッケージに含まれているのか知りたい」場合⁠⁠、http://packages.ubuntu.com/を利用するのが手軽です。

このサイトのトップページ中程にある、"Search the contents of packages"という検索ボックスを利用してください。このページにはいくつかの検索ボックスがありますので、誤って"Search package directories"などを利用しないように注意してください。

図1 "Search the contents of packages"
図1 

検索結果は次のように表示されます。

図2 検索結果
図2 検索結果

apt-fileの利用

apt-fileは次のように利用します。なお、同様のコマンドラインベースでの検索は第14回で紹介したauto-aptでも行えます。

apt-fileパッケージをインストールし、データベース更新のために、apt-file updateを行います。

・apt-fileのインストール
$ sudo apt-get update
$ sudo apt-get install apt-file

・データベースの更新
$ sudo apt-file update

なお、8.04を利用している場合、以下のようにupdates・security・backportsについてはContentsファイルが取得できません。これらのファイルはまだ存在しませんので、これは正常な動作です。いずれupdates・security・backportsに属するパッケージがリリースされた時点で取得できるようになります。

$ sudo apt-file update 
Can't get http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/hardy-updates/Contents-i386.gz
Can't get http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/hardy-updates/Contents-i386.gz
Can't get http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/hardy-updates/Contents-i386.gz
Can't get http://archive.canonical.com/ubuntu/dists/hardy/Contents-i386.gz
Can't get http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/hardy-security/Contents-i386.gz
Can't get http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/hardy-security/Contents-i386.gz
Can't get http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/hardy-security/Contents-i386.gz
Can't get http://ubuntutym.u-toyama.ac.jp/ubuntu/dists/hardy-backports/Contents-i386.gz

apt-fileパッケージは次のように利用します。

$ apt-file search libssl.so
libssl-dev: /usr/lib/libssl.so
libssl0.9.8: /usr/lib/i486/libssl.so.0.9.8
libssl0.9.8: /usr/lib/i586/libssl.so.0.9.8
libssl0.9.8: /usr/lib/i686/cmov/libssl.so.0.9.8
libssl0.9.8: /usr/lib/libssl.so.0.9.8
libssl0.9.8-dbg: /usr/lib/debug/usr/lib/i486/libssl.so.0.9.8
libssl0.9.8-dbg: /usr/lib/debug/usr/lib/i586/libssl.so.0.9.8
libssl0.9.8-dbg: /usr/lib/debug/usr/lib/i686/cmov/libssl.so.0.9.8
libssl0.9.8-dbg: /usr/lib/debug/usr/lib/libssl.so.0.9.8

Debianパッケージの流用

UbuntuはDebianの不安定版(unstable)を元に開発されています。このため、Ubuntuに存在しない最新版のパッケージなどは、Debianのものを流用することが不可能ではありません。ここでは一種の「裏技」として、Debianパッケージを流用して利用する手順を紹介します。

※注意:

Debianパッケージを流用することは、本来想定されていない行動です。予想外のバグに遭遇する可能性がありますので、やむを得ない場合にのみ行ってください。

また、Debianのバイナリパッケージを「そのまま」インストールしてはいけません。バイナリパッケージをそのまま流用することを防ぐ機構は用意されていませんので、ユーザ側で注意する必要があります。debian.orgなどからdebianパッケージをダウンロードしてインストールしてしまった場合、多くはうまく動いてしまうか、悪くても起動した瞬間にクラッシュする程度で済むこともありますが、最悪の場合は不正な依存関係により、システムを破壊するおそれすらあります。

最初に、パッケージのビルドに最低限必要な環境を整えます。以下の手順でパッケージをインストールしてください(もちろんSynapticからでもインストールできますが、今回は端末の中心の操作になりますので、コマンドで操作した方が早いはずです⁠⁠。

$ sudo apt-get update
$ sudo apt-get install fakeroot build-essential dpkg-dev devscripts

また、ほとんどの場合、Debianパッケージを流用する場合はtestingではなくsid(unstable)にあるものを使うことになるでしょう。以下のapt-lineを/etc/apt/sources.listの末尾に追加してください。

# Debian packages
deb-src http://ftp.jp.debian.org/debian unstable main contrib

パッケージの検証に利用する公開鍵を取得します。

gpg --recv-key --keyserver wwwkeys.eu.pgp.net C4C7264B
gpg --export C4C7264B | sudo apt-key add - 

この状態でapt-get updateを行うと、以下のようなヒットメッセージが出力されます。これでDebianパッケージのソースを取得する準備が整いました。

ヒット http://ftp.jp.debian.org unstable Release.gpg
ヒット http://ftp.jp.debian.org unstable Release
ヒット http://ftp.jp.debian.org unstable/main Sources
ヒット http://ftp.jp.debian.org unstable/contrib Sources

以下のような手順でapt-get sourceコマンドでパッケージを取得することで、Debianパッケージのソースが展開されます。以下は"jd"というソフトウェアのパッケージを取得しています。

apt-get sourceを行うことでカレントディレクトリにdsc・tarボール・diffが取得され、さらにソースを展開したディレクトリが作成されますので、~/直下などでは作業を行うべきではありません。以下の例では ~/src/deb というディレクトリを作成し、そこで展開しています。

$ mkdir -p ~/src/deb/
$ cd ~/src/deb/
$ apt-get source jd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
509kB のソースアーカイブを取得する必要があります。
取得:1 http://ftp.jp.debian.org unstable/main jd 1:1.9.9-080415-2 (dsc) [1142B]
取得:2 http://ftp.jp.debian.org unstable/main jd 1:1.9.9-080415-2 (tar) [497kB]
取得:3 http://ftp.jp.debian.org unstable/main jd 1:1.9.9-080415-2 (diff) [10.2kB]
509kB を 0s で取得しました (1696kB/s)
dpkg-source: extracting jd in jd-1.9.9-080415
dpkg-source: unpacking jd_1.9.9-080415.orig.tar.gz
dpkg-source: applying ./jd_1.9.9-080415-2.diff.gz

ビルドを行うためには多くのライブラリが必要になりますが、apt-get build-depを用いることで、Build Dependsに定義されているパッケージをまとめてインストールすることができます。

$ sudo apt-get build-dep jd

ビルドに必要なパッケージが整ったら、debuildを用いてパッケージをビルドします。-r fakerootを指定することで、root権限なしにパッケージを作成することができます。

ビルドが終了したら、⁠カレントディレクトリの一つ上」のディレクトリにパッケージが作成されています。以下の例ではビルド後に cd .. することで、カレントディレクトリにパッケージが存在するようにしています。

$ cd jd-1.9.9-080415/
$ debuild -r fakeroot
$ cd ..
$ ls *deb
jd_1.9.9-080415-2_i386.deb

ビルドされたパッケージは、次の手順でインストールすることができます。

$ sudo dpkg -i jd_1.9.9-080415-2_i386.deb

自動的なビルド&インストール

上述の操作はapt-get sourceコマンドに "--compile" オプションを与えることで、自動的に実行させることもできます(-b・--buildなどでも同じ挙動です⁠⁠。

日常的にDebianからパッケージを流用する場合は、以下のように操作するのが簡便でしょう。

$ sudo apt-get source --compile jd
$ ls -altr *deb
(ビルドされたパッケージ名を確認)
$ sudo dpkg -i jd_1.9.9-080415-2_i386.deb

なお、いずれの方法を取る場合も、リリース間の移行の障害になる可能性がありますので、アップグレードを行う前に、必ずパッケージを削除することを忘れないでください。削除はapt-get removeで行うことができます。

$ sudo apt-get remove jd

より適切な運用はUbuntu用にパッケージの一部をカスタマイズし、バージョン番号などにDebian由来であることを示す文字列を含めることですが、簡易な運用であればこの程度でも問題ないでしょう。ただし、あくまで「裏技」であることを忘れないでください。

おすすめ記事

記事・ニュース一覧