第8章 Debian パッケージ管理ツール

目次

8.1. Debian はパッケージ管理にどんなプログラムを提供していますか?
8.1.1. dpkg
8.1.2. APT
8.1.3. aptitude
8.1.4. synaptic
8.1.5. tasksel
8.1.6. 他のパッケージ管理ツール
8.2. Debian は実行中のプログラムを更新できると主張しています。これはどうやっているのでしょう?
8.3. Debian システムにどのパッケージが既にインストールされているのか調べる方法は?
8.4. インストールされている、あるパッケージのファイルを表示する方法は?
8.5. 特定のファイルをどのパッケージが提供しているのか調べる方法はありますか?
8.6. 「foo」をアンインストールしたときに「foo-data」が削除されないのは何故ですか? 古く利用されていないライブラリパッケージが完全削除されているか確認する方法はありますか?

8.1. Debian はパッケージ管理にどんなプログラムを提供していますか?

Debian パッケージ管理に利用できるツールは、視覚的あるいはテキストベースのインターフェイスを備えたものからパッケージのインストールに利用される低レベルツールまで複数あります。利用できるツールはすべて適切に機能するために低レベルツールに依存しており、複雑さを軽減するために存在しています。

aptitudesynaptic といった高レベルのパッケージ管理ツールが apt に依存し、その apt 自体はそのシステムでのパッケージ管理について dpkg に依存していることを理解しておくのは大切です。

Debian パッケージ管理ユーティリティのさらなる情報については、Debian リファレンス第2章 Debian パッケージ管理を見てください。この文書は様々な言語や形式のものが利用できます。DDP ユーザ用マニュアルの Debian リファレンスの項目を見てください。

8.1.1. dpkg

これは主要なパッケージ管理プログラムです。dpkg は多数のオプションを指定して実行することができます。よく使うものをいくつか示します:

  • 全オプションを調べるには: dpkg --help

  • 指定されたパッケージの制御ファイル (や他の情報) を表示: dpkg --info foo_VVV-RRR.deb

  • パッケージをハードディスクのファイルシステムにインストール (展開や設定も含む): dpkg --install foo_VVV-RRR.deb

  • Debian アーカイブをハードディスクのファイルシステムに展開 (設定はしない): dpkg --unpack foo_VVV-RRR.deb。この操作は必ずしもパッケージを使える状態にするとは限らないことに注意してください。適切に動作させるためにはさらに一部のファイルに調整が必要かもしれません。このコマンドはそのプログラムの既にインストールされているバージョンを全て削除し、そのパッケージに付属している preinst (「Debian preinst、postinst、prerm、postrm スクリプトとは何ですか?」 参照) スクリプトを実行します。

  • 既に展開されているパッケージを設定: dpkg --configure foo。この操作にはパッケージ付属の postinst (「Debian preinst、postinst、prerm、postrm スクリプトとは何ですか?」 参照) スクリプトを実行するという特徴があります。また、このパッケージの conffiles 内のファイル一覧の更新も行います。「configure」操作は Debian アーカイブファイル (例えば foo_VVV-RRR.deb) ではなくパッケージ名 (例えば foo) を引数に取ることに注意してください。

  • Debian アーカイブから「blurf」という単一のファイル (または「blurf*」という名のファイル群) を抽出: dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - blurf*

  • パッケージを削除 (設定ファイルは残す): dpkg --remove foo

  • パッケージを削除 (設定ファイルも削除): dpkg --purge foo

  • パッケージのインストール状態に文字列 (または正規表現)「foo*」を含むものを表示: dpkg --list 'foo*'

8.1.2. APT

APT、進化したパッケージツール (Advanced Package Tool) は Debian パッケージシステムへの進化したインターフェイスで apt-get プログラム順を提供します。パッケージの検索、管理用コマンドラインツール、情報参照用には libapt-pkg ライブラリの全機能への低レベルアクセス手段を提供します。さらなる情報については/usr/share/doc/apt-doc/guide.html/index.html にあるユーザーズガイドを見てください (apt-doc パッケージをインストールする必要があるでしょう)。

Debian Jessie 以降では、apt-get 及び apt-cache のよく使われる一部のコマンドについては新しい apt バイナリを経由する代替が用意されています。これは apt-get updateapt-get installapt-get removeapt-cache searchapt-cache show といった一部の人気コマンドが単に apt を経由して apt updateapt installapt removeapt searchapt show でもできるようになったということです。以下が新旧コマンドの概要となります。

 apt-get update             ->  apt update
 apt-get upgrade            ->  apt upgrade
 apt-get dist-upgrade       ->  apt full-upgrade
 apt-get install package    ->  apt install package
 apt-get remove package     ->  apt remove package
 apt-get autoremove         ->  apt autoremove
 apt-cache search string    ->  apt search string
 apt-cache policy package   ->  apt list -a package
 apt-cache show package     ->  apt show package
 apt-cache showpkg package  ->  apt show -a package

apt ツールは apt-get と apt-cache の機能を統合し、デフォルトで小洒落た色付きの出力形式を採用して人間にとって使いやすくなっています。スクリプトでの利用や細かな処理には apt-get の方が好ましいあるいは必要となるでしょう。

apt-get provides a simple way to retrieve and install packages from multiple sources using the command line. Unlike dpkg, apt-get does not understand .deb files, it works with the packages proper name and can only install .deb archives from a source specified in /etc/apt/sources.list. apt-get will call dpkg directly after downloading the .deb archives[5] from the configured sources.

apt-get のよくある使い方をいくつか示します:

  • システムが把握するパッケージ一覧を更新するには

    apt update
    

    (これは定期的に実行してパッケージ一覧を更新しておくべきです)

  • foo パッケージのその依存を全てインストールするには

    apt install foo
    
  • foo パッケージをシステムから削除するには

    apt remove foo
    
  • foo パッケージとその設定ファイルをシステムから削除するには

    apt purge foo
    
  • 新しいバージョンが利用できるようになっている全パッケージの一覧表示は

    apt list --upgradable
    
  • システムにあるパッケージをすべて (余計なパッケージのインストールやパッケージの削除は行わずに) アップグレードするには

    apt upgrade
    
  • システム上にあるパッケージをすべてアップグレードし、パッケージのアップグレードに余計なパッケージのインストールやパッケージの削除が必要な場合は

    apt full-upgrade
    

    (アップグレードの際に新しい依存を満たすのに余分なパッケージをインストールする必要がある場合、コマンド upgrade ではバージョンが古くなっているインストール済みパッケージを維持します。full-upgrade コマンドはあまり保守的ではありません。)

パッケージを変更するコマンドの実行には root でログインしている必要があることに注意してください。

apt-get は現在、推奨される (recommended) パッケージをデフォルトでインストールすることと、その堅牢性から、コンソールからのシステムのインストールやシステムの規模の大きなアップグレードを行うのに望ましいパッケージ管理プログラムとなっていることに注意してください。

apt ツール群にはパッケージ一覧に対して検索を行う apt-cache ツールも収録されています。これを使って簡単なテキストや正規表現を照会したり、あるいはパッケージ管理システム内の依存関係を照会することで、特定の機能を提供するパッケージを検索することができます。apt-cache のよくある使い方をいくつか示します:

  • 説明文に単語を含むパッケージを探す:

    apt search 単語
    
  • パッケージの詳細な情報を表示するには:

    apt show package
    
  • 指定したパッケージが依存しているパッケージを表示:

    apt-cache depends package
    
  • そのパッケージの利用可能バージョンの詳細な情報やそれが逆依存しているパッケージを表示:

    apt-cache showpkg package
    

For more information, install the apt package and read apt(8), apt-get(8), sources.list(5) and install the apt-doc package and read /usr/share/doc/apt-doc/guide.html/index.html.

8.1.3. aptitude

aptitude は apt パッケージ管理基盤のフロントエンドを提供する Debian GNU/Linux システム用パッケージ管理プログラムです。aptitude は curses ライブラリを使ったテキストベースのインターフェイスです。操作は視覚的インターフェイスかコマンドラインから行うことができます。

aptitude を使うと管理タスクを迅速、簡単に実行できます。ユーザがパッケージ一覧を見たり、パッケージのインストールやアップグレード、削除といったパッケージ管理作業を行うことが可能になります。

aptitudeapt-get の機能、さらに多数の機能を追加で提供します:

  • aptitude はパッケージの全バージョンへの簡単なアクセスを提供します。

  • aptitude は「廃止された、またはローカルで作成されたパッケージ」の下に一覧を表示することで古くなっているソフトウェアの把握を簡単にします。

  • aptitude は特定のパッケージを検索して表示するパッケージを限定する非常に強力なシステムを収録しています。mutt をよく理解しているユーザなら表現として mutt を思い付くのですぐ探せるでしょう。

  • aptitude は利用可能な定義済みタスクのインストールに利用することができます。さらなる情報については 「tasksel」 を見てください。

  • aptitude の全画面モードでは su 機能が組み込まれ、通常のユーザが実行できるようになっています。管理用の権限が実際に必要となったときに su を呼び出し (root パスワードが設定されている場合はそれを聞いてき) ます。

aptitude は、視覚的インターフェイス経由 (単純に aptitude で実行) またはコマンドラインから直接実行することができます。利用するコマンドライン書式は apt-get とかなり似ています。例えば foo パッケージをインストールするには aptitude install foo を実行します。

aptitude は日常のパッケージ管理をコンソールから行うのに望ましいパッケージ管理プログラムとなっていることに注意してください。

For more information, read the manual page aptitude(8) and install the aptitude-doc package.

8.1.4. synaptic

synaptic はグラフィカルなパッケージ管理プログラムです。これを使うとソフトウェアパッケージのインストールやアップグレード、削除をユーザにとってわかりやすい方法で行うことができます。aptitude が提供している機能に加え、利用しているリポジトリ一覧を編集する機能やパッケージに関連する利用可能な全文書閲覧を支援する機能もあります。さらなる情報については Synaptic ウェブサイトを見てください。

8.1.5. tasksel

特定の作業を行いたい場合に、要件を満たす適切なパッケージ群を見つけるのが困難なことがあります。Debian 開発者タスクを定義しています。タスクは全て特定の活動に関連する個々の Debian パッケージを集めたものです。タスクは tasksel プログラムや aptitude 経由でインストールすることができます。

Typically, the Debian installer will automatically install the task associated with a standard system and a desktop environment. The specific desktop environment installed will depend on the CD/DVD media used, most commonly it will be the GNOME desktop (gnome-desktop task). Also, depending on your selections throughout the installation process, tasks might be automatically installed in your system. For example, if you selected a language other than English, the task associated with it will be installed automatically too.

8.1.6. 他のパッケージ管理ツール

8.1.6.1. dpkg-deb

このプログラムは Debian アーカイブ (.deb) ファイルを操作します。よくある使い方をいくつか示します:

  • 全オプションを調べる: dpkg-deb --help

  • Debian アーカイブファイルに収録されているファイルの調査: dpkg-deb --contents foo_VVV-RRR.deb

  • Debian アーカイブに収録されているファイルをユーザが指定されたディレクトリに抽出: dpkg-deb --extract foo_VVV-RRR.deb tmp を実行すると foo_VVV-RRR.deb 中の各ファイルをディレクトリ tmp/ に抽出します。これは root ファイルシステムにパッケージをインストールすることなくディレクトリを限定してパッケージの内容を調べるのに便利です。

  • 制御情報ファイルをパッケージから抽出: dpkg-deb --control foo_VVV-RRR.deb tmp

単に dpkg-deb --extract を使って展開したパッケージは正常にインストールされていないことに注意してください。代わりに dpkg --install を使ってください。

More information is given in the manual page dpkg-deb(1).

8.2. Debian は実行中のプログラムを更新できると主張しています。これはどうやっているのでしょう?

Debian GNU/Linux システムのカーネル (ファイルシステム) では使用中であってもファイルを置き換えることができます。

start-stop-daemon というプログラムも提供しています。これはブート時にデーモンを開始、あるいはランレベルが変更された (例えばマルチユーザからシングルユーザへの変更や halt) 時にデーモンを停止するのに使います。インストール用スクリプトがデーモンを収録する新しいパッケージをインストールするときに必要に応じて実行中のデーモンを停止、再起動するのに同一のプログラムを使います。

8.3. Debian システムにどのパッケージが既にインストールされているのか調べる方法は?

Debian システムにインストールされている全パッケージの状態を確認するには、コマンド

dpkg --list

を実行します。こうすると各パッケージについて、2文字の状態を示す記号 (ヘッダで説明されています)、パッケージ名、インストールされているバージョン、簡単な説明を1行にまとめたものが表示されます。

「foo」で始まる全パターンに名前がマッチするパッケージの状態を調べるには、コマンド

dpkg --list 'foo*'

特定のパッケージについてもっと詳しい報告を得るには、コマンド

dpkg --status パッケージ名

8.4. インストールされている、あるパッケージのファイルを表示する方法は?

インストールされているパッケージ foo により提供されている全ファイルを列挙するには、コマンド

dpkg --listfiles foo

を実行します。インストール用スクリプトにより作成されたファイルは表示されないことに注意してください。

8.5. 特定のファイルをどのパッケージが提供しているのか調べる方法はありますか?

foo という名のファイルを提供しているパッケージを見つけるには、以下のどれかを実行します。

  • dpkg --search ファイル名

    これはインストールされているパッケージからファイル名を検索します。(これは (現在は) ファイルの拡張子が .list の全ファイルをディレクトリ /var/lib/dpkg/info/ から検索し、それを収録するパッケージの名前を全て表示するように出力を調整しているのと等価です。

    もっと高速な代替方法が dlocate ツールです。

    dlocate -S ファイル名
    
  • zgrep foo Contents-ARCH.gz

    This searches for files which contain the substring foo in their full path names. The files Contents-ARCH.gz (where ARCH represents the wanted architecture) reside in the major package directories (main, non-free, contrib) at a Debian archive site (i.e. under /debian/dists/bookworm). A Contents file refers only to the packages in the subdirectory tree where it resides. Therefore, a user might have to search more than one Contents files to find the package containing the file foo.

    この方法には、現在そのシステムにインストールされていないパッケージに収録されているファイルを検索するという点で dpkg --search よりも優れています。

  • apt-file search foo

    apt-file パッケージをインストールしていれば、これも上記と同様、フルパス名に部分文字列や正規表現 foo を含むファイルを検索します。これには上記の例と比べて、(root で) apt-file update を実行したときに /etc/apt/sources.list で定義されている全ソースから自動的に取得しているためにこの Contents-ARCH.gz ファイルを取得する必要がないという利点があります。

8.6. 「foo」をアンインストールしたときに「foo-data」が削除されないのは何故ですか? 古く利用されていないライブラリパッケージが完全削除されているか確認する方法はありますか?

パッケージによってはプログラム (「foo」) とデータ (「foo-data」) (あるいは「foo」と「foo-doc」) に分割されています。Debian ではゲームやマルチメディアアプリケーション、辞書の多くがこのようになっています。これは、プログラムをインストールせずに生データにアクセスしたいユーザがいるであろうことや、そのデータ自体はなくてもプログラムは実行できる等の理由により「foo-data」をオプションにするために導入されました。

ライブラリの取り扱いでも似た状況が発生します: こちらは通常、アプリケーションを収録するパッケージが依存するためにインストールされます。アプリケーションパッケージを完全削除したときにライブラリパッケージはシステムに残るかもしれません。あるいは、アプリケーションパッケージが例えば libdb4.2 に代えて libdb4.3 に依存するようになった場合、アプリケーションパッケージをアップグレードしたときに libdb4.2 パッケージが残るかもしれません。

こういった場合、「foo-data」は「foo」に依存していないため、「foo」パッケージを削除する際、ほとんどのパッケージ管理ツールで自動的には削除されません。ライブラリパッケージでも同じです。これは循環依存を避けるために必要です。ただし、パッケージ管理ツールに apt-get (「APT」 参照) や aptitude (「aptitude」 参照) を利用している場合は、インストールされているパッケージを自動的に追跡し、必要としているパッケージがそのシステムに残っていないようなら削除を提案します。



[5] Notice that there are ports that make this tool available with other package management systems, like Red Hat package manager, also known as rpm