Linuxのパッケージ管理とは?apt・dnfを初心者向けに解説
Linuxサーバーを使っていると、新しいソフトウェアをインストールする場面があります。
たとえば、
- Webサーバー
- データベース
- Java
- Git
- curl
- 各種サーバーツール
などです。
Windowsでは、Webサイトからインストーラーをダウンロードしてソフトウェアをインストールすることがあります。
Linuxでもそのような方法はありますが、一般的にはパッケージマネージャーを利用してソフトウェアを管理できます。
今回は、
- パッケージ
- パッケージマネージャー
- リポジトリ
- 依存関係
aptdnf
について学びながら、Linuxへソフトウェアをインストールする基本を理解していきます。
パッケージとは?
**パッケージ(Package)**とは、Linuxへソフトウェアを導入しやすい形にまとめたものです。
単純にプログラム本体だけが入っているわけではなく、ソフトウェアをLinuxへインストール・管理するために必要な情報なども含まれています。
イメージすると、
ソフトウェア
↓
Linuxへ導入しやすい形にまとめる
↓
パッケージ
という関係です。
Linuxでは、このパッケージを利用してさまざまなソフトウェアを管理します。
パッケージマネージャーとは?
パッケージを管理する仕組みが**パッケージマネージャー(Package Manager)**です。
パッケージマネージャーを利用すると、
ソフトウェアを探す
↓
インストールする
↓
アップデートする
↓
不要になったら削除する
といった操作をまとめて行えます。
さらに、後ほど説明する依存関係も処理してくれます。
そのためLinuxでは、
「ソフトウェアを入れたい」
となったとき、まずパッケージマネージャーを利用できないか確認することが多くあります。
Linuxによって使うパッケージマネージャーが違う
Linuxには複数のディストリビューションがあります。
ディストリビューションによって、利用するパッケージ管理の仕組みも異なります。
代表的なものを見てみましょう。
| 系統 | ディストリビューション例 | 主に利用するコマンド |
|---|---|---|
| Debian系 | Debian / Ubuntu | apt |
| RHEL系 | Red Hat Enterprise Linux / Rocky Linux / AlmaLinux | dnf |
たとえばUbuntuを使っている記事で、
sudo apt install パッケージ名
と書かれていても、Rocky Linuxではそのまま利用できません。
Rocky Linuxなどでは、
sudo dnf install パッケージ名
のように操作します。
Linuxを勉強するときは、
「自分がどのディストリビューションを使っているのか」
を意識することが大切です。
リポジトリとは?
パッケージマネージャーは、どこからソフトウェアを取得しているのでしょうか。
ここで登場するのが**リポジトリ(Repository)**です。
リポジトリは、簡単にいうと、
Linuxで利用するパッケージが公開・管理されている場所
です。
イメージすると、
Linuxサーバー
│
│ パッケージを要求
↓
リポジトリ
├── パッケージA
├── パッケージB
├── パッケージC
└── パッケージD
│
↓
Linuxへインストール
となります。
パッケージマネージャーは設定されたリポジトリの情報を利用して、必要なパッケージを取得します。
はちみつ屋さんで考えてみよう
パッケージ管理を、はちみつ屋さんで考えてみます。
Linuxサーバーをはちみつ屋さんとします。
新しく商品を販売するために道具が必要になりました。
毎回自分で道具のメーカーを探して、一つずつ必要な部品を集めるのは大変です。
そこで、必要な道具をまとめて管理している倉庫を利用します。
🍯 はちみつ屋さん
│
│ 「この道具ください!」
↓
📦 倉庫
├── 道具A
├── 道具B
├── 道具C
└── 道具D
このイメージでは、
はちみつ屋さん
→ Linux
道具
→ パッケージ
倉庫
→ リポジトリ
注文・管理する仕組み
→ パッケージマネージャー
となります。
必要なソフトウェアを探して取得してくれる仕組み、と考えると分かりやすいでしょう。
依存関係とは?
ソフトウェアは、必ずしも一つのパッケージだけで動くとは限りません。
あるソフトウェアを動かすために、別のライブラリやパッケージが必要になることがあります。
これを**依存関係(Dependency)**と呼びます。
たとえば、
パッケージA
│
├── パッケージBが必要
│
└── パッケージCが必要
という状態です。
パッケージAだけをインストールしても、BやCがなければ正常に動かない可能性があります。
そこでパッケージマネージャーが、
パッケージAをインストールしたい
↓
BとCも必要
↓
必要なパッケージを確認
↓
まとめてインストール
という処理をしてくれます。
これもパッケージマネージャーを利用する大きなメリットです。
aptを使ってみよう
ここからはUbuntuなどのDebian系Linuxで利用されるaptを見ていきます。
apt update:パッケージ情報を更新する
まず覚えておきたいのが、
sudo apt update
です。
これは、設定されているリポジトリから利用可能なパッケージの情報を更新するコマンドです。
重要なのは、
sudo apt update
を実行しただけでは、基本的にインストール済みパッケージそのものをまとめて更新しているわけではないということです。
イメージすると、
リポジトリ
↓
最新のパッケージ情報を取得
↓
Linux側のパッケージ情報を更新
という処理です。
apt upgrade:インストール済みパッケージを更新する
インストール済みのパッケージを更新するときには、
sudo apt upgrade
を利用できます。
つまり、
apt update
→ パッケージ情報を更新
apt upgrade
→ インストール済みパッケージを更新
という違いがあります。
この2つは混同しやすいので注意しましょう。
apt search:パッケージを探す
パッケージを検索するときには、
apt search キーワード
を利用できます。
たとえばJava関連のパッケージを探したい場合、
apt search openjdk
のように検索できます。
apt install:パッケージをインストールする
ソフトウェアをインストールするときは、
sudo apt install パッケージ名
を利用します。
たとえばGitをインストールする場合、
sudo apt install git
のように実行します。
インストール後、
git --version
などで確認できます。
apt remove:パッケージを削除する
インストールしたパッケージを削除したい場合は、
sudo apt remove パッケージ名
を利用できます。
たとえば、
sudo apt remove git
です。
removeでは設定ファイルの一部が残る場合があります。
設定ファイルなども含めて削除したい場合には、
sudo apt purge パッケージ名
という方法もあります。
不要になった依存パッケージを削除する
パッケージを削除したあと、そのパッケージのために自動的にインストールされた依存パッケージが不要になる場合があります。
そのようなパッケージを整理するときには、
sudo apt autoremove
を利用できます。
ただし、実際のサーバーでは削除対象を確認してから実行する習慣をつけておきましょう。
dnfを使ってみよう
次はRocky LinuxやAlmaLinuxなど、RHEL系Linuxで利用されるdnfを見てみましょう。
基本的な考え方はaptと同じです。
dnf search:パッケージを検索する
パッケージを検索するときは、
dnf search キーワード
を利用できます。
たとえば、
dnf search java
のように検索できます。
dnf install:パッケージをインストールする
インストールするときは、
sudo dnf install パッケージ名
です。
たとえばGitなら、
sudo dnf install git
のように利用できます。
dnf upgrade:パッケージを更新する
インストールされているパッケージを更新するときには、
sudo dnf upgrade
を利用できます。
環境によっては、
sudo dnf update
という書き方を目にすることもあります。
dnf remove:パッケージを削除する
パッケージを削除するときは、
sudo dnf remove パッケージ名
を利用します。
たとえば、
sudo dnf remove git
です。
aptとdnfを比較してみよう
基本的な操作を並べてみます。
| 操作 | Ubuntu / Debian系 | RHEL系 |
|---|---|---|
| パッケージ検索 | apt search |
dnf search |
| インストール | apt install |
dnf install |
| 更新 | apt upgrade |
dnf upgrade |
| 削除 | apt remove |
dnf remove |
完全に同じ仕組みではありませんが、初心者の段階では、
Ubuntu系
→ apt
RHEL系
→ dnf
という対応から覚えると分かりやすいでしょう。
なぜsudoを付けるの?
インストールコマンドを見ると、
sudo apt install git
や、
sudo dnf install git
のようにsudoが付いています。
これは、ソフトウェアのインストールや削除がシステム全体へ影響する操作だからです。
一般ユーザーのままでは権限が足りないため、sudoを利用して必要な管理者権限で実行します。
ここで以前学んだユーザー・権限の知識がつながります。
一般ユーザー
↓
sudo
↓
必要な管理者権限で
パッケージを操作
というイメージです。
インストールできたか確認する
パッケージをインストールしたら、
本当に使えるようになったのか
を確認してみましょう。
多くのソフトウェアでは、
コマンド名 --version
などでバージョンを確認できます。
たとえばGitなら、
git --version
Javaなら、
java -version
のように確認できます。
インストールコマンドが正常終了したから終わりではなく、
実際に利用できるか確認する
ところまでを一つの作業として考えるとよいでしょう。
Minecraftサーバーではどう使う?
このシリーズでは最終的にMinecraft Java EditionのサーバーをLinux上へ構築します。
Minecraftサーバーを動かすにはJavaが必要です。
そのため、
Minecraftサーバーを構築したい
↓
Javaが必要
↓
パッケージマネージャーを利用
↓
Javaをインストール
↓
java -versionで確認
↓
Minecraftサーバーを起動
という流れになります。
たとえばUbuntu系であれば、利用するMinecraftサーバーのバージョンに対応したJavaパッケージを確認してインストールします。
apt search openjdk
で候補を確認し、
sudo apt install 対応するJavaパッケージ
という流れです。
インストール後は、
java -version
でJavaが利用できることを確認します。
Minecraft側が要求するJavaのバージョンはMinecraftのバージョンによって異なるため、実際に構築するときに対応バージョンを確認して選びます。
パッケージ管理はセキュリティにも関係する
パッケージ管理は、単に新しいソフトウェアをインストールするだけの仕組みではありません。
ソフトウェアに脆弱性が見つかった場合、修正版のパッケージが提供されることがあります。
そのため、
パッケージをインストール
↓
そのまま放置
ではなく、
更新情報を確認
↓
必要なアップデートを適用
↓
安全な状態を維持
という運用も重要になります。
ただし、業務で利用しているサーバーでは、何でもすぐ更新すればよいとは限りません。
アップデートによって、
- アプリケーションへの影響
- 設定への影響
- サービス停止
- 互換性の問題
などが発生する可能性があります。
そのため、本番環境では影響確認やテスト、バックアップなどを行ったうえで計画的に更新することが重要です。
実際にパッケージ管理を体験してみよう
Ubuntu系Linuxを利用している場合は、まずパッケージ情報を更新します。
sudo apt update
次にGitを検索してみます。
apt search git
インストールします。
sudo apt install git
インストールできたか確認します。
git --version
RHEL系Linuxの場合は、
dnf search git
で検索し、
sudo dnf install git
でインストールできます。
最後に、
git --version
で確認してみましょう。
今回のポイントは、コマンドを暗記することよりも、
探す
↓
インストール
↓
動作確認
↓
必要に応じて更新・削除
という流れを理解することです。
🍯 はちみつメモ
パッケージマネージャーはLinuxのソフトウェア管理係!
Linuxでは、ソフトウェアを入れるたびにWebサイトを探し回る必要はありません。
パッケージマネージャーを利用すれば、リポジトリから必要なパッケージを探してインストールできます。
Ubuntu系なら
apt、RHEL系ならdnf。MinecraftサーバーでJavaを準備するときにも、この仕組みを利用します。
まとめ
今回はLinuxのパッケージ管理について学びました。
この記事で覚えること
- パッケージはLinuxへソフトウェアを導入・管理しやすい形にまとめたもの
- パッケージマネージャーでソフトウェアを管理できる
- リポジトリからパッケージを取得する
- ソフトウェアには依存関係が存在することがある
- Ubuntu・Debian系では
aptがよく利用される - RHEL系では
dnfがよく利用される apt updateはパッケージ情報を更新するapt upgradeはインストール済みパッケージの更新に利用するinstallでインストールできるremoveで削除できる- インストール後は
--versionなどで確認する - パッケージ更新はセキュリティにも関係する
- Minecraftサーバー構築ではJavaのインストールに利用する
Linuxサーバーでは、パッケージ管理は非常によく利用します。
まずは、
「ソフトウェアが必要になったらパッケージマネージャーを確認する」
という考え方を身につけておきましょう。
次におすすめ
次は**「SSHでLinuxを操作する方法」**について学びます。
これまではLinuxの画面から直接コマンドを実行するイメージでしたが、実際のサーバー運用では、別のPCからLinuxサーバーへ接続して操作することがよくあります。
次の記事では、
- SSHとは?
- SSHサーバーとSSHクライアント
- TCP 22番ポート
sshコマンド- ユーザー名とIPアドレス
- パスワード認証
- 公開鍵認証の基本
を学びながら、自分のPCからLinuxサーバーへリモートログインする仕組みを理解していきます。