CentOS 7でLinux Kernelと同じバージョンのkernel-headersをインストールしたい時、
# uname -r 3.10.0-327.36.3.el7.x86_64
次のように実行することができます。
# yum install "kernel-headers-$(uname -r)"
…そのはずでした。
ところが、実際に実行すると「パッケージは利用できません。エラー:何もしません」 と言われてしまいます。しろよ。
# yum install "kernel-headers-$(uname -r)" 読み込んだプラグイン:fastestmirror base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/4): base/7/x86_64/group_gz | 155 kB 00:00:00 (2/4): extras/7/x86_64/primary_db | 183 kB 00:00:00 (3/4): updates/7/x86_64/primary_db | 1.2 MB 00:00:00 (4/4): base/7/x86_64/primary_db | 5.6 MB 00:00:02 Determining fastest mirrors * base: ftp.riken.jp * extras: ftp.riken.jp * updates: ftp.riken.jp パッケージ kernel-headers-3.10.0-327.36.3.el7.x86_64 は利用できません。 エラー: 何もしません
なぜか。実は上の出力にあるように、CentOSはバージョン7の最新版(つまり現在だと7.3.1611と同等)の下にあるパッケージを参照してその中からインストール候補を探します。
普段、最新版しか使わないならこれでも問題ないですが、何かの検証でバージョンを固定したい場合にこれだと困りますよね。
これまではyumのリポジトリーファイルの$releaseverを手動で変えていたのですが、これをやるとたまにパッケージバージョンの依存関係を解決できないとかで、エラーになったりしていました。
# vi /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ...
この問題を解決するヒントが次のドキュメントに書かれていました。
つまり、releaseverを固定するには次のようにコマンドを実行します。
# $SHELL -c "echo 7.2.1511 > /etc/yum/vars/releasever" # yum clean all
そのあと、各yumリポジトリーファイルのmirrorlist行をコメントアウトして、baseurlのコメントを外す必要があります。
ちなみにIPv6をオフにする設定も一緒に行っておくといいと思います。
# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
もう一度実行すると、今度は目的のパッケージを見つけることができるようになったはずです。
# yum install "kernel-headers-$(uname -r)" 読み込んだプラグイン:fastestmirror Loading mirror speeds from cached hostfile 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ kernel-headers.x86_64 0:3.10.0-327.36.3.el7 を インストール --> 依存性解決を終了しました。 依存性を解決しました ========================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ========================================================================================== インストール中: kernel-headers x86_64 3.10.0-327.36.3.el7 updates 3.2 M トランザクションの要約 ========================================================================================== インストール 1 パッケージ 総ダウンロード容量: 3.2 M インストール容量: 3.2 M Is this ok [y/d/N]:
よかったですね。
ただし、この方法が可能なのは最新版の一つ前のバージョンまでです。例えば7.1.1503のディレクトリーを開いてみましょう。ポツンとreadmeファイルが一つあるだけになっています。
なぜなら古いバージョンは http://vault.centos.org にお引越ししてしまうためです。 どうしても古いバージョンのCentOSが必要なら独自ミラーを作るべきでしょう。
まあ、こうやって対処したりCentOS-Vault.repoを使ってもいいですね。
baseurl=http://mirror.centos.org/centos/7.1.1503/(以下略) ↓ baseurl=http://vault.centos.org/centos/7.1.1503/(以下略)
さらにCentOSの場合、新しいマイナーバージョンがリリースされると新しいバージョンのパッケージは古いマイナーバージョンのリポジトリーには提供されなくなるので、バージョン固定するとセキュリティパッチすら充てられなくなります。
そういったサポートが必要なら、RHELのサブスクリプション契約を行なってRHELを利用するか、そういったサポートをしているベンダーと契約するか、自分で頑張る必要があります。
ディストリビューションのリリースバージョンを更新するには
簡単です。バージョンを上書きするだけです。
# $SHELL -c "echo 7.3.1611 > /etc/yum/vars/releasever" # yum clean all
最新のバージョンのリポジトリーを参照するように設定を戻すには、/etc/yum/vars/releaseverを削除してCentOS-Base.repoの設定を元に戻す必要があります。