NW 構成などが原因で、RHEL のリポジトリに接続できるホストが限られていて yum コマンドが出来ないホストが存在する場合がある。
そのような場合、接続可能なホスト上に RHEL のリポジトリのミラーを作成し、接続不可能なホストはミラーを参照することで yum コマンドを実行できるようになる。
前提条件
接続可能なホストをホスト1、接続不可能なホストをホスト2とする。
ホスト1については、RHEL7 で Red Hat Subscription Manager によるシステム登録、サブスクライブが完了し yum ができる状態となっていることとする。
また、本手順では RHEL7 の通常のリポジトリとなる「rhel-7-server-rpms」のミラーを作成する。
同一ホストで異なる OS のリポジトリのミラーは作成できないので RHEL6 のリポジトリのミラーを作成する場合は別途ホストを用意すること。
1.パッケージのインストール (ホスト1の作業)
$ yum install yum-utils createrepo httpd
2.リポジトリのコピー (ホスト1の作業)
$ reposync --downloadcomps --download-metadata --newest-only -a x86_64 -r rhel-7-server-rpms -d -p /var/repos/
No Presto metadata available for rhel-7-server-rpms
(1/5285): 389-ds-base-libs-1.3.7.5-21.el7_5.x86_64.rpm | 696 kB 00:00:01
(2/5285): 389-ds-base-1.3.7.5-21.el7_5.x86_64.rpm | 1.7 MB 00:00:02
::
(5284/5285): zziplib-0.13.62-5.el7.x86_64.rpm | 81 kB 00:00:00
(5285/5285): zsh-5.0.2-28.el7.x86_64.rpm | 2.4 MB 00:00:04
You have new mail in /var/spool/mail/root
$
※--newest-only オプションで各パッケージの最新 ver のみコピー
3.メタデータの作成のコピー (ホスト1の作業)
$ createrepo -s sha256 --checkts --update --workers=2 -g /var/repos/rhel-7-server-rpms/comps.xml /var/repos/rhel-7-server-rpms
Could not find valid repo at: /var/repos/rhel-7-server-rpms
Spawning worker 0 with 2643 pkgs
Spawning worker 1 with 2642 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
$
$ modifyrepo /var/repos/rhel-7-server-rpms/productid /var/repos/rhel-7-server-rpms/repodata/
Wrote: /var/repos/rhel-7-server-rpms/repodata/productid.gz
type = productid
location = repodata/…-productid.gz
checksum = …
timestamp = …
open-checksum = …
Wrote: /var/repos/rhel-7-server-rpms/repodata/repomd.xml
$
$ cd /var/repos/rhel-7-server-rpms
$ gunzip -c $(ls -t *updateinfo.xml.gz) > updateinfo.xml
$ modifyrepo /var/repos/rhel-7-server-rpms/updateinfo.xml /var/repos/rhel-7-server-rpms/repodata/
Wrote: /var/repos/rhel-7-server-rpms/repodata/updateinfo.xml.gz
type = updateinfo
location = repodata/…-updateinfo.xml.gz
checksum = …
timestamp = …
open-checksum = …
Wrote: /var/repos/rhel-7-server-rpms/repodata/repomd.xml
4.HTTP の設定 (ホスト1の作業)
$ vi /etc/httpd/conf.d/repos.conf
<Directory /var/repos>
Options Indexes FollowSymLinks
AllowOverride None
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
Alias /repos /var/repos
$ systemctl restart httpd
5.クライアントの yum 設定 (ホスト2の作業)
$ vi /etc/yum.repos.d/test.repo
[local-myrepository]
name=My repository
baseurl=http://<ホスト1の IP アドレス>/repos/rhel-7-server-rpms
gpgcheck=0
enabled=1
参考情報
How to synchronize repository on system registered to CDN via subscription-manager
https://access.redhat.com/articles/1355053
How to create a local mirror of the latest update for Red Hat Enterprise Linux 5, 6, 7 without using Satellite server?
https://access.redhat.com/solutions/23016
How to create a local repository for updates
https://access.redhat.com/solutions/9892