パッケージ管理:apt・dnf でソフトを入れる
#1〜#4 でターミナル操作・ファイル操作・プロセス管理・パーミッションと学んできました。 今回は「ソフトウェアをインストールする」という、Linux を使う上で避けて通れないパッケージ管理を扱います。
パッケージ管理とは
Linux ではソフトウェアを「パッケージ」という単位で配布・管理します。 パッケージにはバイナリやライブラリ、設定ファイルがまとめられており、インストール・アンインストールを一括で行えます。
重要なのは依存解決です。あるソフトが別のライブラリを必要とするとき、それを手作業で揃えるのは大変です。 パッケージマネージャはこの依存関係を自動的に解決し、必要なものをまとめてインストールしてくれます。
パッケージの配布元をリポジトリと呼びます。OS ベンダーが管理する公式リポジトリのほか、サードパーティのリポジトリを追加することで、公式に含まれていないソフトも導入できます。
ディストリビューションとパッケージ形式の対応
Linux ディストリビューションによってパッケージ形式とコマンドが異なります。まず全体像を整理しましょう。
| 系統 | 代表ディストリ | パッケージ形式 | コマンド |
|---|---|---|---|
| Debian 系 | Ubuntu, Debian, Linux Mint | .deb | apt |
| RHEL 系 | Fedora, RHEL, Rocky Linux, AlmaLinux | .rpm | dnf |
かつて RHEL 系では yum が主流でしたが、現在は dnf が後継として標準になっています。
Arch Linux は pacman、openSUSE は zypper を使うなど、他の系統もありますが、本記事では apt と dnf に絞ります。
apt の基本(Debian/Ubuntu 系)
パッケージ情報の更新とアップグレード
apt update と apt upgrade は混同しやすいので最初に整理します。
sudo apt update # リポジトリの「カタログ」を最新に更新する(インストールは行わない)
sudo apt upgrade # インストール済みパッケージを最新バージョンに更新する
apt update は「店の棚卸し」、apt upgrade は「実際に商品を新しくする」イメージです。
apt install を実行する前に apt update を忘れると、古い情報を元に検索・取得するため失敗したり古いバージョンが入ったりします。この組み合わせはセットで覚えておきましょう。
パッケージのインストール・削除
sudo apt install vim # vim をインストール
sudo apt install vim curl git # 複数パッケージを一度に
sudo apt remove vim # vim を削除(設定ファイルは残る)
sudo apt purge vim # vim を完全削除(設定ファイルも消す)
remove は設定ファイルを残すため、再インストール時に以前の設定を引き継げます。
完全に消したい場合や、設定を初期化したい場合は purge を使います。
検索と情報表示
apt search ripgrep # パッケージ名・説明で検索
apt show ripgrep # パッケージの詳細情報(バージョン・依存関係など)を表示
apt search は大量の候補が出ることがあるので grep と組み合わせると便利です。
apt search "markdown editor" | grep -i "^[a-z]"
不要パッケージの掃除
sudo apt autoremove # 不要になった依存パッケージを一括削除
sudo apt clean # ダウンロード済みのパッケージキャッシュを削除
パッケージを削除した後、依存としてだけ入っていたパッケージが残ることがあります。
autoremove を定期的に実行しておくとディスクの節約になります。
dnf の基本(RHEL/Fedora 系)
dnf の構文は apt と概念的に対応しているため、一方を知っていればもう一方はすぐ覚えられます。
| 操作 | apt | dnf |
|---|---|---|
| リスト更新 | apt update | (自動 / dnf check-update) |
| インストール | apt install | dnf install |
| アップグレード | apt upgrade | dnf update |
| 削除 | apt remove | dnf remove |
| 検索 | apt search | dnf search |
| 詳細表示 | apt show | dnf info |
sudo dnf install vim # vim をインストール
sudo dnf update # 全パッケージを更新
sudo dnf update vim # vim のみ更新
sudo dnf remove vim # vim を削除
dnf search ripgrep # パッケージを検索
dnf info ripgrep # 詳細情報を表示
apt との大きな違いとして、dnf は apt update に相当する明示的なリスト更新コマンドを通常必要とせず、dnf install 時に自動でリポジトリ情報を取得します。dnf check-update で更新可能なパッケージを確認するだけで更新はしない、という使い方もできます。
リポジトリの追加と直接インストール
apt: PPA の追加(Ubuntu)
Ubuntu では Launchpad の PPA(Personal Package Archive)を追加することで、公式リポジトリにないソフトを apt で管理できます。
sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt update
sudo apt install neovim
PPA はサードパーティが管理するものであり、公式リポジトリほど品質保証はありません。 有名プロジェクトの公式 PPA であれば概ね信頼できますが、出どころのわからないものは慎重に。
dnf: リポジトリの追加
RHEL 系では dnf config-manager や .repo ファイルでリポジトリを追加します。
EPEL(Extra Packages for Enterprise Linux)は RHEL 系でよく使われる追加リポジトリです。
sudo dnf install epel-release # EPEL リポジトリを追加(RHEL/Rocky/AlmaLinux)
sudo dnf config-manager --add-repo https://example.com/example.repo
.deb / .rpm を直接インストールする
ブラウザ経由でダウンロードした .deb や .rpm を直接インストールすることもできます。
# Debian 系: dpkg でインストール
sudo dpkg -i package.deb
# RHEL 系: rpm でインストール
sudo rpm -i package.rpm
ただし dpkg や rpm は依存関係を自動解決しません。依存が足りなければエラーになります。
その場合は以下のようにして依存を補完できます。
# dpkg でインストール後に依存を解決する
sudo apt install -f
# dnf でローカルファイルをインストール(依存も解決)
sudo dnf install ./package.rpm
dnf install ./ のように相対パスを付けてローカルファイルを指定すると、dnf が依存も含めて解決してくれます。apt でも同様に sudo apt install ./package.deb と書けば依存を自動処理してくれます(Ubuntu 18.04 以降)。
実践的なコツと落とし穴
apt update を忘れない: apt install が「パッケージが見つからない」と言ったとき、多くの場合 apt update を実行していないことが原因です。新しいマシンやコンテナ環境でのセットアップ時は必ず最初に実行しましょう。
upgrade は慎重に: apt upgrade はすべてのパッケージを更新します。本番サーバーでは影響範囲を事前に確認し、apt upgrade --dry-run で変更予定を確認してから実行するのが安全です。
snap / flatpak との棲み分け: Ubuntu では snap、Fedora / GNOME 環境では flatpak を通じてサンドボックス化されたアプリを配布することが増えています。コマンドラインツールは apt / dnf、デスクトップアプリは flatpak という分け方をしている人も多く、どちらで入れたかを把握しておくと後々の管理が楽になります。
パッケージ名は検索で確認する: よく知られたコマンド名(例: fd)とパッケージ名(fd-find on Debian 系)が異なることがあります。インストールしたのにコマンドが見つからないときは apt show パッケージ名 や dpkg -L パッケージ名 でインストール内容を確認してみましょう。
まとめ
パッケージ管理の要点をまとめます。
aptは Debian/Ubuntu 系、dnfは RHEL/Fedora 系が担当apt updateはカタログ更新、apt upgradeが実際の更新(この違いは必須知識)- 不要パッケージは
apt autoremoveで定期的に掃除する .deb/.rpmの直接インストールは依存解決が自動でされない点に注意- サードパーティリポジトリは出どころを確認してから追加する
次回(#6)はテキスト処理をテーマに、grep ・ awk ・ sed といったコマンドラインでのデータ抽出・加工を扱います。
パッケージ管理で気になるツールを入れながら、引き続き手を動かしていきましょう。