apatheia.info

yum のパッケージキャッシュについて

2013.06.15 yum

/etc/yum.confkeepcache=1にしておくと、インストールしたパッケージがキャッシュされるようになる。これが無効化された状態だと、パッケージアップグレード時に問題が起きても元に戻せなくなるので有効化しておいた方がいい。

あるパッケージについて、どのバージョンが利用可能な状態かは以下で確認できる。

$ sudo yum --showduplicates list パッケージ名

RHEL なら過去のバージョンまですべて手に入るけど、CentOS だとOSリリース時のバージョンと最新版しか手に入らない模様。リポジトリ上なりキャッシュなりで過去のバージョンが手に入るのであれば、yum installyum update は以下の手順でロールバックが行える。

# yum の利用履歴を確認
$ sudo yum history

# 履歴から詳細を確認
# 未引数なら直近、引数ありなら該当する ID を表示
$ sudo yum history info 4

# 仮に ID 4 で問題のバージョンアップが行われたようだということが確認できたら、その ID を指定して操作をアンドゥ
$ sudo yum history undo 4

アンドゥ(リドゥもある)では、対象パッケージおよび依存パッケージがまとめて一度に入れ替えられる。これはパッケージの操作がちゃんとトランザクションになっているため。

話がそれるけど、パッケージの操作にトランザクションがかかるというのはかなり重要だ。たとえば syslog-ng から rsyslog に入れ替えるとき、単純にアンインストール、インストールの順番でやろうとするとアンインストールのタイミングで大量の Syslog 依存なパッケージが道連れになるけど、以下のようにすればひとつのトランザクションでパッケージを入れ替えることができる。(情報源: Rsyslog Wiki)

$ sudo yum shell
> remove syslog-ng
> install rsyslog
> run

話がそれたついでにふれておくと、vagrant を使っているのであれば vagrant-cachier を使うとパッケージのキャッシュ保存先を仮想マシン外の領域(ホストOSとの共有ディスク部分など)に変更してくれる。こうすることで、仮想マシンを破棄してもパッケージのキャッシュが永続化されるため、2回目以降はダウンロードがスキップされて高速化する。

話を戻すと、世の中何が起きるかわからないので古いパッケージもとっておいたほうがいいかと。ディスク容量が気になりだしたら、yum clean packages を実行すればキャッシュは消せる。