年の瀬ですね。
さて、先日よりkernelと特定CPUの組み合わせで起こる『新208.5日問題』が話題となりました。
208.5 日問題の逆襲: 熊猫さくらのブログ
新208.5日問題 - Systems with Intel® Xeon® Processor E5 hung after upgrade of Red Hat Enterprise Linux 6
上記の分かりやすい解説をご覧いただければと思います。
で、ばっちり要対応のサーバばかりでしたので、せっせこ作業をすすめておりました。
そのなかでLVSとして利用しているkeepalived、これkernelあげたらリコンパイルしないとだめだよね、
というのがあり、そのmake時にちょっとハマったのでここに残すようにします。
以前は
KeepalivedによるロードバランサLVS構築 - RLB
上記の手順を参考にしてkeepalived-1.2.7をRPM化し利用していました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
yum -y install ipvsadm iproute curl make kernel kernel-devel rpm-build openssl-devel popt popt-devel gcc net-snmp-devel libnl-devel
useradd rpm
su rpm
### User `rpm' ###
cd ${HOME}
wget http://すでにダウンロードしていたソース置き場サーバ/peth/to/keepalived-1.2.7.tar.gz
tar xzvf keepalived-1.2.7.tar.gz
mkdir -p ${HOME}/rpmbuild/SOURCES
cp keepalived-1.2.7.tar.gz ${HOME}/rpmbuild/SOURCES/
cd ${HOME}/keepalived-1.2.7
./configure --enable-snmp
make rpm
exit
### User `rpm' ###
yum install -y /home/rpm/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm
|
はい。
これでkeepalived-1.2.7はインストールされました。
で、これをkernelアップデート後、最新のバージョンであるkeepalived-1.2.9にあげようという魂胆でした。
以下のような手順で簡単に上がるのだろうと考えていました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# すでにkernel-2.6.32-358.23.2.el6にアップデートされrebootも行ったものとする。#
yum update -y kernel-devel
su rpm
### User `rpm' ###
cd ${HOME}
wget http://すでにダウンロードしていたソース置き場サーバ/peth/to/keepalived-1.2.9.tar.gz
tar xzvf keepalived-1.2.9.tar.gz
mkdir -p ${HOME}/rpmbuild/SOURCES
cp keepalived-1.2.9.tar.gz ${HOME}/rpmbuild/SOURCES/
cd ${HOME}/keepalived-1.2.9
./configure --enable-snmp
make rpm
exit
### User `rpm' ###
yum install -y /home/rpm/rpmbuild/RPMS/x86_64/keepalived-1.2.9-5.x86_64.rpm
|
ところが
make rpm
の最中に以下行を確認して「あれれおかしいな」と感じた次第。
1
2
3
4
|
(snip)
gcc -O2 -g -I/lib/modules/2.6.32-358.18.1.el6/build/include -I/lib/modules/2.6.32-358.18.1.el6/build/include -I../include -I../../lib -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -D_WITHOUT_SNMP_ -c main.c
(同様のgcc行多数)
(snip)
|
アップデートしたはずの、`2.6.32-358.23.2.el6’を見てくれていないようです。
原因は以下にありました。
1
2
|
grep -n 'define kernel' /home/rpm/keepalived-1.2.9/keepalived.spec.in
5:%define kernel %(rpm -q kernel-devel --qf '%{RPMTAG_VERSION}-%{RPMTAG_RELEASE}\\n' 2>/dev/null | head -1)
|
この %(rpm -q kernel-devel –qf ‘%{RPMTAG_VERSION}-%{RPMTAG_RELEASE}\n’ 2>/dev/null | head -1) が思ったように動いてくれなかったようです。
1
2
|
rpm -q kernel-devel --qf '%{RPMTAG_VERSION}-%{RPMTAG_RELEASE}\\n' 2>/dev/null | head -1
2.6.32-358.18.1.el6\n2.6.32-358.23.2.el6\n
|
とyum update kernel-develを実行したサーバにおいては、
『2.6.32-358.18.1.el6\n2.6.32-358.23.2.el6\n』と二つのバージョンが改行区切りの混在した形で出力されるようで、
動作をみている限りでは、前者である「2.6.32-358.18.1.el6」をdefine kernelした模様。
なので
1
2
|
yum remove kernel-devel
yum install kernel-devel-2.6.32-358.23.2.el6.x86_64
|
とした上でkeepalivedのリコンパイルを行った次第です。
気になったのが、今までkernel-develをupdateすることはあっても、
いちいちremoveして新しいものを改めて入れる、なんてことはしたことがありませんでした。
このように「いちいちremoveして新しいバージョンのkernel-develを改めて入れる」というのが、
通常の手順なのでしょうか。
それともkeepalivedの
1
|
%(rpm -q kernel-devel --qf '%{RPMTAG_VERSION}-%{RPMTAG_RELEASE}\\n' 2>/dev/null | head -1)
|
が変だ、という話なのでしょうか。
そのあたり疑問に残った次第であります。
それでは皆様、よい年越しを。