複数のCentOS 7マシンを稼働させていると、インターネット経由での更新によるネットワーク帯域の消費が気になる場合があります。そんなときは、ローカルネットワーク上にyumリポジトリサーバーを構築するという手があります。
これにより、複数のCentOS 7マシンを稼働させている場合でも、インターネット接続の帯域を心配せずに更新が可能になります。
ここでは、CentOS 7でHTTP接続可能なyumリポジトリのミラーサーバーを構築する手順を紹介します。
目次
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リポジトリミラーサイトと、上で作成したリポジトリ用のディレクトを同期させます。
rsyncに対応した国内のyumリポジトリミラーサイトは、以下のWebサイトで確認できます。
初回の同期では、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)のような感じと考えれば分かりやすいかもしれません。