2025年3月30日,官方發布了Keepalived的最新版,版本號:2.3.3
而2024年11月3日發布的2.3.2版本,在CentOS 7.9上編譯的時候,就出現了報錯,但是在Alma Linux 8.10上,則可以成功編譯安裝,當時我就覺得可能從2.3.2版本開始,Keepalived已經不再支持CentOS 7了,但是在這個版本的發布聲明中,官方并沒有明確提及這個問題。
下載地址:https://keepalived.org/software/keepalived-2.3.3.tar.gz (不再兼容CentOS/Redhat 7.x版本)
相關報錯記錄詳見:https://blog.csdn.net/cnskylee/article/details/143572514
但是,這次的2.3.3版的發布聲明文檔中,官方已經明確申明,Keepalived 2.3.3版本不再支持CentOS 7系統。
但是,這里讓我很不解的是,官方又在 Improvements 說明,允許在非常老的系統中編譯(內核版本 < 3.15),不過我在CentOS 7.9系統中編譯,還是出現錯誤,信息如下:
[root@node02 keepalived-2.3.3]# make
Making all in lib
make[1]: 進入目錄“/usr/local/src/keepalived-2.3.3/lib”
make all-am
make[2]: 進入目錄“/usr/local/src/keepalived-2.3.3/lib”CC memory.oCC utils.o
utils.c: 在函數‘dump_buffer’中:
utils.c:106:5: 警告:無法優化可能無窮的循環 [-Wunsafe-loop-optimizations]for (j = i - 15; j <= i; j++)^CC notify.oCC timer.oCC scheduler.oCC vector.oCC html.oCC parser.oCC signals.oCC logger.oCC list_head.oCC rbtree.oCC process.oCC json_writer.oCC rttables.oAR liblib.a
make[2]: 離開目錄“/usr/local/src/keepalived-2.3.3/lib”
make[1]: 離開目錄“/usr/local/src/keepalived-2.3.3/lib”
Making all in keepalived
make[1]: 進入目錄“/usr/local/src/keepalived-2.3.3/keepalived”
Making all in core
make[2]: 進入目錄“/usr/local/src/keepalived-2.3.3/keepalived/core”CC main.o
main.c: 在函數‘sigend’中:
main.c:1210:34: 警告:assuming signed overflow does not occur when simplifying conditional to constant [-Wstrict-overflow]for (i = 0; i < NUM_CHILD_TERM && wait_count; i++) {^
main.c:1232:6: 警告:assuming signed overflow does not occur when simplifying conditional to constant [-Wstrict-overflow]if (wait_count) {^
main.c:1169:8: 警告:assuming signed overflow does not occur when simplifying conditional to constant [-Wstrict-overflow]while (wait_count) {^CC daemon.oCC pidfile.oCC layer4.oCC smtp.oCC global_data.oCC global_parser.oCC keepalived_netlink.o
keepalived_netlink.c: 在函數‘rta_addattr_l’中:
keepalived_netlink.c:748:42: 警告:在有符號和無符號整數表達式間比較 [-Wsign-compare]if (RTA_ALIGN(rta->rta_len) + align_len > maxlen)^
keepalived_netlink.c: 在函數‘rta_addattr_l2’中:
keepalived_netlink.c:769:42: 警告:在有符號和無符號整數表達式間比較 [-Wsign-compare]if (RTA_ALIGN(rta->rta_len) + align_len > maxlen)^CC namespaces.oCC track_process.oCC reload_monitor.oCC config_notify.oAR libcore.a
make[2]: 離開目錄“/usr/local/src/keepalived-2.3.3/keepalived/core”
Making all in vrrp
make[2]: 進入目錄“/usr/local/src/keepalived-2.3.3/keepalived/vrrp”CC vrrp_daemon.oCC vrrp_print.oCC vrrp_data.oCC vrrp_parser.oCC vrrp.o
vrrp.c: 在函數‘vrrp_check_packet’中:
vrrp.c:1053:23: 警告:在有符號和無符號整數表達式間比較 [-Wsign-compare]vrrp->adver_int != (V3_PKT_ADVER_INT_NTOH(hd->v3.adver_int)) * TIMER_CENTI_HZ) {^
vrrp.c: 在函數‘open_vrrp_read_socket’中:
vrrp.c:2717:103: 錯誤:‘IPV6_FREEBIND’未聲明(在此函數內第一次使用)if (setsockopt(fd, family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6, family == AF_INET ? IP_FREEBIND : IPV6_FREEBIND, &on, sizeof on))^
vrrp.c:2717:103: 附注:每個未聲明的標識符在其出現的函數內只報告一次
make[2]: *** [vrrp.o] 錯誤 1
make[2]: 離開目錄“/usr/local/src/keepalived-2.3.3/keepalived/vrrp”
make[1]: *** [all-recursive] 錯誤 1
make[1]: 離開目錄“/usr/local/src/keepalived-2.3.3/keepalived”
make: *** [all-recursive] 錯誤 1
[root@node02 keepalived-2.3.3]# uname -a
Linux node02 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
而這個問題,估計就與3.15版本的內核中新引入的“開放式文件描述符鎖-Open file descriptor locks”有關系。