CentOS の rpm local mirror を作る

外部ネットワークとは隔離された環境にいろいろ作る時のために,同じくだいぶ前から欲しいと思っていた rpm ファイルの local mirror も作ることにしました.

…と言っても,調べてみたら作業自体はえらく簡単でした.こんなならもっと早くやっておけばよかった…^^;

流れとしては「rsync で全ファイルを取得」「ディレクトリを httpd から見えるように設定」「ダウンロード先を local mirror に向ける」だけです.

rsync で全ファイルを取得

centos.org にある Mirror List から rsync をサポートしているホストを選び,近そうなところからダウンロードする.

今回は IIJ の rsync ミラーを使うことにした.

例えば下記のようなスクリプトで,rsync を使って必要なファイルを取得.

#!/bin/sh
for ver in 5.9 6.3
do
  rsync -avSHP --verbose --delete \
    --exclude "centosplus" \
    --exclude "local*" \
    --exclude "cr" \
    --exclude "fasttrack" \
    --exclude "isos" \
    rsync://ftp.iij.ad.jp/pub/linux/centos/$ver/ \
    ~/mirror/$ver/
done
exit 0

ファイルサイズはそれぞれこんな感じになった.6.3 の updates がけっこう大きいなぁ.

$ du -hs 5.9/*
84K     5.9/addons
346M    5.9/centosplus
84K     5.9/contrib
243M    5.9/extras
8.6G    5.9/os
1.2G    5.9/updates

$ du -hs 6.3/*
7.9G    6.3/centosplus
84K     6.3/contrib
29M     6.3/extras
8.7G    6.3/os
34G     6.3/updates

ディレクトリを公開

apache を設定.Options +Indexes は必要ない?かもしれないけど,あったほうが便利なので.

<VirtualHost *:80>
    ServerAdmin email@example.com
    ServerName centos-mirror.example.com
    DocumentRoot /your/mirror/dir
    ErrorLog logs/centos-mirror-error_log
    CustomLog logs/centos-mirror-access_log common
    <Directory /your/mirror/dir>
        Options +Indexes
    </Directory>
</VirtualHost>

ダウンロード先を local mirror にする

/etc/yum.repos.d/CentOS-Base.repo ファイルを書き換える.mirrorlist= 行をコメントアウトして,baseurl= 行を今回作ったサーバに向ける.

apache で設定したパスがたどれるように.ホスト名だけ書き換えたら見えるようにした方が楽でよさそうなので,/centos 以下に見えるように設定した.

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

簡単!