daily dayflower

2007-12-06

CentOS 5.0 のままアップデートを続ける場合

/etc/yum.repos.d/CentOS-Base.repo からの抜粋です。

[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
protect=1
priority=1

CentOS 5.x の場合,$releasever は(5.0 ではなく)5 になります。ですから,mirrorlist の取得先は

のようになり,

http://ftp.iij.ad.jp/pub/linux/centos/5.1/updates/i386/
http://ftp.nara.wide.ad.jp/pub/Linux/centos/5.1/updates/i386/
http://ftp.riken.jp/Linux/centos/5.1/updates/i386/
ftp://ftp.oss.eznetsols.org/linux/centos/5.1/updates/i386/
http://centos.ustc.edu.cn/centos/5.1/updates/i386/
http://mirror.tini4u.net/centos/5.1/updates/i386/
http://mirror.mirr4u.com/centos/5.1/updates/i386/
http://ftp.daum.net/centos/5.1/updates/i386/
http://mirror.secuidc.com/centos/5.1/updates/i386/
http://ftp.tcc.edu.tw/Linux/CentOS/5.1/updates/i386/

のように 5.1 の updates レポジトリを参照するようになっています。

この $releasever がどこから取得されているか,ですが,

It derives the $releasever value from the version number of the package configured as "distroverpkg" (actually, whatever "provides" that in RPM parlance) in /etc/yum.conf, and $basearch from a call to the operating system's uname(2) function.

Re: Yum $releasever $basearch

/etc/yum.confdistroverpkg で指定されたファイルを提供するパッケージになります*1 *2

実際にたしかめてみましょう。

% cat /etc/yum.conf

[main]
...... snip ......
distroverpkg=redhat-release

redhat-release というファイル*3を提供する RPM パッケージを調べてみます。

% rpm -q --whatprovides redhat-release

centos-release-5-0.0.el5.centos.2

このパッケージのバージョン番号部分は「5」です。本当に?

% rpm -q --whatprovides redhat-release --qf "%{VERSION}\n"

5

本当でした。


ということで,このまま yum update すると 5.1 の updates レポジトリを見に行ってしまうので 5.1 にアップグレードされてしまいます。5.1 にするにはちょっと不安が……という方は 5.0 のままアップデートしていきたいところでしょう*4

そうするには以下の2案が考えられます

  1. centos-release-5.0-0.0.el5.centos.2 というパッケージを作ることで $releasever5.0 になるようにする
  2. /etc/yum.repos.d/*$releasever を手で 5.0 に置換する

案1だと面倒だし,サードパーティレポジトリ参照先がおかしくなるかもしれません。ですので案2のほうがいいと思います。

sed を使うなり perlワンライナーで書くなり vi で編集するなり,お好きなように。

% sudo vi /etc/yum.repos.d/CentOS-Base.repo

:%s/\$releasever/5.0/g
:wq

これで,各レポジトリの参照先は 5.0 のものとなりますので安心して yum update できます。

Upstream vendor a.k.a. RedHat は 5.0 ツリーのメンテナンスもしばらく続けるとのことですが(ほんとかな),CentOS がどのようなポリシーで追随するのかはわかんないです。後述しますが,一部パッケージはバージョンがあがってたりするので悩みどころですね。昨日も Samba でちょっとはまりましたし。ま,個人的には 5.1 でいこうとおもいます。

*1:ちなみに $basearch$archuname(2) の結果より取得されますが,python package の rpmUtils.arch.getBaseArch(), rpmUtils.arch.getCanonArch() で取得しています。

*2:このへんの値の取得コードは /usr/lib/python2.4/site-packages/yum/config.py_getsysver() にあります。

*3:実際には /etc/redhat-release というファイルを示していると考えられます

*4yum-updatesd や yum-cron でアップグレードされてしまった方はご愁傷様です

ozakiozaki 2012/05/09 09:40 助かりました!ありがとうございます!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/dayflower/20071206/1196912692