LPIC Level1 復習ラジオ 08:パッケージ管理
音声
目次
パッケージ管理とは
Linuxでは、アプリケーションやライブラリをパッケージという単位で管理します。
パッケージには、実行ファイルや設定ファイルだけでなく、名前、バージョン、対応するCPUアーキテクチャ、必要な別パッケージ、インストール時に実行するスクリプトなどのメタデータも含まれます。
パッケージ管理システムを使うと、ソフトウェアのインストール、更新、削除、検索、整合性確認を一定の方法で行えます。
パッケージ・依存関係・リポジトリ
依存関係
あるパッケージが動作するために、別のライブラリやパッケージを必要とする関係を依存関係と呼びます。
例えば、アプリケーションAがライブラリBを必要とする場合、Aだけをインストールしても正常に動作しません。apt、yum、dnfは、設定されたリポジトリの情報を使って必要な依存パッケージを探し、まとめて処理します。
競合
同時にインストールできないパッケージや、同じ機能・ファイルを競合する形で提供するパッケージがある場合、パッケージ管理ツールは処理を拒否したり、入れ替えを提案したりします。
リポジトリ
リポジトリは、パッケージ本体と、パッケージ名、バージョン、依存関係などのメタデータを公開する保管場所です。
パッケージ管理ツールは、リポジトリのメタデータを取得して、検索や依存関係の解決を行います。
パッケージファイルとパッケージ名
ローカルにあるパッケージファイルを指定する場合と、リポジトリ上のパッケージ名を指定する場合は区別します。
# ローカルのDebianパッケージファイル
sudo dpkg -i ./example_1.0_amd64.deb
# リポジトリ上のパッケージ名
sudo apt install example
ローカルファイルを直接扱う基本ツールは、依存関係を自動取得しないことがあります。一方、上位ツールはリポジトリを参照して依存関係を解決します。
RPM系とDebian系
LPIC Level1では、RPM系とDebian系の両方を整理します。
| 分類 | RPM系 | Debian系 |
|---|---|---|
| 代表的なディストリビューション | Red Hat Enterprise Linux、Fedora、Rocky Linuxなど | Debian、Ubuntuなど |
| パッケージ形式 | .rpm |
.deb |
| 基本ツール | rpm |
dpkg |
| 上位ツール | yum、dnf |
apt、apt-get、apt-cache |
| 主なリポジトリ設定 | /etc/yum.repos.d/*.repo |
/etc/apt/sources.list、/etc/apt/sources.list.d/ |
rpmやdpkgは、インストール済みデータベースへの問い合わせや、手元のパッケージファイルの操作に使われます。
apt、yum、dnfは、リポジトリからパッケージ情報を取得し、依存関係を解決しながら複数のパッケージを一つの処理単位として扱います。
rpm
rpmは、RPMパッケージのインストール、更新、削除、問い合わせ、検証などを行うコマンドです。
インストール・更新・削除
sudo rpm -ivh package.rpm
sudo rpm -Uvh package.rpm
sudo rpm -Fvh package.rpm
sudo rpm -e package_name
| オプション | 意味 |
|---|---|
-i |
パッケージを新規インストールする |
-U |
アップグレードする。未導入なら新規インストールする |
-F |
すでに導入済みのパッケージだけを更新する |
-e |
パッケージを削除する |
-v |
詳細を表示する |
-h |
進行状況をハッシュ記号で表示する |
rpm -eでは、通常、パッケージファイル名ではなくインストール済みのパッケージ名を指定します。
rpmは必要な依存関係を確認しますが、通常は不足するパッケージをリポジトリから自動取得しません。日常的なインストールでは、dnfやyumを使う方が安全です。
問い合わせ
rpm -q bash
rpm -qa
rpm -qi bash
rpm -ql bash
rpm -qf /bin/bash
rpm -qp package.rpm
rpm -qpl package.rpm
| コマンド | 確認内容 |
|---|---|
rpm -q パッケージ名 |
指定したパッケージが導入済みか確認する |
rpm -qa |
導入済みの全パッケージを表示する |
rpm -qi |
パッケージの詳細情報を表示する |
rpm -ql |
パッケージから導入されたファイルを表示する |
rpm -qf ファイル |
そのファイルを所有するパッケージを調べる |
-p |
インストール済みではなく、パッケージファイルを問い合わせ対象にする |
検証
rpm -V bash
rpm -Va
rpm -K package.rpm
rpm -Vは、インストール時に記録された情報と現在のファイル属性を比較します。何も表示されなければ、検査対象に差異が見つからなかったことを表します。
rpm -Kは、パッケージファイルの署名やダイジェストを確認します。
RPMデータベースの場所は、ディストリビューションやRPMのバージョンにより異なることがあります。実際の設定値は次のように確認できます。
rpm --eval '%{_dbpath}'
yum
yumは、RPMリポジトリを利用して、依存関係を解決しながらパッケージを管理する上位ツールです。
古いRHEL系環境では従来のYUMが使われてきました。RHEL 8以降では、yumコマンドがDNF技術を基盤とするYUM v4として提供され、互換性のためdnfとほぼ同様に利用できる環境があります。
sudo yum install package_name
sudo yum remove package_name
sudo yum update
yum search keyword
yum info package_name
yum list installed
yum provides '/usr/bin/example'
yum repolist
sudo yum clean all
| サブコマンド | 主な用途 |
|---|---|
install |
パッケージと必要な依存関係を導入する |
remove |
パッケージを削除する |
update |
更新可能なパッケージを更新する |
search |
名前や説明からパッケージを検索する |
provides |
指定したファイルや機能を提供するパッケージを探す |
repolist |
利用可能なリポジトリを表示する |
clean all |
取得済みのメタデータやキャッシュを削除する |
-yを付けると確認に自動でyesと答えます。ただし、削除や大量更新では処理内容を確認できなくなるため、目的が明確な場合に使います。
dnf
dnfは、Fedoraや新しいRHEL系ディストリビューションで使われるRPM系のパッケージ管理ツールです。
パッケージの検索、依存関係の解決、インストール、更新、削除、リポジトリ管理、処理履歴の確認などを行えます。
sudo dnf install package_name
sudo dnf upgrade
sudo dnf remove package_name
sudo dnf autoremove
dnf search keyword
dnf info package_name
dnf list installed
dnf provides '/usr/bin/example'
dnf repolist
dnf history
sudo dnf makecache
sudo dnf clean all
yumとdnfの対応
基本的な操作では、yum installとdnf install、yum removeとdnf removeのように、似たサブコマンドを利用できます。
ただし、古いYUMとDNFでは細かな挙動やオプションに差があります。対象システムのバージョンとmanページを確認します。
履歴
dnf history
dnf history info transaction_id
dnf historyでは、過去のインストール、更新、削除などのトランザクションを確認できます。
不要な依存パッケージ
dnf autoremoveは、依存関係として自動導入された後、どのユーザー導入パッケージからも必要とされなくなったパッケージを削除対象にします。
dpkg
dpkgは、Debianパッケージをインストール、削除、問い合わせ、設定する基本ツールです。
公式manページでは、Debianパッケージを扱う中間レベルのツールと説明され、一般利用者向けの上位インターフェースとしてaptが案内されています。
インストール・削除・設定
sudo dpkg -i package.deb
sudo dpkg -r package_name
sudo dpkg -P package_name
sudo dpkg --configure -a
| 操作 | 意味 |
|---|---|
-i |
ローカルのDebianパッケージファイルをインストールする |
-r |
設定ファイルを残してパッケージを削除する |
-P |
設定ファイルも含めてパッケージを完全削除する |
--configure -a |
展開済みだが未設定のパッケージをまとめて設定する |
dpkg -iはローカルファイルを展開・導入しますが、不足する依存パッケージをリポジトリから自動取得しません。ローカルの.debを依存関係込みで導入したい場合は、次のようにaptへファイルパスを渡せます。
sudo apt install ./package.deb
問い合わせ
dpkg -l
dpkg -s bash
dpkg -L bash
dpkg -S /bin/bash
dpkg-deb -I package.deb
dpkg-deb -c package.deb
| コマンド | 確認内容 |
|---|---|
dpkg -l |
パッケージ一覧と状態を表示する |
dpkg -s |
インストール済みパッケージの状態や詳細を表示する |
dpkg -L |
パッケージから導入されたファイルを表示する |
dpkg -S ファイル |
そのファイルを所有するパッケージを調べる |
dpkg-deb -I |
.debファイルのパッケージ情報を表示する |
dpkg-deb -c |
.debファイルの内容一覧を表示する |
dpkgの管理情報は、主に/var/lib/dpkg/以下に保存されます。/var/lib/dpkg/statusには、パッケージの状態情報が記録されます。
apt
aptは、Debian系のパッケージ管理システムに対する高レベルのコマンドラインインターフェースです。
リポジトリからパッケージ情報を取得し、依存関係を解決しながらインストール、更新、削除、検索などを行います。
更新情報とパッケージの更新
sudo apt update
apt list --upgradable
sudo apt upgrade
sudo apt full-upgrade
| コマンド | 意味 |
|---|---|
apt update |
リポジトリから最新のパッケージ一覧を取得する |
apt list --upgradable |
更新可能なパッケージを表示する |
apt upgrade |
必要なら新規依存パッケージを追加するが、既存パッケージを削除せずに更新する |
apt full-upgrade |
システム全体の更新に必要な場合、既存パッケージの削除も含めて処理する |
apt updateだけでは、通常、インストール済みパッケージ本体は更新されません。更新候補を判断するためのパッケージ一覧を新しくします。
インストール・削除
sudo apt install package_name
sudo apt reinstall package_name
sudo apt remove package_name
sudo apt purge package_name
sudo apt autoremove
remove:パッケージを削除するが、パッケージ管理対象の設定ファイルを一部残すpurge:パッケージ管理対象の設定ファイルも含めて削除するautoremove:依存関係として導入された後、不要になったパッケージを削除する
purgeを実行しても、通常、利用者のホームディレクトリに作られた個人データや個人設定まで自動削除するわけではありません。
検索・確認
apt search keyword
apt show package_name
apt list --installed
apt-cache policy package_name
apt-cache depends package_name
apt-cache rdepends package_name
apt-cache policyでは、インストール済みの版、候補となる版、どのリポジトリから取得されるかなどを確認できます。
aptとapt-get
aptは、人が対話的に利用しやすい表示や既定値を持つコマンドです。スクリプトでは、動作の互換性を重視してapt-getやapt-cacheなどの専用コマンドが使われることがあります。
リポジトリの設定
Debian系
APTの主な取得元は、次のファイルで設定されます。
/etc/apt/sources.list
/etc/apt/sources.list.d/*.list
/etc/apt/sources.list.d/*.sources
.listは一行形式、.sourcesはdeb822形式の設定に使われます。近年のDebian系環境では、.sources形式を利用する構成も増えています。
apt policy
apt-cache policy
リポジトリ設定を変更した後は、通常、apt updateでパッケージ一覧を取得し直します。
RPM系
DNFやYUMのリポジトリは、主に次の場所で設定されます。
/etc/dnf/dnf.conf
/etc/yum.conf
/etc/yum.repos.d/*.repo
.repoファイルには、リポジトリID、表示名、取得元、使用可否、GPG署名確認の設定などを記述します。
dnf repolist
dnf repolist --all
dnf repoinfo
一時的に特定のリポジトリだけを有効・無効にするオプションもあります。
dnf --enablerepo=repo_id install package_name
dnf --disablerepo=repo_id upgrade
署名・キャッシュ・トラブル対応
署名と信頼
パッケージ管理システムは、パッケージやリポジトリメタデータの署名を確認し、信頼された鍵で作成されたものか、途中で改変されていないかを検証します。
署名確認を無効化するオプションは存在しますが、安全性を下げるため、原因を理解せず常用しません。鍵やリポジトリ設定の問題を確認します。
キャッシュとメタデータ
# Debian系
sudo apt update
sudo apt clean
sudo apt autoclean
# RPM系
sudo dnf makecache
sudo dnf clean all
apt cleanは取得済みのパッケージファイルを削除します。apt autocleanは、現在取得できなくなった古いパッケージファイルなどを削除します。
dnf makecacheは、リポジトリのメタデータキャッシュを作成します。dnf clean allは、保存されたメタデータやパッケージキャッシュなどを削除します。
よくある切り分け
| 症状 | 主な確認内容 |
|---|---|
| パッケージが見つからない | パッケージ名、リポジトリ設定、有効状態、メタデータ更新 |
| 名前解決や接続で失敗する | DNS、プロキシ、時刻、証明書、リポジトリURL、ネットワーク疎通 |
| 依存関係エラー | 混在したリポジトリ、保留パッケージ、途中で止まった処理、競合 |
| dpkg処理が中断されている | sudo dpkg --configure -a、その後のAPT修復処理 |
| どのパッケージのファイルか知りたい | rpm -qf ファイル、dpkg -S ファイル |
基本の確認コマンド
# RPM系
rpm -q package_name
rpm -qa
dnf repolist
dnf info package_name
dnf history
# Debian系
dpkg -s package_name
dpkg -l
apt-cache policy package_name
apt list --upgradable
詳しい使い方は、次のマニュアルでも確認できます。
man rpm
man dnf
man yum
man dpkg
man dpkg-query
man apt
man apt-get
man apt-cache
man sources.list
30秒チェック
- RPM系で、ローカルのRPMパッケージを直接扱う基本コマンドは何でしょうか。
- Debian系で、ローカルのDebianパッケージを直接扱う基本コマンドは何でしょうか。
apt updateは、主に何を更新するコマンドでしょうか。apt removeとapt purgeの主な違いは何でしょうか。- 指定したファイルを所有するインストール済みパッケージを調べる、RPM系とDebian系のコマンドは何でしょうか。
rpm -Uとrpm -Fの違いは何でしょうか。
答えを表示
rpmdpkg- 設定されたリポジトリから取得するパッケージ一覧・メタデータ
removeは設定ファイルを一部残し、purgeはパッケージ管理対象の設定ファイルも削除する- RPM系は
rpm -qf ファイル、Debian系はdpkg -S ファイル -Uは未導入なら新規インストールも行い、-Fは導入済みのパッケージだけを更新する
要約
- パッケージには、ソフトウェア本体と名前、バージョン、依存関係などのメタデータが含まれます。
- リポジトリは、パッケージ本体とパッケージ情報を配布する保管場所です。
- RPM系の基本ツールは
rpm、上位ツールはyumやdnfです。 - Debian系の基本ツールは
dpkg、上位ツールはaptです。 rpmとdpkgは、ローカルパッケージやインストール済みデータベースを直接扱います。apt、yum、dnfは、リポジトリを使って依存関係を解決します。apt updateはパッケージ一覧を更新し、apt upgradeはインストール済みパッケージを更新します。removeとpurge、rpm -Uとrpm -Fの違いを区別します。- ファイルの所有パッケージは、RPM系では
rpm -qf、Debian系ではdpkg -Sで確認できます。 - トラブル時は、リポジトリ設定、メタデータ、依存関係、署名、ネットワークを順番に確認します。
参考資料
- RPM Project:rpm(8)
- RPM Package Manager 公式サイト
- DNF Documentation:Command Reference
- DNF Documentation:Configuration Reference
- Red Hat Enterprise Linux 9:DNF commands list
- Red Hat Enterprise Linux 8:Package management with YUM/DNF
- Debian Manpages:dpkg(1)
- Debian Manpages:apt(8)
- Debian Manpages:apt-get(8)
- Debian Manpages:apt-cache(8)
- Debian Manpages:sources.list(5)
- Debian Reference:Debian package management