2022年8月17日水曜日

yum (dnf) でインストールメディアやローカルに保存されているrpmを適用する方法

ローカルのディレクトリにあるrpmについて、yum (RHEL 8以降はdnf) の機能を用いて依存関係を考慮して適用したいことがある。ということで、過去の記事でローカルのディレクトリをリポジトリ登録する方法を記載したが、そんなことはしなくても、もっと簡単な方法があった。

方法としては2つあるため、以下に紹介する。

インストールメディアに含まれるパッケージをリポジトリ登録する

RHELのインストールメディアには、インストール時に追加可能なパッケージが含まれている。インストールメディアマウント後に、その領域をリポジトリとして認識させることで、あたかも通常のyumを使っているときのようにインストールが可能となる。

まず、リポジトリを登録するため、/etc/yum.repos.d/dvd.repoというファイルを作成する。

なお、RHEL 8.6で確認したところ、name=[リポジトリ名]の設定がない場合、「レポジトリ 'dvd-BaseOS' idを使用した設定内に見つかりません。」といったエラーが発生するようになったため、設定追加をした。

RHEL 7の場合

# cat << EOF > /etc/yum.repos.d/dvd.repo
[dvd]
baseurl=file:///media/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF

RHEL 8の場合

# cat << EOF > /etc/yum.repos.d/dvd.repo
[dvd-BaseOS]
name=dvd-BaseOS
baseurl=file:///media/BaseOS/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[dvd-AppStream]
name=dvd-AppStream
baseurl=file:///media/AppStream/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF
これだけでyumdnf実行時に、インストールメディアに含まれるパッケージを参照することができる。

ただし、他にリポジトリが設定されている場合、そのリポジトリに対してインターネット経由で接続を試みてしまうため、--disablerepo=* --enablerepo=dvd*を指定し、インストールメディアのみ参照するようコマンドを実行しよう。

例として、dnfを用いてethtoolをインストールした際の実行結果を記載する。
# dnf --disablerepo=* --enablerepo=dvd* install ethtool
dvd-BaseOS                                      243 MB/s | 2.6 MB     00:00
dvd-AppStream                                   312 MB/s | 7.9 MB     00:00
パッケージ ethtool-2:5.8-7.el8.x86_64 は既にインストールされています。
依存関係が解決しました。
================================================================================
 パッケージ      Arch           バージョン             リポジトリー       サイズ
================================================================================
アップグレード:
 ethtool         x86_64         2:5.13-1.el8           dvd-BaseOS         218 k

トランザクションの概要
================================================================================
アップグレード  1 パッケージ

~(以下略)~

yum localinstallを使う

yumにローカルディレクトリのパッケージを一括でインストールする機能がある。rpmを配置したディレクトリに移動し、yum localinstall *コマンドを実行すればよく、サブスクリプションの設定も不要でインストールすることができる。
# yum localinstall *
読み込んだプラグイン:product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
ローカルパッケージ処理の設定をしています
ConsoleKit-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-0.4.1-3.el6.x86_64
ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-libs-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-libs-0.4.1-3.el6.x86_64
Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch.rpm を調べています: Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch

~(中略)~


トランザクションの要約
================================================================================
インストール         3 パッケージ
アップグレード     250 パッケージ

合計容量: 899 M
これでいいですか? [y/N] y   ←★ここでyを押せばインストール&更新が開始
ちなみに、似たようなものにyum localupdateというものもあるのだが、なぜかうまくいかなかった。yum localinstallでもきちんとインストールとアップグレードを実施できるので、特に問題ないので詳しくは調べていない。
# yum localupdate *
読み込んだプラグイン:product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
ローカルパッケージ処理の設定をしています
ConsoleKit-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-0.4.1-3.el6.x86_64
ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を調べています: ConsoleKit-libs-0.4.1-6.el6.x86_64
次のリポジトリーへの更新として ConsoleKit-libs-0.4.1-6.el6.x86_64.rpm を設定します: ConsoleKit-libs-0.4.1-3.el6.x86_64
Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch.rpm を調べています: Red_Hat_Enterprise_Linux-Release_Notes-6-en-US-8-2.el6.noarch

~(中略)~

--> 依存性解決を終了しました。
エラー: パッケージ: 1:java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64 (/java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64)
             要求: libsctp.so.1(VERS_1)(64bit)
エラー: パッケージ: 1:java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64 (/java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64)
             要求: libsctp.so.1()(64bit)
エラー: パッケージ: 1:java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64 (/java-1.7.0-openjdk-1.7.0.101-2.6.6.4.el6_8.x86_64)
             要求: libpcsclite.so.1()(64bit)
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

更新履歴

  • 2016/5/15 新規作成
  • 2021/7/18 インストールメディアをレポジトリに登録する手順を追加。その他全体的に体裁を修正
  • 2021/9/11 dvd.repoにRHEL 8のパターンも追加
  • 2022/8/17 RHEL 8のdvd.repoにnameの設定を追加。実行結果をdnfの実行結果に修正

0 件のコメント:

コメントを投稿

人気の投稿