外部ネットワークとは隔離された環境でいろいろ作業する時のために、だいぶ前から欲しいと思っていた 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
は必要ない?かもしれないけど、あったほうが便利なので。
<p>
<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
簡単!