ローカル環境にyumリポジトリを構築する

# 前置き
インターネットに接続できない環境でも`yum`コマンドでパッケージをインストールできるようにセットアップした。
以下はRHEL 7.9で実施した内容です。

# 対応内容
## rpmパッケージのアップロード
インストールメディアからrpmパッケージをサーバ上にアップロードする。
rpmパッケージは`Packages`ディレクトリ内にある。

```
[root@hogehoge ~]# mkdir /mnt/cdrom
[root@hogehoge ~]# 
[root@hogehoge ~]# mount -t iso9660 -o loop /dev/sr0 /mnt/cdrom
[root@hogehoge ~]# 
[root@hogehoge ~]# ls -l /mnt/cdrom
合計 974
dr-xr-xr-x. 3 root root   2048  9月 18 04:35 EFI
-r--r--r--. 1 root root   8266  9月 18 03:27 EULA
-r--r--r--. 1 root root  18092  9月 18 03:27 GPL
dr-xr-xr-x. 2 root root   2048  9月 18 04:35 LiveOS
dr-xr-xr-x. 2 root root 946176  9月 18 04:35 Packages
-r--r--r--. 1 root root   3375  7月 14 23:15 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root   3211  7月 14 23:15 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root   1796  9月 18 04:35 TRANS.TBL
dr-xr-xr-x. 4 root root   2048  9月 18 04:35 addons
-r--r--r--. 1 root root   1455  9月 18 03:27 extra_files.json
dr-xr-xr-x. 3 root root   2048  9月 18 04:35 images
dr-xr-xr-x. 2 root root   2048  9月 18 04:35 isolinux
-r--r--r--. 1 root root    114  9月 18 04:08 media.repo
dr-xr-xr-x. 2 root root   2048  9月 18 04:35 repodata
[root@hogehoge ~]# 
[root@hogehoge ~]# mkdir -p /var/local/repo
[root@hogehoge ~]# 
[root@hogehoge ~]# cp -p /mnt/cdrom/Packages/* /var/local/repo
[root@hogehoge ~]# 
```

## yumリポジトリの作成
`createrepo`コマンドを使用できるようにするため、必要なパッケージをインストールする。

```
[root@hogehoge ~]# ls -l /var/local/repo | grep -E "createrepo|deltarpm|python-deltarpm"
-r--r--r--. 1 root root    95888  3月 25  2017 createrepo-0.9.9-28.el7.noarch.rpm
-r--r--r--. 1 root root    84048  4月  1  2014 deltarpm-3.6-3.el7.x86_64.rpm
-r--r--r--. 1 root root    32140  4月  1  2014 python-deltarpm-3.6-3.el7.x86_64.rpm
[root@hogehoge ~]# 
[root@hogehoge ~]# rpm -ivh /var/local/repo/deltarpm-3.6-3.el7.x86_64.rpm
[root@hogehoge ~]# rpm -ivh /var/local/repo/python-deltarpm-3.6-3.el7.x86_64.rpm
[root@hogehoge ~]# rpm -ivh /var/local/repo/createrepo-0.9.9-28.el7.noarch.rpm
[root@hogehoge ~]# 
[root@hogehoge ~]# yum list installed | grep -E "createrepo|delta"
createrepo.noarch                       0.9.9-28.el7               installed    
deltarpm.x86_64                         3.6-3.el7                  installed    
python-deltarpm.x86_64                  3.6-3.el7                  installed    
[root@hogehoge ~]# 
```

`createrepo`コマンドでリポジトリを作成。
事前にrpmパッケージを上げておいたディレクトリを指定する。
処理が完了すると、`repodata`ディレクトリが作成される。

```
[root@hogehoge ~]# createrepo -v /var/local/repo
Spawning worker 0 with 654 pkgs
Spawning worker 1 with 654 pkgs
Spawning worker 2 with 654 pkgs
Spawning worker 3 with 654 pkgs
Spawning worker 4 with 654 pkgs
Spawning worker 5 with 654 pkgs
Spawning worker 6 with 653 pkgs
Spawning worker 7 with 653 pkgs
Worker 0: reading 389-ds-base-1.3.10.2-6.el7.x86_64.rpm
Worker 1: reading 389-ds-base-libs-1.3.10.2-6.el7.x86_64.rpm
～ 中略 ～
Worker 4: reading zziplib-0.13.62-12.el7.i686.rpm
Worker 5: reading zziplib-0.13.62-12.el7.x86_64.rpm
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Starting other db creation: Tue Jan 23 13:45:34 2021
Ending other db creation: Tue Jan 23 13:45:35 2021
Starting filelists db creation: Tue Jan 23 13:45:35 2021
Ending filelists db creation: Tue Jan 23 13:45:37 2021
Starting primary db creation: Tue Jan 23 13:45:37 2021
Ending primary db creation: Tue Jan 23 13:45:40 2021
Sqlite DBs complete
[root@hogehoge ~]# 
[root@hogehoge ~]# ls -ld /var/local/repo/repodata
drwxr-xr-x. 2 root root 4096  1月 23 13:45 /var/local/repo/repodata
[root@hogehoge ~]# 
```

## yum設定ファイルの編集
yumの設定ファイルを作成する。
`baseurl`にはrpmパッケージを上げておいたディレクトリを指定する。

```
[root@hogehoge ~]# vi /etc/yum.repos.d/local.repo
```
```:/etc/yum.repos.d/local.repo
[local]
name=local repo
baseurl=file:///var/local/repo
enabled=1
gpgcheck=0
```


RHELデフォルトの設定ファイルをそのままにしておくと、外部に問い合わせにいこうとしてエラーを吐くので無効化しておく。
`enabled`の値が`1`は有効、`0`が無効となる。

```
[root@hogehoge ~]# sed -i.org 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/redhat.repo
[root@hogehoge ~]# 
[root@hogehoge ~]# yum clean all
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
リポジトリーを清掃しています: local
[root@hogehoge ~]# 
[root@hogehoge ~]# yum repolist enabled
読み込んだプラグイン:product-id, search-disabled-repos, subscription-manager
local                                                                                     | 2.9 kB  00:00:00     
local/primary_db                                                                          | 4.3 MB  00:00:00     
リポジトリー ID                                      リポジトリー名                                          状態
local                                               local repo                                            5,230
repolist: 5,230
[root@hogehoge ~]# 
```

以上です。

# 追記
[2021/03/10 追記]
こちらの手順だけでは`yum groupinstall`が実行できなかった。。
[ローカル環境のyumリポジトリでgroupinstallを可能にする](https://qiita.com/takom16/items/ef63bae825be5458d3c9)に追加で対応した手順を記載しました。