CentOS 7でyumリポジトリのミラーサーバーを構築する方法

CentOS 7でyumリポジトリのミラーサーバーを構築する方法

複数のCentOS 7マシンを稼働させていると、インターネット経由での更新によるネットワーク帯域の消費が気になる場合があります。そんなときは、ローカルネットワーク上にyumリポジトリサーバーを構築するという手があります。

これにより、複数のCentOS 7マシンを稼働させている場合でも、インターネット接続の帯域を心配せずに更新が可能になります。

ここでは、CentOS 7でHTTP接続可能なyumリポジトリのミラーサーバーを構築する手順を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS(Minimal)7.6.1810

yumリポジトリサーバーの構築手順

パッケージのインストール

まずは、必要となるパッケージをインストールします。

ここでは、WebサーバーとしてNginxを利用します。

# yum install creatrepo rsync nginx

Nginxの設定

Nginxの設定ファイルを作成します。

# vi /etc/nginx/conf.d/pkgsv.conf

server {
  listen 80 default_server;
  server_name pkgsv.local;
  root /usr/share/nginx/html/repos;
  autoindex on;
  autoindex_localtime on;
}

設定ファイルを作成したら、Nginxサービスの起動設定を行います。

# systemctl start nginx
# systemctl enable nginx

ファイアウォール設定

ファイアウォールで、HTTP接続を許可します。

# firewall-cmd --permanent --add-service=http
success
# firewall-cmd --reload
success

リポジトリの作成

ここでは、CentOS 7のデフォルトで有効となっている「base」「updates」「extras」の3つのリポジトリを作成します。

Nginxのルートディレクトリ配下に、リポジトリ用のディレクトリを作成します。

# mkdir -p /usr/share/nginx/html/repos/centos/7/{os,updates,extras}/x86_64

次に、日本国内にあるCentOSのyumリポジトリミラーサイトと、上で作成したリポジトリ用のディレクトを同期させます。

Memo

rsyncに対応した国内のyumリポジトリミラーサイトは、以下のWebサイトで確認できます。

CentOS Project | Mirror List

初回の同期では、3つのリポジトリを合わせて、25GBほどのデータがダウンロードされるため、時間がかかります。

# rsync -av --delete rsync://ftp.iij.ad.jp/centos/7/os/x86_64/ /usr/share/nginx/html/repos/centos/7/os/x86_64/
# rsync -av --delete rsync://ftp.iij.ad.jp/centos/7/updates/x86_64/ /usr/share/nginx/html/repos/centos/7/updates/x86_64/
# rsync -av --delete rsync://ftp.iij.ad.jp/centos/7/extras/x86_64/ /usr/share/nginx/html/repos/centos/7/extras/x86_64/

リポジトリの更新

リポジトリを更新するときは、上の「rsync」コマンド3つを再度実行します。

ちなみに、以下のようなスクリプトを作成しておけば、自動的にリポジトリを更新することができます。以下の例では、cronで1日一回更新します。

# vi /etc/cron.daily/update-repo

#!/bin/sh
REPOS=(os updates extras)
for REPO in ${REPOS[@]}
do
rsync -av --delete rsync://ftp.iij.ad.jp/centos/7/${REPO}/x86_64/ /usr/share/nginx/html/repos/centos/7/${REPO}/x86_64/
done
# chmod 755 /etc/cron.daily/update-repo

以上で、サーバー側の設定は完了です。

クライアントマシンから更新の確認

クライアントマシン上で、repoファイルの設定を変更して、構築したyumリポジトリサーバーへ接続するようにします。

変更内容は、[base][updates][extras]それぞれのセクションで「mirrorlist=」から始まる行をコメントアウトし、直下の「baseurl=」から始まる行のコメントアウトを外して、ホスト名部分を構築したリポジトリサーバーのホスト名に変更します。

# vi /etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://pkgsv.local/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://pkgsv.local/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://pkgsv.local/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

repoファイルを修正したら、更新が可能か確認してみます。

# yum clean all
# yum update
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
base                                       | 2.9 kB  00:00:00     
extras                                     | 2.9 kB  00:00:00     
update                                     | 2.9 kB  00:00:00     
(1/3): extras/7/x86_64/primary_db          | 180 kB  00:00:00     
(2/3): updates/7/x86_64/primary_db         | 2.4 MB  00:00:00     
(3/3): base/7/x86_64/primary_db            | 6.0 MB  00:00:00     
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ NetworkManager.x86_64 1:1.12.0-6.el7 を 更新
---> パッケージ NetworkManager.x86_64 1:1.12.0-8.el7_6 を アップデート
---> パッケージ NetworkManager-libnm.x86_64 1:1.12.0-6.el7 を 更新
---> パッケージ NetworkManager-libnm.x86_64 1:1.12.0-8.el7_6 を アップデート
---> パッケージ NetworkManager-team.x86_64 1:1.12.0-6.el7 を 更新
---> パッケージ NetworkManager-team.x86_64 1:1.12.0-8.el7_6 を アップデート
…以下省略

正常に更新できればOKです。

あとがき

多くのCentOS 7マシンを稼働させているような環境では、ローカルネットワーク上にyumリポジトリのミラーサーバーを配置しておけば、インターネット回線の帯域節約に役立ちますね。

Windows環境に慣れている方であれば、WSUS(Windows Server Update Services)のような感じと考えれば分かりやすいかもしれません。