【Linux】オフライン環境でパッケージインストール/アップデート【RHEL9】

# はじめに
オフラインでクローズド環境にRHELを利用しサーバを構築することも多いかと思いますが、その際にインターネット接続の無い状態でのパッケージインストール及び、アップデート方法について記載したいと思います。

いくつか方法があるかと思いますが、今回は手軽に行える**ISOリポジトリ**を作成したいと思います。

# ISOリポジトリで出来ること
- オフライン環境でdnf(yum)を使ったパッケージ管理が行える
- マイナーリリースと時点の最新のパッケージ及び、エラータのインストール、アップデートが可能
- **OS再起動後も利用可能**（これが記載されてない手順が多いです）
- 一度作ればマイナーリリース毎にisoイメージを置き換えればOK

主に上記の事項が可能になります。
問題点としては、マイナーリリース時点でのパッケージ、エラータのインストール、アップデートしか行えないことになります。

RHELのライフサイクルでは半年に一度、マイナーバージョンがリリースされる為、つまりISOリポジトリを利用したパッケージ管理では、半年に一度しかパッケージのアップデートやエラータの適用が行えないことになります。
【参考】

https://access.redhat.com/ja/support/policy/updates/errata

## ISOリポジトリの作成手順
### 前提
- Red Hat Developer Program に登録していること
- ベース環境でサブスクリプション連携済みであること


今回、ISOリポジトリを作成するベース環境は以下の通りになります。

```shell
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.2 (Plow)
```

そして、ISOリポジトリに利用するISOイメージはRHEL9.3になります。
※9.2でも問題ございません。
```bash
rhel-9.3-x86_64-dvd.iso
````

１．まずは上記isoイメージを適当なディレクトリに格納しましょう。
今回は以下のディレクトリに格納しています。

```bash
/usr/local/iso/
```

２．マウント先になるディレクトリを作成します。
任意のディレクトリで構いませんが、後述の手順にてこちらのパスを利用します。
```bash
$ mkdir /mnt/rhiso
```

３．下記のコマンドで作成したディレクトリにISOイメージをマウントします。
```bash
$ mount -o loop /usr/local/iso/rhel-9.3-x86_64-dvd.iso /mnt/rhiso/
mount: /mnt/rhiso: 警告: ソースは書き込み禁止です、読み込み専用でマウントします.
```
デフォルトで読み込み専用でマウントされる為、標準出力されている内容に問題はありません。


４．次に、リポジトリファイルを作成します。
```bash
vim /etc/yum.repos.d/rhel9.repo
```
下記の内容を記述していきます。
```shell-session
  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

```
ここでポイントとなるのが１行目と９行目のリポジトリIDに
- [local-BaseOS]
- [local-AppStream]
に共通のタイトルを付けます。今回は**local**とつけていますが、共通であれば何でも構いません。

そして、６行目と１４行目に手順２で作成したディレクトリのパスを上記の様に指定してください。

５．OS再起動後も自動的にマウントされる様、**/etc/fstab**に以下の様に最終行に記述を行います。

```shell-session
#
# /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をインストールしてみます。

１．まず初めにキャッシュクリアをします
```shell
$ dnf clean all
```

２．下記のコマンドで明示的に参照先のリポジトリを指定します。
ここで便利なのが手順４で指定したリポジトリIDになります。
共通のタイトルを付けることでまとめて指定することが出来ます。

```shell
$ 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で応答し

```shell
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                                                                                                     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

完了しました!
```

問題なく依存関係もクリアしインストールが行えました。

アップデートしたい時は
```shell
$ dnf update --disablerepo=* --enablerepo=local*
```
とすればオッケーです。

# 最後に
オフライン環境ではほかにも
- ローカルリポジトリ
- リポジトリサーバ
- Red Hat Satellite
etc...
等様々な手段があります。
皆様の環境や運用に合わせ、ベストな選択を取る様にしましょう。