第一回目で書いた通り、公式レポジトリの内、Baseを除くUpdates、Addons、Extras、PlusおよびContribは、随時更新されるレポジトリなので、定期的に内容を同期(ミラーリング)しなければならない。同期する手段は、
lftp
コマンドのmirror
コマンドを利用するrsync
を利用するreposync
コマンドを利用する
reposync
コマンドを利用する方法を紹介する。この
reposync
コマンドは、yumレポジトリの同期を取るコマンドで、yum-utilsパッケージに収録されている。もしこのパッケージがインストールされていなければ、インストールする。# yum install yum-utils
reposync
コマンドのmanページは無い様だ。使い方は、reposync --help
を実行して確認する。まず、レポジトリ管理は、root権限を必要としないので、レポジトリを管理するユーザを作成する。これは既存のユーザを流用してもいいが、レポジトリが汚染されると一大事なので、これ専用のユーザを準備し、レポジトリの所有者を変更する。
# useradd -c "Repository Maintainer" -d /home/reposer reposer # cd /var/www/html/ # chown -R reposer.reposer centos/以後、レポジトリに対する操作は、このユーザの権限で行う。
CentOSのレポジトリは通常、以下のようなディレクトリ構造を持つ。
$ pwd /var/www/html $ find . -type d . ./centos ./centos/5 <<略>> ./centos/5/extras ./centos/5/extras/i386 ./centos/5/extras/i386/repodata ./centos/5/contrib <<略>>
repodata
というディレクトリは、yumが利用するメタデータを格納したディレクトリで、RPMS
は文字通り、RPMパッケージが格納されている。目標は、これと同じ構造をローカルに作ること、ということになる。しかし、
reposync
コマンドは、このようなディレクトリ構造を生成しない。例えば、$ ls $ reposync -r extras Loading "installonlyn" plugin Downloading Terminal-0.2.6-2.i386.rpm <<略>> Downloading yumex-1.2.2-1.0.el5.centos.noarch.rpm $ find . -type d . ./extras ./extras/RPMS $まず、パス中に
i386
ディレクトリが抜かれているし、repodata
ディレクトリも存在していない。これを解決するために、reposync
の実行に先立ち、必要なディレクトリ構造及びシンボリックリンクを作成するスクリプトCreateRepoDirs.sh
を/var/www/html/centos/5
へ移動した後実行する。$ cat CreateRepoDirs.sh #!/bin/bash REPOSITORIES="updates addons extras centosplus" TOP=$PWD for repository in $REPOSITORIES do repo_path=$TOP/$repository mkdir $repo_path mkdir $repo_path/RPMS ln -s $repo_path/RPMS $repo_path/i386 done続いて、パッケージをダウンロードするスクリプト
CentOS-repository-mirror.sh
を準備する。Cronで実行するだけなので、どこに置いても構わないが、私は、/usr/local/sbin
の下に置いた。$ cat CentOS-repository-mirror.sh #!/bin/bash LANG=C REPOSITORIES="updates addons extras centosplus" TOP=$PWD echo "## `date`: BEGIN MIRRORING" for repository in $REPOSITORIES do echo "#### `date`: BEGIN REPOSITORY $repository" repo_path=$TOP/$repository reposync -c /usr/local/etc/yum.conf -r $repository createrepo -v $repo_path/RPMS echo "#### `date`: END REPOSITORY $repository" done echo "## `date`: END MIRRORING" $わざわざ
reposync
の設定ファイルを/usr/local/etc/yum.conf
に準備しているのは、パッケージを更新するのに参照するのをローカルミラーレポジトリに、reposync
が参照するのを公開ミラーレポジトリに変更するため。次のcreaterepo
コマンドは、メタデータ(repodata
)を作成するコマンド。/usr/local/etc/yum.conf
の内容は以下の通り。$ cat yum.conf [main] reposdir=/usr/local/etc/yum.repos.d $
/usr/local/etc/yum.repos.d
には/etc/yum.repos.d/CentOS-Base.repo
をコピーしておく(BaseとContribは不要なので、セクションごとコメントアウトした方がいいかもしれない)。後は、
/var/www/html/centos/5
に移動して、CentOS-repository-mirror.sh
を実行すればOKだ。これらのレポジトリは、随時更新されるので、このコマンドを定期的に実行するといいだろう。これは、ユーザreposerの権限でcronにより実行する。ユーザreposerでコマンド
crontab -e
を実行し、ユーザのreposerのcrontabに以下の行を追加する。13 2 * * * cd /var/www/html/centos/5; mv -f mirror.log mirror.log.old; /usr/local/sbin/CentOS-repository-mirror.sh > mirror.log 2>&1上の設定は、毎日2:13にレポジトリを更新する例。時刻は環境に応じて変更する。
最後にPGPのキーをインストールする。CentOS 5のPGPのキーは、
http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
にあるので、これを/var/www/html/centos
に置く。$ cd /var/www/html/centos $ wget http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
ローカルミラーレポジトリ・その1・概要
ローカルミラーレポジトリ・その2・レポジトリの準備と公開
ローカルミラーレポジトリ・その3・Baseレポジトリ
ローカルミラーレポジトリ・その4・レポジトリの更新(reposync & createrepo)
ローカルミラーレポジトリ・その5・レポジトリの利用