dnfコマンドの整理

2024/12/03に公開

調べた経緯

リポジトリ周りの用語やdnfコマンドの理解があいまいだったので整理を兼ねてメモします。
Wordpressのインストールする関係でPHP、MySQLのインストールするときに使用したコマンドを例に確認しています。

リポジトリ関係の基礎をおさらい

おもにChatGPTで確認

  • リポジトリとは?
    リポジトリ(Repository) は、ソフトウェアパッケージが保管されている場所(サーバー)のことです。
    AlmaLinuxやCentOSのようなLinuxディストリビューションでは、dnfやyumといったパッケージ管理システムを使ってリポジトリからソフトウェアをダウンロード・インストールします。
    MySQL公式のリポジトリには、MySQLサーバーや関連ツール(クライアント、ユーティリティなど)が含まれています。

  • リポジトリのダウンロードとは?
    「リポジトリをダウンロードする」というのは、リポジトリ設定を行うためのRPMパッケージをダウンロードすることを指します。

  • リポジトリのインストールとは?
    「リポジトリをインストールする」とは、取得したRPMパッケージをシステムに登録し、リポジトリを利用可能にすることを指します。(注、この時はまだソフトがインストールされてるわけではない)

dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm

具体的には:
例:/etc/yum.repos.d/ ディレクトリに .repo ファイルを作成。
この設定により、dnfがMySQLの公式リポジトリを認識し、そこからソフトウェアをダウンロードできるようになります。

  • リポジトリのインストールしたあとにrepos.dが増えていることがわかる。
  • RPMパッケージをダウンロードしたからYUM/DNF リポジトリの設定ファイルができている
    これはリポジトリ情報が記載された設定ファイル
    情報が記載されているだけで、実際のソフトウェア(パッケージ)は含まれていない。
    パッケージを取得するためのリポジトリ(ソース)を定義している。
[root@mizuga-education-web01 ~]# ll /etc/yum.repos.d/ | grep mysql
-rw-r--r--  1 root root 2129 Oct 24  2023 mysql-community-debuginfo.repo
-rw-r--r--  1 root root 1910 Oct 24  2023 mysql-community.repo
-rw-r--r--  1 root root 1989 Oct 24  2023 mysql-community-source.repo
  • さらに中を見ると、有効にしてるリポジトリと無効にしてる設定の部分がある。
    「enabled=1」の部分。

  • baseurl はリポジトリの参照先(サーバーの場所)を示します。
    dnf や yum がこのURLを参照して、パッケージや更新情報を取得します。
    URLの設定が正しいことが、リポジトリの動作において非常に重要です。

  • GPG キーチェック
    gpgcheck=1 の場合、パッケージの署名を検証します。
    gpgkey は検証に使用する公開鍵の場所を示します。

[参考]各内容は最後に記載

[root@mizuga-education-web01 ~]# cat /etc/yum.repos.d/mysql-community.repo
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/9/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

[mysql-innovation-community]
name=MySQL Innovation Release Community Server
baseurl=http://repo.mysql.com/yum/mysql-innovation-community/el/9/$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/9/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/9/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

[mysql-tools-innovation-community]
name=MySQL Tools Innovation Community
baseurl=http://repo.mysql.com/yum/mysql-tools-innovation-community/el/9/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

[mysql-cluster-8.0-community]
name=MySQL Cluster 8.0 Community
baseurl=http://repo.mysql.com/yum/mysql-cluster-8.0-community/el/9/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

[mysql-cluster-innovation-community]
name=MySQL Cluster Innovation Release Community
baseurl=http://repo.mysql.com/yum/mysql-cluster-innovation-community/el/9/$basearch
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

なぜ複数のリポジトリがあるのか?

MySQLは単なるデータベースエンジンだけでなく、関連ツールやコネクター、クラスタリング技術など、複数のソリューションを提供しています。それぞれ専用のリポジトリが用意されています。
安定版と実験版の分離

「安定版」(community)と「イノベーションリリース」(innovation-community)を分けて提供し、利用者が選択できるようにしています。
デフォルト設定

必要最低限のリポジトリのみが有効化されており、他のリポジトリは利用者が目的に応じて有効化できます。

以上踏まえてコマンドの復習

dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm
localinstall

リモートリポジトリではなく、ローカルまたは指定したURLのRPMパッケージをインストールします。

"https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm"
これはMySQL公式サイトが提供するリポジトリ設定用のRPMパッケージです。このパッケージをインストールすることで、MySQL公式リポジトリがシステムに追加され、MySQLの関連パッケージが簡単にインストールできるようになります。

  • このMySQLのインストールの時は「指定したURLのRPMパッケージをインストール」した。
    つまり「RPMパッケージを」明示的にインストールするコマンド。

実行結果
このコマンドを実行すると、MySQL公式リポジトリの設定がシステムに追加されます。
その後、dnf install mysql-serverなどのコマンドでMySQL 8.0を簡単にインストールできるようになります。

  • MySQL公式リポジトリがシステムに追加され、MySQLの関連パッケージが簡単にインストールできるようになります。

なぜリポジトリを追加するのか?

リポジトリを追加する理由
MySQL公式リポジトリを追加することで、以下のメリットが得られます:

最新版のMySQLを利用できる
ディストリビューション標準リポジトリには古いバージョンしかないことが多いですが、公式リポジトリから最新のMySQLを入手できます。
公式のサポート
公式リポジトリからインストールすることで、安定性が保証され、公式ドキュメントの指示通りに設定可能です。

つまり標準で入っているリポジトリでは古いバージョンが参照されることもあるから、
手動で公式リポジトリを参照させることが必要ってこと。
また公式なので安心、安全。

コマンド関係整理

dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm

ローカルインストールとしてMySQLからの公式RPMパッケージをダウンロード
この時にRPMパッケージはダウンロードできてるから、インストールはできる状態になる。
ただし、目的のバージョンのインストールできるかは確認必要。

dnf repolist all | grep mysql
  • dnf: AlmaLinuxで使用されるパッケージ管理コマンド。
    repolist: 利用可能なリポジトリ(ソフトウェアをダウンロードする場所)のリストを表示します。
    all: 有効化されているリポジトリだけでなく、無効化されているリポジトリも含めてリストを表示します。

    有効、無効構わずMySQL関係のリポジトリ(ダウンロードするURL)が有効になっているかの確認をしている。
    mysql80-communityがenabledになっているかを確かめたのは、mysql80-communityがMySQL公式が提供するリポジトリの名前だから。
    なお、出力結果にて「enabled」とついているのは、repo.d内でのenabledになっている結果が
    出力されている。
dnf repolist
yum repolist

有効化されているレポジトリの確認、
このままだと大量に出るので探してるのあればgrepで絞り込む。

コマンド出力例キャプチャ

 dnf install mysql-community-server

MySQLのインストール

mysqld --version

インストールできたか。また、バージョンの確認

リポジトリ内容の説明(補足)

/etc/yum.repos.d/mysql-community.repo の内容を例として深堀したが長いので
最後に記述する。

このファイルに複数のリポジトリセクションが含まれている理由は、MySQLが提供するさまざまな製品やリリースの種類に対応するためです。それぞれのセクションは特定のMySQL関連ソフトウェアやリリースバージョンを対象としています。

以下、それぞれのリポジトリについて説明します:

  1. [mysql80-community]
    内容: MySQL 8.0 の安定版リリース(現在のデフォルト)。
    用途: もっとも一般的なMySQL 8.0サーバーをインストールするために使用します。
    enabled=1: 有効化されているので、このリポジトリを使ってパッケージをインストールできます。
  2. [mysql-innovation-community]
    内容: MySQLの「イノベーションリリース」(次期バージョンや実験的な機能を含む)を提供するリポジトリ。
    用途: 最新技術や実験的な機能をテストしたい場合に使用します。
    enabled=0: デフォルトでは無効化されています。使用する場合は手動で有効化する必要があります。
  3. [mysql-connectors-community]
    内容: MySQLのコネクター(他のプログラミング言語や環境と接続するためのツール)。
    用途: 例えば、Java(JDBC)、Python、C++用のMySQLコネクターをインストールする際に使用します。
    enabled=1: 有効化されているため、MySQLコネクター関連のパッケージがインストール可能です。
  4. [mysql-tools-community]
    内容: MySQL関連ツール(例: MySQL Shell、MySQL Router)。
    用途: MySQLの運用を支援するための追加ツールをインストールする際に使用します。
    enabled=1: 有効化されており、ツール関連パッケージが利用可能です。
  5. [mysql-tools-innovation-community]
    内容: MySQLツールの「イノベーションリリース」バージョン。
    用途: 次期リリース予定のツールや実験的なツールを試す場合に使用します。
    enabled=0: デフォルトでは無効化されています。
  6. [mysql-cluster-8.0-community]
    内容: MySQL Cluster 8.0(分散型データベースソリューション)。
    用途: 高可用性とスケーラビリティが必要な場面でMySQL Clusterを利用する場合。
    enabled=0: デフォルトでは無効化されています。
  7. [mysql-cluster-innovation-community]
    内容: MySQL Clusterの「イノベーションリリース」。
    用途: 次世代のMySQL Cluster技術や実験的な機能をテストする場合に使用します。
    enabled=0: デフォルトでは無効化されています。

Discussion