はじめに
オフラインでクローズド環境にRHELを利用しサーバを構築することも多いかと思いますが、その際にインターネット接続の無い状態でのパッケージインストール及び、アップデート方法について記載したいと思います。
いくつか方法があるかと思いますが、今回は手軽に行えるISOリポジトリを作成したいと思います。
ISOリポジトリで出来ること
- オフライン環境でdnf(yum)を使ったパッケージ管理が行える
- マイナーリリースと時点の最新のパッケージ及び、エラータのインストール、アップデートが可能
- OS再起動後も利用可能(これが記載されてない手順が多いです)
- 一度作ればマイナーリリース毎にisoイメージを置き換えればOK
主に上記の事項が可能になります。
問題点としては、マイナーリリース時点でのパッケージ、エラータのインストール、アップデートしか行えないことになります。
RHELのライフサイクルでは半年に一度、マイナーバージョンがリリースされる為、つまりISOリポジトリを利用したパッケージ管理では、半年に一度しかパッケージのアップデートやエラータの適用が行えないことになります。
【参考】
ISOリポジトリの作成手順
前提
- Red Hat Developer Program に登録していること
- ベース環境でサブスクリプション連携済みであること
今回、ISOリポジトリを作成するベース環境は以下の通りになります。
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.2 (Plow)
そして、ISOリポジトリに利用するISOイメージはRHEL9.3になります。
※9.2でも問題ございません。
rhel-9.3-x86_64-dvd.iso
1.まずは上記isoイメージを適当なディレクトリに格納しましょう。
今回は以下のディレクトリに格納しています。
/usr/local/iso/
2.マウント先になるディレクトリを作成します。
任意のディレクトリで構いませんが、後述の手順にてこちらのパスを利用します。
$ mkdir /mnt/rhiso
3.下記のコマンドで作成したディレクトリにISOイメージをマウントします。
$ mount -o loop /usr/local/iso/rhel-9.3-x86_64-dvd.iso /mnt/rhiso/
mount: /mnt/rhiso: 警告: ソースは書き込み禁止です、読み込み専用でマウントします.
デフォルトで読み込み専用でマウントされる為、標準出力されている内容に問題はありません。
4.次に、リポジトリファイルを作成します。
vim /etc/yum.repos.d/rhel9.repo
下記の内容を記述していきます。
1 [local-BaseOS]
2 name=BaseOS Packages Red Hat Enterprise Linux 9
3 metadata_expire=-1
4 gpgcheck=1
5 enabled=1
6 baseurl=file:///mnt/rhiso/BaseOS/
7 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
8
9 [local-AppStream]
10 name=AppStream Packages Red Hat Enterprise Linux 9
11 metadata_expire=-1
12 gpgcheck=1
13 enabled=1
14 baseurl=file:///mnt/rhiso/AppStream/
15 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
ここでポイントとなるのが1行目と9行目のリポジトリIDに
- [local-BaseOS]
- [local-AppStream]
に共通のタイトルを付けます。今回はlocalとつけていますが、共通であれば何でも構いません。
そして、6行目と14行目に手順2で作成したディレクトリのパスを上記の様に指定してください。
5.OS再起動後も自動的にマウントされる様、/etc/fstabに以下の様に最終行に記述を行います。
#
# /etc/fstab
# Created by anaconda on Sun Mar 17 07:27:36 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=bb202b46-dc7c-4b93-a9b8-db6ae3eca1bd /boot xfs defaults 0 0
/dev/mapper/rhel-swap none swap defaults 0 0
/usr/local/iso/rhel-9.3-x86_64-dvd.iso /mnt/rhiso iso9660 ro,loop 0 0
こちらの記述方法が間違っていた場合、再移動後emergency modeで起動する可能性がありますが
そうなった場合はrootでログインし記述を修正してください。
以上で、ISOリポジトリの作成は完了となります。
dnf(yum)でインストール、アップデートをしてみよう
適当にApacheをインストールしてみます。
1.まず初めにキャッシュクリアをします
$ dnf clean all
2.下記のコマンドで明示的に参照先のリポジトリを指定します。
ここで便利なのが手順4で指定したリポジトリIDになります。
共通のタイトルを付けることでまとめて指定することが出来ます。
$ dnf install --disablerepo=* --enablerepo=local* httpd
サブスクリプション管理リポジトリーを更新しています。
BaseOS Packages Red Hat Enterprise Linux 9 292 MB/s | 2.0 MB 00:00
AppStream Packages Red Hat Enterprise Linux 9 384 MB/s | 6.5 MB 00:00
依存関係が解決しました。
=============================================================================================================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=============================================================================================================================================================================================================================================
インストール:
httpd x86_64 2.4.57-5.el9 local-AppStream 52 k
依存関係のインストール:
apr x86_64 1.7.0-11.el9 local-AppStream 127 k
apr-util x86_64 1.6.1-23.el9 local-AppStream 97 k
apr-util-bdb x86_64 1.6.1-23.el9 local-AppStream 14 k
httpd-core x86_64 2.4.57-5.el9 local-AppStream 1.5 M
httpd-filesystem noarch 2.4.57-5.el9 local-AppStream 16 k
httpd-tools x86_64 2.4.57-5.el9 local-AppStream 87 k
redhat-logos-httpd noarch 90.4-2.el9 local-AppStream 18 k
弱い依存関係のインストール:
apr-util-openssl x86_64 1.6.1-23.el9 local-AppStream 17 k
mod_http2 x86_64 1.15.19-5.el9 local-AppStream 152 k
mod_lua x86_64 2.4.57-5.el9 local-AppStream 62 k
トランザクションの概要
=============================================================================================================================================================================================================================================
インストール 11 パッケージ
合計サイズ: 2.1 M
インストール後のサイズ: 6.0 M
これでよろしいですか? [y/N]: y
上記の通り参照先リポジトリが作成した
- local-AppStream
となっていることが確認できます。
例のごとくyで応答し
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : apr-1.7.0-11.el9.x86_64 1/11
インストール中 : apr-util-bdb-1.6.1-23.el9.x86_64 2/11
インストール中 : apr-util-openssl-1.6.1-23.el9.x86_64 3/11
インストール中 : apr-util-1.6.1-23.el9.x86_64 4/11
インストール中 : httpd-tools-2.4.57-5.el9.x86_64 5/11
インストール中 : redhat-logos-httpd-90.4-2.el9.noarch 6/11
scriptletの実行中: httpd-filesystem-2.4.57-5.el9.noarch 7/11
インストール中 : httpd-filesystem-2.4.57-5.el9.noarch 7/11
インストール中 : httpd-core-2.4.57-5.el9.x86_64 8/11
インストール中 : mod_lua-2.4.57-5.el9.x86_64 9/11
インストール中 : mod_http2-1.15.19-5.el9.x86_64 10/11
インストール中 : httpd-2.4.57-5.el9.x86_64 11/11
scriptletの実行中: httpd-2.4.57-5.el9.x86_64 11/11
検証 : apr-1.7.0-11.el9.x86_64 1/11
検証 : apr-util-1.6.1-23.el9.x86_64 2/11
検証 : apr-util-bdb-1.6.1-23.el9.x86_64 3/11
検証 : apr-util-openssl-1.6.1-23.el9.x86_64 4/11
検証 : httpd-2.4.57-5.el9.x86_64 5/11
検証 : httpd-core-2.4.57-5.el9.x86_64 6/11
検証 : httpd-filesystem-2.4.57-5.el9.noarch 7/11
検証 : httpd-tools-2.4.57-5.el9.x86_64 8/11
検証 : mod_http2-1.15.19-5.el9.x86_64 9/11
検証 : mod_lua-2.4.57-5.el9.x86_64 10/11
検証 : redhat-logos-httpd-90.4-2.el9.noarch 11/11
インストール済みの製品が更新されています。
インストール済み:
apr-1.7.0-11.el9.x86_64 apr-util-1.6.1-23.el9.x86_64 apr-util-bdb-1.6.1-23.el9.x86_64 apr-util-openssl-1.6.1-23.el9.x86_64 httpd-2.4.57-5.el9.x86_64 httpd-core-2.4.57-5.el9.x86_64 httpd-filesystem-2.4.57-5.el9.noarch
httpd-tools-2.4.57-5.el9.x86_64 mod_http2-1.15.19-5.el9.x86_64 mod_lua-2.4.57-5.el9.x86_64 redhat-logos-httpd-90.4-2.el9.noarch
完了しました!
問題なく依存関係もクリアしインストールが行えました。
アップデートしたい時は
$ dnf update --disablerepo=* --enablerepo=local*
とすればオッケーです。
最後に
オフライン環境ではほかにも
- ローカルリポジトリ
- リポジトリサーバ
- Red Hat Satellite
etc...
等様々な手段があります。
皆様の環境や運用に合わせ、ベストな選択を取る様にしましょう。