RHEL系(AlmaLinux8) オフライン環境での RPM インストール ※ローカルパッケージインストール

# オフライン環境でのRPMインストール
知り合いの環境が、DMZ(非武装地帯) で外部ネットワーク禁止のところで RPM パッケージをインストールしたいというので調査したときのメモです。

## 該当のパッケージを検索＆ダウンロード
特定のhttpdバージョンをインストールしたいとのことで、まず該当パッケージを検索。

```text
$ sudo yum --showduplicates search httpd

httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 : Apache HTTP Server
httpd-2.4.37-39.module_el8.4.0+778+c970deab.x86_64 : Apache HTTP Server
httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64 : Apache HTTP Server
httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64 : Apache HTTP Server
httpd-2.4.37-47.module_el8.6.0+1111+ce6f4ceb.1.x86_64 : Apache HTTP Server
httpd-2.4.37-54.module_el8.8.0+1256+e1598b50.x86_64 : Apache HTTP Server
```

httpd-2.4.37-30 をインストールしたいので RPMパッケージをローカルにダウンロードする。

```text
$ sudo yum install --downloadonly --destdir . httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64
サブスクリプション管理リポジトリーを更新しています。
コンシューマー識別子を読み込めません

このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。

メタデータの期限切れの最終確認: 1:24:46 前の 2023年06月18日 11時13分39秒 に実施しました。
依存関係が解決しました。
============================================================================================================================================================================================
 パッケージ                                  アーキテクチャー                バージョン                                                            リポジトリー                       サイズ
============================================================================================================================================================================================
インストール:
 httpd                                       x86_64                          2.4.37-30.module_el8.3.0+462+ba287492.0.1                             appstream                          1.7 M
依存関係のインストール:
 apr                                         x86_64                          1.6.3-12.el8                                                          appstream                          129 k
 apr-util                                    x86_64                          1.6.1-6.el8                                                           appstream                          105 k
 centos-logos-httpd                          noarch                          85.8-2.el8                                                            appstream                           75 k
 httpd-filesystem                            noarch                          2.4.37-30.module_el8.3.0+462+ba287492.0.1                             appstream                           37 k
 httpd-tools                                 x86_64                          2.4.37-30.module_el8.3.0+462+ba287492.0.1                             appstream                          104 k
 mod_http2                                   x86_64                          1.15.7-5.module_el8.6.0+1111+ce6f4ceb                                 appstream                          155 k
弱い依存関係のインストール:
 apr-util-bdb                                x86_64                          1.6.1-6.el8                                                           appstream                           25 k
 apr-util-openssl                            x86_64                          1.6.1-6.el8                                                           appstream                           27 k
モジュールストリームの有効化中:
 httpd                                                                       2.4                                                                                                           
```

とりあえずローカルにダウンロードできたのを確認する。

```text
$ ll
合計 2384
-rw-r--r-- 1 root root  132592  6月 18 12:38 apr-1.6.3-12.el8.x86_64.rpm
-rw-r--r-- 1 root root  107760  6月 18 12:38 apr-util-1.6.1-6.el8.x86_64.rpm
-rw-r--r-- 1 root root   25120  6月 18 12:38 apr-util-bdb-1.6.1-6.el8.x86_64.rpm
-rw-r--r-- 1 root root   27484  6月 18 12:38 apr-util-openssl-1.6.1-6.el8.x86_64.rpm
-rw-r--r-- 1 root root   76472  6月 18 12:38 centos-logos-httpd-85.8-2.el8.noarch.rpm
-rw-r--r-- 1 root root 1749807  6月 18 12:38 httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm
-rw-r--r-- 1 root root   37567  6月 18 12:38 httpd-filesystem-2.4.37-30.module_el8.3.0+462+ba287492.0.1.noarch.rpm
-rw-r--r-- 1 root root  106363  6月 18 12:38 httpd-tools-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm
-rw-r--r-- 1 root root  158227  6月 18 12:38 mod_http2-1.15.7-5.module_el8.6.0+1111+ce6f4ceb.x86_64.rpm
```

# RPM パッケージを転送＆インストールのテスト
RPM パッケージを転送します。そして RPM パッケージのテストを実施します。

httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm だけをテストインストールしてみます。依存があるのでエラーがでることを確認できます。

```text
$ sudo rpm -ivh --test httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm
エラー: 依存性の欠如:
        httpd-filesystem は httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 に必要とされています
        httpd-filesystem = 2.4.37-30.module_el8.3.0+462+ba287492.0.1 は httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 に必要とされています
        httpd-tools = 2.4.37-30.module_el8.3.0+462+ba287492.0.1 は httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 に必要とされています
        libapr-1.so.0()(64bit) は httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 に必要とされています
        libaprutil-1.so.0()(64bit) は httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 に必要とされています
        mod_http2 は httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 に必要とされています
        system-logos-httpd は httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64 に必要とされています
```

依存のあるパッケージを列挙します。

```text
$ sudo rpm -ivh --test httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm apr-1.6.3-12.el8.x86_64.rpm apr-util-1.6.1-6.el8.x86_64.rpm apr-util-bdb-1.6.1-6.el8.x86_64.rpm apr-util-openssl-1.6.1-6.el8.x86_64.rpm centos-logos-httpd-85.8-2.el8.noarch.rpm httpd-filesystem-2.4.37-30.module_el8.3.0+462+ba287492.0.1.noarch.rpm httpd-tools-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm mod_http2-1.15.7-5.module_el8.6.0+1111+ce6f4ceb.x86_64.rpm
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
```

うん。大丈夫そう。`--test` を外してインストールしましょう。

# 参考にさせて頂いたサイト様

・[RHEL 8でdnfコマンドでRPMのダウンロードのみを行う！](https://lab4ict.com/system/archives/5029)
・[yum｜パッケージの検索](https://kazmax.zpp.jp/linux_beginner/yum_search.html)
・[Yum で特定のバージョンを指定してソフトウェアをインストールする方法](https://qiita.com/kentarosasaki/items/c3a007b78f46a0f7a267)
・[RPMパッケージのインストールテストを行う](https://www.linuxmaster.jp/linux_skill/2010/06/rpm-4.html)