RHEL4にkeepalivedをインストール
仕事の都合上RHEL4にkeepalivedをインストールすることになった。
CentOSでは何度か行っているが、RedHatでは少々変更する必要があったのでメモ。
環境
- Red Hat Enterprize Linux AS4
- keepalived ver1.1.15
手順
インストール済カーネルソースをコピー
keepalivedコンパイル時にカーネルソースを指定する必要があるが、今回はソースに手に加える必要があったのでソース全体をコピーしておく。
$ cp -r /usr/src/kernels/2.6.9-67.EL-ppc64 /usr/src/kernels/make_keeepalived_2.6.9-67.EL-ppc64
keepalivedダウンロード&解凍
$ cd /usr/local/src $ wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz $ tar xvzf keepalived-1.1.15.tar.gz
カーネルソースダウンロード&解凍
$ wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.gz $ tar xvzf linux-2.6.9.tar.gz
net/coreをコピー
デフォルトのカーネルソースではLinkWatchのインストールができないので、DLカーネルソースnet/coreをコピー
$ cd linux-2.6.9 $ cp net/core /usr/src/kernels/make_keeepalived_2.6.9-67.EL-ppc64
config.h修正
この状態でmakeを行うと以下のエラーが発生
gcc -g -O2 -I/usr/src/kernels/make_keepalived_2.6.9-67.EL-ppc64/include -I../include -I../../lib -Wall -Wunused -Wstrict-prototypes -D_KRNL_2_6_ -D_WITH_LVS_ -D_WITH_VRRP_ -c main.c /usr/src/kernels/make_keepalived_2.6.9-67.EL-ppc64/include/asm/cputable.h:18 から include されたファイル中, /usr/src/kernels/make_keepalived_2.6.9-67.EL-ppc64/include/asm/elf.h:6 から, /usr/src/kernels/make_keepalived_2.6.9-67.EL-ppc64/include/asm/sigcontext.h:12 から, /usr/include/bits/sigcontext.h:28 から, /usr/include/signal.h:333 から, /usr/include/sys/wait.h:30 から, ../include/main.h:30 から, main.c:25 から: /usr/src/kernels/make_keepalived_2.6.9-67.EL-ppc64/include/linux/config.h:6:2: #error including kernel header in userspace; use the glibc headers instead! make[2]: *** [main.o] エラー 1 make[2]: Leaving directory `/usr/local/src/keepalived-1.1.15/keepalived/core' make[1]: *** [all] エラー 1 make[1]: Leaving directory `/usr/local/src/keepalived-1.1.15/keepalived' make: *** [all] エラー 2
config.hを覗いてみる。
#ifndef _LINUX_CONFIG_H #define _LINUX_CONFIG_H #include <linux/autoconf.h> #if !defined (__KERNEL__) && !defined(__KERNGLUE__) #error including kernel header in userspace; use the glibc headers instead! #endif #endif
一方、DLカーネルソースのconfig.hは以下。
#ifndef _LINUX_CONFIG_H #define _LINUX_CONFIG_H #include <linux/autoconf.h> #endif
どうやらRHELではむやみにカーネルソースを用いてコンパイル出来ないようになっている模様。
今回はconfig.hをDLカーネルソースで上書きして対応することに。
$ cp /usr/local/src/linux-2.6.9/include/linux/config.h /usr/src/kernels/make_keepalived_2.6.9-67.EL-ppc64/include/linux/