Linuxを扱う上で避けて通れないのがパッケージ管理です。ソフトウェアのインストール、更新、削除を効率的に行うためには、使用しているディストリビューションに応じた適切なパッケージマネージャーの理解が必要です。本記事では、Linuxパッケージ管理の基本概念から、主要なパッケージマネージャー(apt、yum、dnf、pacman)の具体的な使い方まで、体系的に解説します。

前提条件と実行環境

本記事のコマンドは以下の環境で動作確認しています。

ディストリビューション バージョン パッケージマネージャー
Ubuntu 24.04 LTS apt
Debian 12 apt
AlmaLinux 9 dnf
Rocky Linux 9 dnf
CentOS Stream 9 dnf
Fedora 41 dnf
Arch Linux 最新 pacman

管理者権限(root権限)が必要なコマンドにはsudoを付けて実行します。

Linuxパッケージ管理の基本概念

パッケージとは

Linuxにおけるパッケージとは、ソフトウェアを構成するファイル群(実行ファイル、設定ファイル、ライブラリ、ドキュメントなど)とメタデータ(名前、バージョン、依存関係など)をまとめたアーカイブファイルです。

パッケージには以下の情報が含まれています。

  • コンパイル済みのバイナリファイル
  • 設定ファイルのテンプレート
  • インストール・アンインストールスクリプト
  • 依存関係の定義
  • ライセンス情報

リポジトリの仕組み

リポジトリ(repository)は、パッケージを配布するためのサーバーです。パッケージマネージャーはリポジトリからパッケージ情報を取得し、必要なパッケージをダウンロード・インストールします。

flowchart LR
    subgraph "リポジトリサーバー"
        A[パッケージデータベース]
        B[パッケージファイル]
    end
    
    subgraph "ローカルシステム"
        C[パッケージマネージャー]
        D[ローカルDB]
        E[インストール済みパッケージ]
    end
    
    A -->|メタデータ同期| D
    B -->|ダウンロード| C
    C -->|インストール| E

リポジトリには以下の種類があります。

  • 公式リポジトリ: ディストリビューションが公式に提供するパッケージ
  • サードパーティリポジトリ: 企業やコミュニティが提供する追加パッケージ
  • ローカルリポジトリ: 組織内で管理するプライベートなパッケージ

依存関係の管理

パッケージは他のパッケージに依存していることが多く、この関係を「依存関係」と呼びます。パッケージマネージャーは依存関係を自動的に解決し、必要なパッケージを一括でインストールします。

flowchart TD
    A[nginx] --> B[openssl]
    A --> C[pcre2]
    A --> D[zlib]
    B --> E[glibc]
    C --> E
    D --> E

この仕組みにより、手動で依存パッケージを探してインストールする必要がなくなります。

Debian系ディストリビューションのパッケージ管理

dpkgとaptの関係

Debian系(Debian、Ubuntu、Linux Mintなど)では、低レベルなパッケージ操作にdpkg、高レベルな操作にapt(またはapt-get)を使用します。

ツール 役割 依存関係解決
dpkg .debファイルの直接操作 なし
apt リポジトリからのパッケージ管理 あり

通常の運用ではaptを使用し、dpkgは直接ダウンロードした.debファイルをインストールする場合などに使用します。

aptの基本コマンド

パッケージリストの更新

リポジトリから最新のパッケージ情報を取得します。パッケージをインストールする前に必ず実行してください。

1
sudo apt update

実行結果の例です。

1
2
3
4
5
6
7
取得:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
取得:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
取得:3 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
パッケージリストを読み込んでいます... 完了
依存関係ツリーを構築しています... 完了
状態情報を読み取っています... 完了
アップグレードできるパッケージが 15 個あります。

パッケージの検索

インストール可能なパッケージを検索します。

1
apt search nginx

より詳細な情報を表示する場合はapt showを使用します。

1
apt show nginx
1
2
3
4
5
6
7
Package: nginx
Version: 1.24.0-2ubuntu1
Priority: optional
Section: web
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Installed-Size: 44.0 kB
Depends: nginx-core (<< 1.24.0-2ubuntu1.1~) | nginx-full (<< 1.24.0-2ubuntu1.1~)

パッケージのインストール

パッケージをインストールします。依存関係は自動的に解決されます。

1
sudo apt install nginx

複数のパッケージを同時にインストールする場合はスペースで区切ります。

1
sudo apt install nginx curl wget

バージョンを指定してインストールする場合は以下のように記述します。

1
sudo apt install nginx=1.24.0-2ubuntu1

パッケージの更新

インストール済みのパッケージを最新バージョンに更新します。

1
sudo apt upgrade

より積極的な更新(不要なパッケージの削除も含む)を行う場合はfull-upgradeを使用します。

1
sudo apt full-upgrade

パッケージの削除

パッケージを削除します。設定ファイルは残ります。

1
sudo apt remove nginx

設定ファイルも含めて完全に削除する場合はpurgeを使用します。

1
sudo apt purge nginx

不要になった依存パッケージを削除する場合はautoremoveを使用します。

1
sudo apt autoremove

dpkgの基本コマンド

.debファイルを直接操作する場合に使用します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# .debファイルからインストール
sudo dpkg -i package.deb

# インストール済みパッケージの一覧
dpkg -l

# 特定パッケージの情報表示
dpkg -s nginx

# パッケージに含まれるファイル一覧
dpkg -L nginx

# ファイルがどのパッケージに属するか確認
dpkg -S /usr/sbin/nginx

aptリポジトリの追加

サードパーティのリポジトリを追加する場合は、GPGキーとリポジトリ情報を登録します。

1
2
3
4
5
6
7
8
# GPGキーの追加(例:Docker公式リポジトリ)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# リポジトリの追加
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# パッケージリストの更新
sudo apt update

RHEL系ディストリビューションのパッケージ管理

rpmとyum/dnfの関係

RHEL系(RHEL、AlmaLinux、Rocky Linux、CentOS、Fedoraなど)では、低レベルなパッケージ操作にrpm、高レベルな操作にyumまたはdnfを使用します。

ツール 役割 備考
rpm .rpmファイルの直接操作 依存関係解決なし
yum 従来のパッケージマネージャー RHEL 7以前で主に使用
dnf 次世代パッケージマネージャー RHEL 8以降、Fedoraで使用

現在のRHEL系ディストリビューションではdnfが標準です。yumコマンドは多くの環境でdnfへのシンボリックリンクになっています。

dnfの基本コマンド

パッケージリストの更新

リポジトリのメタデータを更新します。

1
sudo dnf check-update

特定のパッケージの更新を確認する場合は以下のように記述します。

1
sudo dnf check-update nginx

パッケージの検索

パッケージを検索します。

1
dnf search nginx

詳細情報を表示します。

1
dnf info nginx
1
2
3
4
5
6
7
8
9
Available Packages
Name         : nginx
Version      : 1.24.0
Release      : 4.el9
Architecture : x86_64
Size         : 41 k
Source       : nginx-1.24.0-4.el9.src.rpm
Repository   : appstream
Summary      : A high performance web server and reverse proxy server

パッケージのインストール

パッケージをインストールします。

1
sudo dnf install nginx

確認プロンプトをスキップする場合は-yオプションを付けます。

1
sudo dnf install -y nginx curl wget

パッケージの更新

システム全体を更新します。

1
sudo dnf upgrade

特定のパッケージのみを更新する場合は以下のように記述します。

1
sudo dnf upgrade nginx

パッケージの削除

パッケージを削除します。

1
sudo dnf remove nginx

不要な依存パッケージも一緒に削除する場合はautoremoveを使用します。

1
sudo dnf autoremove

パッケージグループの操作

関連するパッケージをグループとしてまとめてインストールできます。

1
2
3
4
5
6
7
8
# 利用可能なグループの一覧
dnf group list

# グループのインストール
sudo dnf group install "Development Tools"

# グループの削除
sudo dnf group remove "Development Tools"

rpmの基本コマンド

.rpmファイルを直接操作する場合に使用します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# .rpmファイルからインストール
sudo rpm -ivh package.rpm

# インストール済みパッケージの一覧
rpm -qa

# 特定パッケージの情報表示
rpm -qi nginx

# パッケージに含まれるファイル一覧
rpm -ql nginx

# ファイルがどのパッケージに属するか確認
rpm -qf /usr/sbin/nginx

dnfリポジトリの追加

EPELリポジトリなどの追加リポジトリを有効化する例です。

1
2
3
4
5
6
7
8
9
# EPELリポジトリの追加(AlmaLinux/Rocky Linux 9)
sudo dnf install epel-release

# リポジトリの一覧表示
dnf repolist

# 特定のリポジトリを有効化/無効化
sudo dnf config-manager --enable epel
sudo dnf config-manager --disable epel

yumとdnfの互換性

yumコマンドの多くはdnfでそのまま使用できます。以下は対応表です。

yum dnf 説明
yum install dnf install パッケージのインストール
yum update dnf upgrade パッケージの更新
yum remove dnf remove パッケージの削除
yum search dnf search パッケージの検索
yum info dnf info パッケージ情報の表示
yum list dnf list パッケージ一覧の表示
yum clean all dnf clean all キャッシュの削除

Arch系ディストリビューションのパッケージ管理

pacmanの特徴

Arch Linux系(Arch Linux、Manjaro、EndeavourOSなど)ではpacmanを使用します。pacmanはシンプルながら強力なパッケージマネージャーで、以下の特徴があります。

  • バイナリパッケージ形式(.pkg.tar.zst)を使用
  • ローリングリリースモデルに最適化
  • 公式リポジトリとAUR(Arch User Repository)の2層構造

pacmanの基本コマンド

pacmanのオプションは大文字で操作の種類を指定します。

オプション 説明
-S Sync(同期) - リポジトリからの操作
-R Remove(削除)
-Q Query(問い合わせ) - ローカルデータベースの操作
-F Files - ファイルデータベースの操作
-U Upgrade - ローカルパッケージのインストール

パッケージリストの更新とシステム更新

データベースの同期とシステム全体の更新を行います。Arch Linuxでは部分的な更新は推奨されていないため、常にフルアップグレードを行います。

1
sudo pacman -Syu

各オプションの意味は以下の通りです。

  • -S: 同期操作
  • -y: データベースの更新
  • -u: アップグレード

パッケージの検索

リポジトリ内のパッケージを検索します。

1
pacman -Ss nginx
1
2
3
4
extra/nginx 1.26.2-1
    Lightweight HTTP server and IMAP/POP3 proxy server
extra/nginx-mainline 1.27.3-1
    Lightweight HTTP server and IMAP/POP3 proxy server, mainline release

詳細情報を表示します。

1
pacman -Si nginx

パッケージのインストール

パッケージをインストールします。

1
sudo pacman -S nginx

複数のパッケージを同時にインストールできます。

1
sudo pacman -S nginx curl wget

パッケージの削除

パッケージを削除します。

1
sudo pacman -R nginx

依存関係で不要になったパッケージも一緒に削除する場合は-sオプションを追加します。

1
sudo pacman -Rs nginx

設定ファイルも含めて削除する場合は-nオプションを追加します。

1
sudo pacman -Rns nginx

インストール済みパッケージの確認

ローカルにインストールされているパッケージを操作します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# インストール済みパッケージの一覧
pacman -Q

# 明示的にインストールしたパッケージのみ
pacman -Qe

# 孤立パッケージ(依存関係で不要になったもの)
pacman -Qdt

# パッケージの詳細情報
pacman -Qi nginx

# パッケージに含まれるファイル一覧
pacman -Ql nginx

パッケージキャッシュの管理

pacmanはダウンロードしたパッケージを/var/cache/pacman/pkg/に保存します。キャッシュを管理するにはpaccacheコマンド(pacman-contribパッケージ)を使用します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# pacman-contribのインストール
sudo pacman -S pacman-contrib

# 古いパッケージを削除(直近3バージョンを保持)
sudo paccache -r

# 直近1バージョンのみ保持
sudo paccache -rk1

# キャッシュの完全削除
sudo pacman -Scc

AUR(Arch User Repository)の活用

AURはコミュニティが管理するパッケージリポジトリです。公式リポジトリにないソフトウェアを入手できますが、公式サポートはありません。

AURからパッケージをインストールするには、AURヘルパー(yay、paruなど)を使用するのが一般的です。

1
2
3
4
5
6
7
8
# yayのインストール(手動ビルド)
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

# yayでAURパッケージをインストール
yay -S visual-studio-code-bin

各パッケージマネージャーのコマンド比較

主要なパッケージマネージャーのコマンド対応表です。

操作 apt dnf pacman
DB更新 apt update dnf check-update pacman -Sy
システム更新 apt upgrade dnf upgrade pacman -Syu
インストール apt install pkg dnf install pkg pacman -S pkg
削除 apt remove pkg dnf remove pkg pacman -R pkg
検索 apt search pkg dnf search pkg pacman -Ss pkg
情報表示 apt show pkg dnf info pkg pacman -Si pkg
ファイル検索 dpkg -S file rpm -qf file pacman -Qo file
キャッシュ削除 apt clean dnf clean all pacman -Sc
不要パッケージ削除 apt autoremove dnf autoremove pacman -Rns $(pacman -Qdtq)

実践的なパッケージ管理のベストプラクティス

定期的なシステム更新

セキュリティパッチを適用するため、定期的にシステムを更新してください。

1
2
3
4
5
6
7
8
# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y

# RHEL/AlmaLinux/Rocky Linux
sudo dnf upgrade -y

# Arch Linux
sudo pacman -Syu

不要パッケージの削除

ディスク容量を節約し、システムをクリーンに保ちます。

1
2
3
4
5
6
7
8
9
# Debian/Ubuntu
sudo apt autoremove && sudo apt clean

# RHEL/AlmaLinux/Rocky Linux
sudo dnf autoremove && sudo dnf clean all

# Arch Linux
sudo pacman -Rns $(pacman -Qdtq) 2>/dev/null
sudo paccache -r

パッケージのロック(更新除外)

特定のパッケージを更新対象から除外する方法です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Debian/Ubuntu(apt-markを使用)
sudo apt-mark hold nginx
sudo apt-mark unhold nginx  # 解除

# RHEL/AlmaLinux/Rocky Linux(versionlockを使用)
sudo dnf install dnf-plugins-core
sudo dnf versionlock add nginx
sudo dnf versionlock delete nginx  # 解除

# Arch Linux(pacman.confで設定)
# /etc/pacman.conf の [options] セクションに追加
# IgnorePkg = nginx

トラブルシューティング

パッケージ管理で問題が発生した場合の対処法です。

依存関係の問題

1
2
3
4
5
# Debian/Ubuntu - 壊れた依存関係の修復
sudo apt --fix-broken install

# RHEL/AlmaLinux/Rocky Linux - 依存関係の自動解決
sudo dnf distro-sync

キャッシュの破損

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Debian/Ubuntu
sudo rm -rf /var/lib/apt/lists/*
sudo apt update

# RHEL/AlmaLinux/Rocky Linux
sudo dnf clean all
sudo rm -rf /var/cache/dnf/*
sudo dnf makecache

# Arch Linux
sudo rm -rf /var/lib/pacman/sync/*
sudo pacman -Sy

まとめ

Linuxパッケージ管理は、ディストリビューションによって使用するツールが異なりますが、基本的な概念(リポジトリ、依存関係、パッケージのライフサイクル)は共通しています。

本記事で解説したポイントをまとめます。

  • Debian系: apt/dpkgを使用。aptは依存関係を自動解決する高レベルツール
  • RHEL系: dnf(旧yum)/rpmを使用。dnfは現在の標準パッケージマネージャー
  • Arch系: pacmanを使用。シンプルなオプション体系とローリングリリースに最適化

使用しているディストリビューションに応じたパッケージマネージャーを適切に使いこなすことで、システム管理の効率が大幅に向上します。

参考リンク