Debian系パッケージ管理の全体像

Debian、Ubuntuなど、Debian系のディストリビューションでは、ソフトウェアは.deb形式のパッケージとして配布・管理されます。パッケージ管理は、大きく2つの階層に分かれています。

階層役割代表コマンド
低レベル(パッケージファイル自体の操作)個々の.debファイルのインストール・削除・情報照会を行うdpkg
高レベル(リポジトリと依存関係の管理)設定されたリポジトリから、依存関係を自動的に解決しながらパッケージを取得・管理するapt-get、apt-cache、apt

dpkg:パッケージファイルを直接操作する

dpkgは、ダウンロード済みの.debファイルを直接インストール・削除したり、既にインストールされているパッケージの情報を照会したりするための低レベルなコマンドです。依存関係の自動解決は行いません。依存関係が満たされない場合、パッケージは展開されても設定処理が完了せず、エラーとなって未設定の状態で残ることがあります。

主なオプション効果
-i パッケージファイル指定した.debファイルをインストールする
-r パッケージ名パッケージを削除する(設定ファイル=conffileは残す)
-P パッケージ名パッケージを完全に削除する(パッケージが管理する設定ファイル=conffileも削除する)
-l [パターン]dpkgのデータベースに登録されているパッケージの一覧を表示する(削除済みで設定ファイルだけが残るパッケージも含む)
-L パッケージ名指定したパッケージがシステムに配置したファイルの一覧を表示する
-S ファイル名指定したファイルが、どのパッケージによってインストールされたかを検索する
--status パッケージ名指定したパッケージのインストール状態の詳細を表示する
dpkg -i package.deb        # ローカルの.debファイルをインストールする
dpkg -r package             # パッケージを削除する(設定ファイルは残す)
dpkg -L package             # packageが配置したファイルの一覧を表示する
dpkg -S /usr/bin/vim        # /usr/bin/vimがどのパッケージのものかを調べる

-r(削除)と-P(完全削除)の違いは、パッケージが管理する設定ファイル(conffile)を残すかどうかです。再インストールを見込む場合は-r、パッケージとその設定ファイルを削除したい場合は-Pを使い分けます。

dpkg-reconfigure:パッケージの初期設定をやり直す

dpkg-reconfigureは、debconfを利用するパッケージの設定を後から再実行するためのコマンドです。パッケージや設定によっては、対話的な設定ダイアログが表示されます。

dpkg-reconfigure tzdata    # タイムゾーンの設定を再度行う

apt-get:リポジトリからのインストールと依存関係の解決

apt-getは、/etc/apt/sources.listや/etc/apt/sources.list.d/に登録されたリポジトリから、依存関係を自動的に解決しながらパッケージを取得・インストールする高レベルなコマンドです。

コマンド効果
apt-get updateリポジトリのパッケージ一覧(インデックス)を最新の状態に同期する(パッケージ自体はまだ更新しない)
apt-get upgradeインストール済みのパッケージを、削除や新規インストールを伴わない範囲で最新版に更新する
apt-get dist-upgrade依存関係の変更を解決するため、必要に応じてパッケージの新規インストールや削除も行いながら、インストール済みパッケージを最新版に更新する
apt-get install パッケージ名パッケージを、依存関係も含めて自動的に解決しながらインストールする(既にインストール済みならアップグレードも兼ねる)
apt-get remove パッケージ名パッケージを削除する(設定ファイルは残す)
apt-get purge パッケージ名パッケージを、パッケージが管理する設定ファイルも含めて削除する
apt-get autoremove依存関係の解決のために自動的にインストールされ、現在はどのパッケージからも必要とされなくなったパッケージを削除する
apt-get update                # パッケージ一覧を最新化する(インストール前に行うのが基本)
apt-get install nginx         # nginxとその依存パッケージをインストールする
apt-get autoremove            # 不要になった依存パッケージを整理する

apt-get updateはパッケージ一覧の同期、apt-get upgradeは実際のパッケージの更新という役割の違いに注意してください。

リポジトリの設定:/etc/apt/sources.list

/etc/apt/sources.listおよび/etc/apt/sources.list.d/配下の通常.listまたは.sourcesの拡張子を持つ設定ファイルは、パッケージの取得元となるリポジトリの一覧を記述する設定ファイルです。設定形式はAPTやディストリビューションのバージョンにより異なる場合があります。以下は従来の1行形式の例です。

deb http://deb.debian.org/debian bookworm main contrib non-free

従来の1行形式では、各行は「種別(deb=バイナリ、deb-src=ソース)」「リポジトリのURL」「ディストリビューションのコードネーム」「コンポーネント(main等)」から構成されます。

apt-cache:パッケージ情報を検索・照会する

apt-cacheは、パッケージのインストールを伴わず、リポジトリのインデックス情報を検索・参照するためのコマンドです。

コマンド効果
apt-cache search キーワードパッケージ名・説明文からキーワードで検索する
apt-cache show パッケージ名バージョン・依存関係・説明などのパッケージ情報を表示する(インストールの有無を問わない)
apt-cache depends パッケージ名そのパッケージの依存関係などのパッケージ関係と、それを満たし得るパッケージを表示する
apt-cache policy [パッケージ名]候補となるパッケージのバージョンと、それぞれに適用される優先度を表示する
apt-cache search "text editor"    # 「text editor」に関連するパッケージを検索する
apt-cache show vim                # vimパッケージの詳細情報を表示する
apt-cache depends vim             # vimが依存するパッケージの一覧を表示する

統合コマンド:apt

比較的新しいバージョンでは、apt-getとapt-cacheの代表的な機能を1つにまとめたaptコマンドが用意されており、apt install・apt remove・apt update・apt upgrade・apt searchのように、より簡潔に利用できます。試験範囲としては引き続きapt-get・apt-cacheが明示的に挙げられているため、両者の対応関係を理解しておくとよいでしょう。