パッケージ管理 - dpkg/apt と rpm/yum/dnf【LPIC-1 102.4/102.5】

パッケージ管理 - dpkg/apt と rpm/yum/dnf【LPIC-1 102.4/102.5】

この記事で達成できること

  • Debian 系(dpkg / apt)と RPM 系(rpm / yum / dnf)の役割分担を説明できる
  • 低レベルツール(dpkg / rpm)と高レベルツール(apt / dnf)の依存解決の違いを区別できる
  • インストール・削除・更新・検索・問い合わせの各操作を両系統で実行できる
  • ファイルがどのパッケージに属するかを dpkg -S / rpm -qf で逆引きできる
  • 試験頻出の「dpkg -i は依存を解決しない」を根拠付きで答えられる

LPIC-1 主題 102.4「Debian パッケージ管理を使用する」と 102.5「RPM および YUM パッケージ管理を使用する」の両方を 1 本でカバーする。

2 系統 4 ツールをどう使い分けるか

パッケージ管理ツールは「低レベル(単一パッケージ操作・依存解決なし)」と「高レベル(リポジトリ連携・依存自動解決)」の 2 層に分かれる。原則は高レベルツールを日常使いし、低レベルツールは問い合わせや手元の .deb/.rpm 直接導入に使う

系統 低レベル(依存解決なし) 高レベル(依存解決あり) リポジトリ設定
Debian 系 dpkg apt / apt-get / apt-cache /etc/apt/sources.list(.d/)
RPM 系 rpm yum / dnf /etc/yum.repos.d/

覚え方: 末尾が kg / pmdpkg / rpm は「個別パッケージを直接いじる低レベル」。apt / yum / dnf は「リポジトリと依存を面倒見る高レベル」。試験では「依存を自動解決するのはどれか」が頻出。

Debian 系: dpkg の操作

dpkg は Debian 系の低レベルツール。手元の .deb ファイルを直接インストールし、インストール済みパッケージの問い合わせを行う。依存関係は解決しない点が最大の特徴。

dpkg -i: .deb を直接インストールする

dpkg -i package_1.0_amd64.deb
Selecting previously unselected package package.
(Reading database ... 180000 files and directories currently installed.)
Preparing to unpack package_1.0_amd64.deb ...
Unpacking package (1.0) ...
Setting up package (1.0) ...

-i--install)は .deb を展開して設定まで行う。依存パッケージが不足していると dependency problems で止まる(後述のトラブルシューティング参照)。

dpkg -r / -P: 削除する

dpkg -r package
dpkg -P package

-r--remove)は設定ファイルを残して削除、-P--purge)は設定ファイルも含めて完全削除する。「設定を残す/消す」の違いが試験で問われる。

dpkg -l / -L / -S: 問い合わせる

dpkg -l                  # インストール済みパッケージを一覧
dpkg -L package          # パッケージが配置したファイルの一覧
dpkg -S /usr/bin/which   # ファイルが属するパッケージを逆引き
debianutils: /usr/bin/which

-l(list)はインストール済み一覧、-L(list files)は「そのパッケージが置いたファイル」、-S(search)は「このファイルはどのパッケージのものか」の逆引き。-L-S は向きが逆である点に注意する。

dpkg --configure: 未設定パッケージを設定する

dpkg --configure -a

展開済みだが設定が完了していないパッケージを設定する。-a で対象を全パッケージにする。インストールが途中で中断したときの復旧に使う。

Debian 系: apt / apt-get / apt-cache の操作

apt 系はリポジトリと連携し、依存関係を自動解決する高レベルツール。apt は対話的な日常利用向け、apt-get / apt-cache はスクリプト向けの安定したインターフェース。

apt update / install / upgrade

apt update                 # パッケージ情報(インデックス)を更新
apt install package        # 依存解決つきでインストール
apt upgrade                # 更新可能なパッケージを一括更新
Reading package lists... Done
Building dependency tree... Done
The following additional packages will be installed:
  libfoo1 libbar2
...

apt update はリポジトリのインデックスを取得するだけで、パッケージ本体は更新しない。実際の更新は apt upgrade。この 2 つの役割分担が試験頻出ポイント。apt install は不足する依存(上記 libfoo1 等)を自動で引き込む。

apt remove / purge

apt remove package         # 設定を残して削除
apt purge package          # 設定も含めて完全削除

apt removedpkg -r 相当(設定保持)、apt purgedpkg -P 相当(設定削除)。違いは dpkg と同じ対応関係になる。

apt-cache search / show(apt search / show)

apt-cache search keyword   # キーワードでパッケージを検索
apt-cache show package     # パッケージの詳細情報を表示
nginx - small, powerful, scalable web/proxy server
nginx-core - nginx web/proxy server (standard version)

search はインストール前に名前や説明から目的のパッケージを探す。show はバージョン・依存・説明などのメタ情報を表示する。apt search / apt show でも同じことができる。

aptitude も apt と同等の高レベルツールで、対話的 TUI と高度な依存解決を持つ。LPIC-1 では名前と位置づけ(apt 系の代替フロントエンド)を押さえておけばよい。

RPM 系: rpm の操作

rpm は RPM 系(Red Hat / Fedora / openSUSE 系)の低レベルツール。dpkg と同じく単一パッケージの導入と問い合わせを担い、依存解決はしない。

rpm -i / -U / -e: インストール・更新・削除

rpm -ivh package-1.0.x86_64.rpm    # 新規インストール
rpm -Uvh package-2.0.x86_64.rpm    # アップグレード(なければ新規導入)
rpm -e package                     # 削除(erase)

-i(install)は新規導入、-U(upgrade)は既存があれば更新・なければ新規導入。-e(erase)は削除。-v(詳細表示)と -h(進捗をハッシュ記号で表示)はよく組み合わせる。

rpm -q 系: 問い合わせる

rpm -qa                  # インストール済み全パッケージ
rpm -qi bash             # 指定パッケージの詳細情報
rpm -ql bash             # パッケージが配置したファイル一覧
rpm -qf /bin/bash        # ファイルが属するパッケージを逆引き
bash-5.1.8-9.el9.x86_64

問い合わせは必ず -q(query)を付ける。-qa(all 一覧)、-qi(info)、-ql(list files)、-qf(file 逆引き)。-ql-qf は dpkg の -L / -S に対応し、向きが逆になる点も同じ。

rpm -V: 検証する

rpm -V bash

インストール後にファイルが改変・破損していないか(サイズ・パーミッション・MD5 など)を検証する。出力がなければ変更なし、S(サイズ)や M(モード)などの文字が出れば該当項目に差異がある。

rpm2cpio package.rpm | cpio -idmv.rpm をインストールせずにファイルだけ取り出せる。単一ファイルを救出したいときの定番。LPIC-1 では存在と用途を知っていれば十分。

RPM 系: yum / dnf の操作

yum とその後継 dnf は RPM 系の高レベルツール。リポジトリ(/etc/yum.repos.d/)と連携し、依存関係を自動解決する。コマンド体系はほぼ共通で、新しいディストリでは dnf が標準。

dnf install / remove / update

dnf install package        # 依存解決つきでインストール
dnf remove package         # 削除
dnf update                 # 更新可能パッケージを一括更新
Dependencies resolved.
================================================================
 Package        Arch      Version        Repository     Size
================================================================
Installing:
 package        x86_64    1.0-1.el9      appstream      120 k
Installing dependencies:
 libfoo         x86_64    2.3-4.el9      baseos          45 k
...

dnf install は不足する依存(上記 libfoo)を自動で引き込む。yum install と書いても同じ(多くのディストリで yumdnf へのリンク)。

dnf search / info / list / repolist

dnf search keyword         # キーワードでパッケージを検索
dnf info package           # パッケージの詳細情報
dnf list installed         # インストール済み一覧
dnf repolist               # 有効なリポジトリ一覧
repo id              repo name
baseos               Rocky Linux 9 - BaseOS
appstream            Rocky Linux 9 - AppStream

search で探し、info で詳細を確認、list installed で導入済みを確認、repolist でどのリポジトリが有効かを確認する。リポジトリ設定そのものは /etc/yum.repos.d/ 配下の .repo ファイルで管理される。

両系統の対応表

操作ごとに Debian 系と RPM 系のコマンドを対応づけると、片方を覚えればもう片方は類推できる。依存解決の有無が低レベル/高レベルの境界であることを軸に整理する。

操作 Debian 低レベル Debian 高レベル RPM 低レベル RPM 高レベル
インストール dpkg -i apt install rpm -i dnf install
アップグレード dpkg -i apt upgrade rpm -U dnf update
削除 dpkg -r apt remove rpm -e dnf remove
完全削除(設定も) dpkg -P apt purge rpm -e dnf remove
検索 apt-cache search dnf search
詳細情報 apt-cache show rpm -qi dnf info
全パッケージ一覧 dpkg -l rpm -qa dnf list
パッケージのファイル一覧 dpkg -L rpm -ql
ファイル → パッケージ逆引き dpkg -S rpm -qf
依存自動解決 しない する しない する

低レベルツール(dpkg / rpm)は依存を解決しない。依存を含めて正しく導入したいなら、必ず高レベルツール(apt / dnf)を使う。手元の .deb / .rpm を直接入れて依存エラーになったときも、リポジトリ経由(apt install ./pkg.deb 等)に切り替えると解決できることが多い。

よくあるミス

実務と試験の両方で繰り返し見かける誤りを 5 つ挙げる。いずれも「低レベルと高レベルの違い」「更新の 2 段階」を理解していれば回避できる。

  1. dpkg -i で依存解決を期待する: .debdpkg -i で入れて dependency problems で止まる。依存を解決したいなら apt install ./pkg.deb を使う。
  2. rpm -e で依存エラーを無視しようとする: 他パッケージが依存しているものを rpm -e すると Failed dependencies で拒否される。むやみに --nodeps で強制せず、dnf remove に任せるのが安全。
  3. sources.list 編集後の apt update 忘れ: リポジトリを追加・変更しても apt update でインデックスを更新しないと、新しいパッケージは見つからない。
  4. apt updateapt upgrade の混同: update は情報更新だけ、実際にパッケージを新しくするのは upgradeupdate しただけで最新になったと誤解しない。
  5. -q なしの rpm クエリ: 問い合わせのつもりで rpm bash のように -q を付け忘れると意図した結果にならない。問い合わせは必ず rpm -q... の形にする。

トラブルシューティング

症状: dpkg -i で dependency problems と出て止まる

原因: dpkg は依存を解決しないため、必要なパッケージが未導入だと設定段階で失敗する

確認:

dpkg -i package.deb

対処: 依存を自動で引き込む高レベルツールに任せる。

apt install ./package.deb
apt -f install

apt install ./package.deb でローカルの .deb を依存解決つきで導入できる。すでに壊れた状態なら apt -f install--fix-broken)で依存の不足を補う。

症状: rpm -e で Failed dependencies と出る

原因: 削除しようとしたパッケージに他のパッケージが依存している

確認:

rpm -e package
rpm -q --whatrequires package

対処: 依存関係ごと安全に処理する高レベルツールを使う。

dnf remove package

dnf remove は依存関係を考慮して安全に削除する。rpm -e --nodeps での強制削除はシステムを壊す恐れがあるため避ける。

症状: apt install で対象パッケージが見つからない

原因: リポジトリのインデックスが古い、または sources.list 編集後に更新していない

確認:

cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/

対処:

apt update
apt install package

apt update でインデックスを取得し直してから再度インストールする。RPM 系で同様の症状なら dnf repolist で有効リポジトリを確認する。

作業完了チェックリスト

  • [ ] 低レベル(dpkg / rpm)と高レベル(apt / dnf)の役割を説明できる
  • [ ] dpkg -i / rpm -i が依存を解決しないことを理解した
  • [ ] apt updateapt upgrade の違いを区別できる
  • [ ] dpkg -S / rpm -qf でファイルからパッケージを逆引きできる
  • [ ] リポジトリ設定の場所(/etc/apt/sources.list(.d/) / /etc/yum.repos.d/)を把握した

まとめ

役割 Debian 系 RPM 系
低レベル dpkg rpm
高レベル apt / apt-get / apt-cache yum / dnf
インストール apt install dnf install
削除 apt remove / apt purge dnf remove
逆引き dpkg -S rpm -qf
リポジトリ /etc/apt/sources.list(.d/) /etc/yum.repos.d/

パッケージ管理は「低レベルは単一操作・問い合わせ、高レベルは依存解決つきの日常運用」という対比で押さえれば、102.4 と 102.5 を横断的に答えられる。次はファイルシステムやファイル検索と組み合わせて、システム管理の全体像を固めるとよい。

次に読む