Ubuntu Weekly Recipe

第312回 パッケージとより良いお付き合いをするための情報収集

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

Ubuntuを使ううえでパッケージ管理は欠かせません。普段はソフトウェアセンターやapt-getコマンドからパッケージをインストールし,アップデーターから通知が届いたらアップデートする,それだけで充分です。しかし「この更新によって何が変わるのか」⁠このファイルはどのパッケージに属しているのか」といったことを調べたくなるときもあるでしょう。今回はパッケージ管理で使えるちょっとしたコマンドをいくつか紹介します。

パッケージの変更履歴を取得する

パッケージを更新するとき,更新を反映する前に何が変わるのかを知りたいことがあるでしょう。

すべてのパッケージにはパッケージに関する変更履歴ファイル(changelogファイル)が付属します。ファイルは「/usr/share/doc/パッケージ名/changelog.Debian.gz」という名前で保存されていますので,これをlessコマンドなどで閲覧すれば,これまでの変更内容がわかります。

ただしローカルには,インストール済みパッケージの,直近の変更履歴しか保存されません。これからインストールしようとしているパッケージやアップグレードされるパッケージの更新履歴を過去に渡ってすべて閲覧したい場合は,⁠apt-get changelog」を使用します。

$ apt-get changelog update-manager

変更履歴の内容はアップデートマネージャーに表示されるものと同じです。ただしPPAや外部リポジトリのようなchangelogs.ubuntu.comに掲載されない変更履歴は取得できません。もしPPAの変更履歴を取得したい場合は,Canonicalのrsalvetiが作成したPythonスクリプトを使うと良いでしょう。

$ sudo apt-get install python-launchpadlib
$ python generate-ppa-changelog.py -t cosmos-door -p marisa -s trusty

Launchpad APIを使っているため,python-launchpadlibパッケージが必要です。⁠-t」オプションにPPAのユーザー名,⁠-p」にPPAの名前,⁠-s」にUbuntuのコードネームを指定します。たとえば「add-apt-repository ppa:cosmos-door/marisa」という形でPPAを追加した場合は,⁠cosmos-door」がユーザー名,⁠marisa」がPPAの名前になります。

すべてのパッケージの変更履歴を眺めたいのであれば,UbuntuUpdates.orgも便利です。

インストール済みパッケージのファイルリストを取得する

インストール済みのパッケージのファイルリストは,dpkgコマンドを使って取得します。⁠-L」オプションの後ろにパッケージ名を指定することで,そのパッケージのファイルリストが表示されるのです。次のコマンドはupdate-managerパッケージのファイルリストを取得する例です。

$ dpkg -L update-manager
/.
/usr
/usr/bin
/usr/bin/update-manager
/usr/lib
/usr/lib/python3
/usr/lib/python3/dist-packages
/usr/lib/python3/dist-packages/UpdateManager
/usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py
(中略)
/usr/share/applications
/usr/share/applications/update-manager.desktop
/usr/share/doc/update-manager/changelog.gz

逆にファイル名から所属するパッケージを探したい場合は,⁠-S」オプションを使用しましょう。

$ dpkg -S UpdateManager.py
update-manager: /usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py

検索パターンにはシェルと同様のワイルドカード文字を使用できます。

$ dpkg -S UpdateManager.*
update-manager: /usr/share/update-manager/gtkbuilder/UpdateManager.ui
update-manager: /usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py

「……により退避 (divert) された:……」というファイルが表示されることもあります。複数のパッケージでパス名がかぶっている場合に,インストール時に別名に退避したファイルがこのような表示になります。

未インストールのパッケージのファイルリストを取得する

「このファイルが欲しいのだけれど,どのパッケージをインストールすれば良いのかわからない」ということは往々にしてあります。そんな時はapt-fileコマンドを使いましょう注1)⁠

$ sudo apt-get install apt-file

apt-fileはファイルリストを管理するデータベースを作成する必要があります。GUI環境であればインストール後に「apt-fileの更新が必要です」というダイアログが表示されます。⁠実行する」をクリックすると,端末が起動し,自動的にデータベースの初期化を行ってくれますので,処理が完了するまで待ってください。端末が終了したらダイアログを閉じると良いでしょう。

CUIの場合や,リポジトリの更新によってファイルリストも更新する必要がある場合は,端末から次のコマンドを実行してください。

$ apt-file update

ファイルの検索はsearchコマンドで,ファイルリストの取得はlistコマンドで行います。

$ apt-file search UpdateManager.py
fs-uae-launcher: /usr/share/fs-uae-launcher/fs_uae_launcher/UpdateManager.py
update-manager: /usr/lib/python3/dist-packages/UpdateManager/UpdateManager.py

$ apt-file list fs-uae-launcher
fs-uae-launcher: /usr/bin/fs-uae-launcher
fs-uae-launcher: /usr/share/applications/fs-uae-launcher.desktop
fs-uae-launcher: /usr/share/doc/fs-uae-launcher/README.gz
(以下略)

Contentsファイルを生成していないPPAや外部リポジトリは検索対象外です。

Ubuntuをインストールしていない環境や別のリリースを調べたい場合は,Ubuntuパッケージ検索を使うと良いでしょう。

注1)
apt-fileやUbuntuパッケージ検索は第16回でも紹介しています。

パッケージの中身を確認する

手元にバイナリパッケージがあるなら,インストールしなくてもdpkgコマンドを使って中身を確認できます。apt-fileでは追跡されないパッケージを確認するときに便利です。

apt-getでインストールできるパッケージであれば,バイナリパッケージ単独でダウンロードすることも簡単です。

$ apt-get download apport
取得:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main apport all 2.13.2-0ubuntu4 [177 kB]
177 kB を 0秒 で取得しました (510 kB/s)
$ ls
apport_2.13.2-0ubuntu4_all.deb

このパッケージがインストールするファイルリストは「--contents」オプションで取得します。

$ dpkg --contents apport_2.13.2-0ubuntu4_all.deb
drwxr-xr-x root/root         0 2014-02-15 07:56 ./
drwxr-xr-x root/root         0 2014-02-15 07:56 ./etc/
drwxr-xr-x root/root         0 2014-02-15 07:54 ./etc/apport/
-rw-r--r-- root/root      1172 2014-02-15 07:54 ./etc/apport/crashdb.conf
(以下略)

ちなみにUbuntuはLESSOPEN,LESSCLOSEに「lesspipe」が設定されています。UbuntuにインストールされるlesspipeはDebianパッケージも扱えるので,lessでも同じファイルリストを表示できます。

$ less apport_2.13.2-0ubuntu4_all.deb

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入