ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

yumの定時アップデート処理について。

さて、開発用・・・とはいえど。本番用もあるわけで。で、調べなくちゃ行けないのがパッケージのアップデート処理。というわけで、まずはさくっとyumパッケージ自体の中身を見てみます。

$ rpm -ql yum
/etc/cron.daily/yum.cron
/etc/cron.weekly/yum.cron
/etc/logrotate.d/yum
/etc/rc.d/init.d/yum
/etc/yum
/etc/yum.conf
/etc/yum.repos.d
/etc/yum/yum-daily.yum
/usr/bin/yum
/usr/bin/yum-arch
/usr/lib/python2.3/site-packages/repomd
...
/usr/lib/python2.3/site-packages/yum/transactioninfo.pyc
/usr/share/doc/yum-2.4.3
...
/usr/share/man/man5/yum.conf.5.gz
...
/usr/share/yum-cli/callback.py
...
/usr/share/yum-cli/yummain.pyc
/var/cache/yum

はぁん。で、各ファイルをざっと見てまとめ直すと。

/etc/cron.daily/yum.cron

これが定時更新処理のキモ。中はシンプルにこんな感じ。

#!/bin/sh
if [ -f /var/lock/subsys/yum ]; then
        /usr/bin/yum -R 120 -e 0 -d 0 -y update yum
        /usr/bin/yum -R 10 -e 0 -d 0 -y shell /etc/yum/yum-daily.yum
fi

/etc/yum/yum-daily.yumについては、shellオプションで起動されたときに対する「入力」が書かれていた。

で、ifでファイル存在をチェックしている。このロックファイルはどこで作られるのかというと。

/etc/rc.d/init.d/yum

これ、startでロックファイルを作成、stopでロックファイルを削除する仕組み。はぁん。つまり、cron.dailyが実行されるのを前提として、そのスイッチの役目になっているわけだ。

他。

というわけで、おおよそのポイントは押さえ終わった。yumのオプションとかについては省略。--helpやmanを見れば済む。
後は関連する雑多なファイルについて。

/etc/cron.weekly/yum.cron
"clean package"オプションで実行される。yumのキャッシュディレクトリ内の、ダウンロードしたパッケージファイルを削除してくれる。
/etc/logrotate.d/yum
/var/log/yum.log のlogrotate設定。
/etc/yum.conf
man (5) yum.conf を参照。
/var/cache/yum
yum.confの"cachedir"のデフォルト。

こんな感じ。
ふーん・・・じゃあ結局、yumをdefaultでONにしておけば、特に、まぁ・・・問題はなさそうだね。

・・・ってちょっとまて。もうちょっと慎重に。伊達に、TurboLinuxApacheのパッケージ更新で何度も涙を流してはいない。(設定ファイル上書きされてマジ怒り心頭)

cron.dailyのyum.cronをもうちょっと慎重に見てみよう。

/usr/bin/yum -R 120 -e 0 -d 0 -y update yum
/usr/bin/yum -R 10 -e 0 -d 0 -y shell /etc/yum/yum-daily.yum

まず最初の行は、"yumパッケージそれ自体"のアップデートを行っている。-eはエラーレベル、-dはデバッグレベル。-yは何かプロンプトされたら全てYesにするオプション。
二行目が問題で、shellモードで起動するよう指示し、入力内容は yum-daily.yum を使うよう指示している。shellモードって何?ということで、man yumを見てると

yum-shell(8)

という記述が。というわけで、"man 8 yum-shell"。

え〜〜っと・・・。まぁ単純で、yumコマンドラインオプションをそのまま打ち込めますよ、ということらしい。

# yum list ...
# yum update ...
...

と打たなければいけなかったのが、

# yum shell
list ...
update ...

となるわけ。
では実際に、yumのshellに渡されるファイル、/etc/yum/yum-daily.yumの中身は

update
ts run
exit

えーっと。ようするに、アップデート「しちゃう」わけだ・・・。

まぁ・・・いっか。どちらかというと check-update した結果をメールで寄越してお仕舞いで、アップデートは管理者自身で、というのもイイかなとは思ってたんだけど。
但し、すっぴんのインストールしたてのCentOS4でコレやると、かなりの数のパッケージがアップデートかかるので。最初からONにするのはやめておいた方が良いかも。
それはそれとして、CentOSについてはパッケージアップデートのXMLフィードとかは特に用意してないんだな。TurboLinuxだと
http://www.turbolinux.co.jp/security/index.rdf
から読めるので、結構便利なんだが・・・。まぁ、いっか。

うん、とりあえずこれはこれで、yumについていろいろ理解できたので良しとしよう。なんというか・・・アレだな。パッケージ自体はRPMで昔通りなんだけど、「リポジトリ」という概念をサポートする為のツールとして、yumがあるんだろな・・・。

それにしても、時流に取り残されてるな。自分。