1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CentOSでの依存関係解決 - yumとdnfを使ったrpmパッケージ管理(基本編)

Posted at

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のメタデータを自動でダウンロードし、関連パッケージおよび依存関係が存在するかを確認します。そして、倉庫から関連パッケージを自動で見つけてダウンロードし、インストールします。
image.png

新しいリポジトリを作成する場合

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_
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?