Linuxでリポジトリサーバを作成する

AWS

インターネット上のリポジトリにアクセスできないローカルな環境でdnf/yumによるパッケージをインストールしたい時やパッケージのバージョンを管理したい時なんかのためにリポジトリサーバを構築してそこからパッケージをインストールするという方法があります。
今回はパブリックサブネット上にリポジトリサーバを作成し、プライベートサブネット上のサーバからリポジトリサーバのリポジトリを参照してパッケージをインストールしてみます。

構成イメージ

リポジトリサーバはインターネット上のリポジトリからパッケージをダウンロードしてきます。
リポジトリサーバからサーバAに対してリポジトリを参照させるためにapacheを導入し、httpによりアクセスさせます。
サーバAはリポジトリサーバからパッケージをインストールします。

事前準備

事前に以下のものを用意しておきます。
【リポジトリサーバ】
・インターネットに接続可能なEC2インスタンス(RHEL8.6)
※SELINUXは無効(disabled)としておきます。
【サーバA】
・インターネットに接続できないEC2インスタンス(RHEL8.6)

手順の流れ

以下の流れで実装します。

1.【リポジトリサーバ】パッケージダウンロード
2.【リポジトリサーバ】httpd導入&httpd.conf変更
3.【サーバA】リポジトリファイル変更
4.【サーバA】パッケージのインストール確認

1. 【リポジトリサーバ】パッケージダウンロード

リポジトリ用のディレクトリを作成し、インターネット上のRHELのリポジトリからデータをダウンロードしていきます。
RHEL8からはパッケージ構成が「BaseOS」と「AppStream」の2つで構成されているのでそれぞれ実施します。

# mkdir -p /repo/RHEL8
# dnf repolist --all |grep enabled ←現在有効なリポジトリを確認します。
ansible-2-for-rhel-8-rhui-rpms                Red Hat Ansible Engine 2  enabled
epel                                          Extra Packages for Enterp enabled
epel-modular                                  Extra Packages for Enterp enabled
rhel-8-appstream-rhui-rpms                    Red Hat Enterprise Linux  enabled
rhel-8-baseos-rhui-rpms                       Red Hat Enterprise Linux  enabled
rhui-client-config-server-8                   RHUI Client Configuration enabled
↑「rhel-8-baseos-rhui-rpms」と「rhel-8-appstream-rhui-rpms」がリポジトリIDになります。

reposyncコマンドでデータをダウンロードします。
最新のパッケージのみを取得するために–newest-onlyオプションを指定します。
(指定しない場合は古いバージョンも一緒に取得されます。)
また、今回はRHEL8.6のパッケージを取得するために–releasever=8.6というオプションも指定します。
(指定しない場合はRHEL8.7(現時点の最新)バージョンのパッケージが取得されます。)

# reposync -p /repo/RHEL8 --download-metadata --repo=rhel-8-baseos-rhui-rpms --newest-only --releasever=8.6

# reposync -p /repo/RHEL8 --download-metadata --repo=rhel-8-appstream-rhui-rpms --newest-only --releasever=8.6

2.【リポジトリサーバ】httpd導入&httpd.conf変更

リポジトリサーバにhttpdの導入とサーバAにリポジトリを参照させるための設定をしていきます。

# dnf install httpd

httpd.confを一部変更と追加します。

# vi /etc/httpd/conf/httpd.conf
【変更】
DocumentRoot "/var/www/html"
↓
DocumentRoot "/repo"

【追加】
<Directory "/repo">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

変更後にhttpdを再起動。

# systemctl restart httpd

3.【サーバA】リポジトリファイル変更

サーバAの/etc/yum.repos.d配下にreposerver.repoというファイルを作成し、その中でリポジトリサーバのリポジトリを参照しにいく設定をします。

# vi /etc/yum.repos.d/reposerver.repo

BaseOSとAppstreamについてそれぞれ記載して保存。

[reposerver-rhel8-baseos]
name=reposerver-rhel8-baseos
baseurl=http://[リポジトリサーバのローカルIP]/RHEL8/rhel-8-baseos-rhui-rpms
gpgcheck=0
enabled=1

[reposerver-rhel8-appstream]
name=reposerver-rhel8-appstream
baseurl=http://[リポジトリサーバのローカルIP]/RHEL8/rhel-8-appstream-rhui-rpms
gpgcheck=0
enabled=1

4.【サーバA】パッケージのインストール確認

まず、リポジトリサーバのセキュリティグループのインバウンドでサーバAからのhttp(80番)を許可しておきます。
※サーバAからリポジトリサーバへのアウトバウンドとしてhttp(80番)も許可が必要です。

実際にリポジトリサーバからパッケージをインストールできるか確認します。

# dnf clean all
# dnf repolist --all | grep enable 
reposerver-rhel8-appstream                    reposerver-rhel8-appstrea enabled
reposerver-rhel8-baseos                       reposerver-rhel8-baseos   enabled
↑BaseOSとAppStreamがenabledになっていることを確認します。

試しにpython3がインストールできるか確認。

# dnf install python3

Repository列でreposerver.repoに設定した、リポジトリサーバのrepoidが表示されているのでリポジトリサーバからパッケージを取得していることが分かります。

以上で完了。

コメント

タイトルとURLをコピーしました