yumとdnf
CentOSでは、yumとdnfを使用してrpmパッケージの依存関係を解決します。
YUMについて
YUM(Yellowdog Update Modifier)は、rpmのフロントエンドプログラムであり、ソフトウェアパッケージの依存関係を解決できます。複数のリポジトリ間でパッケージを特定でき、up2dateの代替ツールとして機能します。
CentOS 8ではyumの代わりにdnfが導入されましたが、yumとの互換性が保たれており、設定も共通しています。
[root@loaclhost ~]$ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Mar 24 17:08 /usr/bin/yum -> dnf-3
1.1 yum/dnfの動作原理
yum/dnfはC/Sモデルに基づいています。
- yumサーバーにはrpmパッケージと関連パッケージのメタデータベースが保存されています。
- yumクライアントはyumサーバーにアクセスし、インストールやクエリなどを行います。
yumの実装プロセス
まず、yumサーバー上にyumリポジトリ(倉庫)を作成します。この倉庫には多くのrpmパッケージと、パッケージに関連するメタデータファイル(特定のディレクトリrepodataに配置)が事前に格納されています。yumクライアントがyum/dnfツールを利用してパッケージをインストールする際、repodataのメタデータを自動でダウンロードし、関連パッケージおよび依存関係が存在するかを確認します。そして、倉庫から関連パッケージを自動で見つけてダウンロードし、インストールします。
新しいリポジトリを作成する場合
yum install xxxやyum update xxxを使用すると、まずリポジトリに接続できるかを確認します。接続できればリポジトリ内のrepodataをダウンロードします(新しいリポジトリでない場合は、既存のローカルrepodataを直接参照)。次に、repodata内にxxxパッケージがあるかどうかを問い合わせます。パッケージが存在する場合、リポジトリのサーバーからxxx.rpm(依存関係を含む)をダウンロードし、インストールを開始します。インストールが完了したらパッケージ情報を削除します。
1.2 yumクライアントの設定
yumクライアントの設定ファイル
-
/etc/yum.conf
: すべてのリポジトリに共通の設定を提供します。 -
/etc/yum.repos.d/*.repo
: 各リポジトリに個別の設定ファイルを提供します。
ヘルプの取得
[root@rocky86 ~]# man 5 yum.conf
共通設定
[root@rocky86 ~]# ll /etc/yum.conf
lrwxrwxrwx. 1 root root 12 Mar 24 17:08 /etc/yum.conf -> dnf/dnf.conf
[root@rocky86 ~]# cat /etc/yum.conf
[main]
gpgcheck=1 # インストールパッケージの合法性と完全性を検証する
installonly_limit=3 # 同時にインストールできるパッケージ数の上限、最小値は2。0または1に設定すると無制限
clean_requirements_on_remove=True # パッケージ削除時に使用されなくなった依存パッケージも削除
best=True # アップグレード時に最新バージョンを自動的に選択
skip_if_unavailable=False # 利用不可の場合はスキップ
リポジトリ設定ファイルの指示
[repositoryID]
name=Some name for this repository # リポジトリの名前
baseurl=url://path/to/repository/ # リポジトリのURL
mirrorlist=http://list/ # 複数のbaseurlを指すリスト
enabled={1|0} # 有効化するかどうか、デフォルトは1
gpgcheck={1|0} # パッケージの検証を行うかどうか、デフォルトは1
gpgkey={URL|file://FILENAME} # 検証キーのURLまたはファイルパス
enablegroups={1|0} # yum groupを有効にするかどうか、デフォルトは1
failovermethod={roundrobin|priority} # 複数のbaseurlへのアクセス方法、roundrobinはランダム、priorityは順番
cost=1000 # 優先度を決定するコスト、デフォルトは1000
baseurlの書き方
baseurlは複数の書き方とプロトコルをサポートします。
注意:yumリポジトリのパスは必ずrepodataディレクトリを指す必要があります。
baseurl=file:///cdrom/AppStream/
baseurl=https://mirrors.aliyun.com/rockylinux/8.6/AppStream/x86_64/os/
baseurl=http://mirrors.aliyun.com/rockylinux/8.6/AppStream/x86_64/os/
baseurl=ftp://10.0.0.159/
よく使われる変数
-
$arch
: CPUアーキテクチャ(例:aarch64, i586, i686, x86_64) -
$basearch
: 基本アーキテクチャ(例:i386, x86_64) -
$releasever
: システムバージョン
変数を使用した例:
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
変数が置き換えられた後の例:
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=BaseOS-8
yum管理ツールの確認
yum-config-manager
[root@rocky86 yum.repos.d]# rpm -qf `which yum-config-manager`
yum-utils-4.0.21-11.el8.noarch
よく使われるオプション
-
--add-repo=URL
: リポジトリを追加 -
--disable repoid
: リポジトリを無効化 -
--enable repoid
: リポジトリを有効化
使用例
リポジトリの追加:
[root@rocky86 ~]# yum-config-manager --add-repo=https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
Adding repo from: https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
リポジトリの確認:
[root@rocky86 yum.repos.d]# cat mirrors.nju.edu.cn_epel_8_Everything_x86_64_.repo
[mirrors.nju.edu.cn_epel_8_Everything_x86_64_]
name=created by dnf config-manager from
https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
baseurl=https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
enabled=1
リポジトリの無効化:
[root@rocky86 yum.repos.d]# yum-config-manager --disable mirrors.nju.edu.cn_epel_8_Everything_x86_64_
リポジトリの有効化:
[root@rocky86 yum.repos.d]# yum-config-manager --enable mirrors.nju.edu.cn_epel_8_Everything_x86_64_