1:下载ipvsadm源码
2创建连接文件,ln -sv /usr/src/kernels/2.6.18* /usr/src/linux
如果/usr/src/中没有kernels则安装kernel-devel-2.6.18-8.el5.i686.rpm
3 :tar –zxvf ipvsadm-1.24.tar.gz
4:make
5:make install
第二步不做make时则会出现以下错误;
[root@lvs1 ipvsadm-1.26]# make
make -C libipvs
make[1]: Entering directory `/tmp/ipvsadm-1.26/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c
在包含自 libipvs.h:13 的文件中,
从 libipvs.c:23:
ip_vs.h:15:29: 错误:netlink/netlink.h:没有那个文件或目录
ip_vs.h:16:31: 错误:netlink/genl/genl.h:没有那个文件或目录
ip_vs.h:17:31: 错误:netlink/genl/ctrl.h:没有那个文件或目录
In file included from libipvs.h:13,
from libipvs.c:23:
ip_vs.h:520: 错误:数组元素的类型不完全
ip_vs.h:521: 错误:数组元素的类型不完全
ip_vs.h:522: 错误:数组元素的类型不完全
ip_vs.h:523: 错误:数组元素的类型不完全
ip_vs.h:524: 错误:数组元素的类型不完全
ip_vs.h:525: 错误:数组元素的类型不完全
libipvs.c: 在函数‘ipvs_nl_message’中:
libipvs.c:57: 警告:隐式声明函数‘nlmsg_alloc’
libipvs.c:57: 警告:赋值时将整数赋给指针,未作类型转换
libipvs.c:61: 警告:隐式声明函数‘genlmsg_put’
libipvs.c:61: 错误:‘NL_AUTO_PID’未声明(在此函数内第一次使用)
libipvs.c:61: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
libipvs.c:61: 错误:所在的函数内也只报告一次。)
libipvs.c:61: 错误:‘NL_AUTO_SEQ’未声明(在此函数内第一次使用)
libipvs.c: 在函数‘ipvs_nl_noop_cb’中:
libipvs.c:69: 错误:‘NL_OK’未声明(在此函数内第一次使用)
libipvs.c: 在文件层:
libipvs.c:72: 错误:expected declaration specifiers or ‘...’ before ‘nl_recvmsg_msg_cb_t’
libipvs.c: 在函数‘ipvs_nl_send_message’中:
libipvs.c:76: 警告:隐式声明函数‘nl_handle_alloc’
libipvs.c:76: 警告:赋值时将整数赋给指针,未作类型转换
libipvs.c:78: 警告:隐式声明函数‘nlmsg_free’
libipvs.c:82: 警告:隐式声明函数‘genl_connect’
libipvs.c:85: 警告:隐式声明函数‘genl_ctrl_resolve’
libipvs.c:91: 警告:隐式声明函数‘nl_handle_destroy’
libipvs.c:96: 警告:隐式声明函数‘nl_socket_modify_cb’
libipvs.c:96: 错误:‘NL_CB_VALID’未声明(在此函数内第一次使用)
libipvs.c:96: 错误:‘NL_CB_CUSTOM’未声明(在此函数内第一次使用)
libipvs.c:96: 错误:‘func’未声明(在此函数内第一次使用)
libipvs.c:99: 警告:隐式声明函数‘nl_send_auto_complete’
libipvs.c:102: 警告:隐式声明函数‘nl_recvmsgs_default’
libipvs.c: 在函数‘ipvs_init’中:
libipvs.c:127: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_getinfo_parse_cb’中:
libipvs.c:149: 警告:隐式声明函数‘nlmsg_hdr’
libipvs.c:149: 警告:初始化时将整数赋给指针,未作类型转换
libipvs.c:152: 警告:隐式声明函数‘genlmsg_parse’
libipvs.c:159: 警告:隐式声明函数‘nla_get_u32’
libipvs.c:162: 错误:‘NL_OK’未声明(在此函数内第一次使用)
libipvs.c: 在函数‘ipvs_getinfo’中:
libipvs.c:176: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_flush’中:
libipvs.c:199: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_nl_fill_service_attr’中:
libipvs.c:215: 警告:隐式声明函数‘nla_nest_start’
libipvs.c:215: 警告:赋值时将整数赋给指针,未作类型转换
libipvs.c:219: 警告:隐式声明函数‘NLA_PUT_U16’
libipvs.c:222: 警告:隐式声明函数‘NLA_PUT_U32’
libipvs.c:225: 警告:隐式声明函数‘NLA_PUT’
libipvs.c:229: 警告:隐式声明函数‘NLA_PUT_STRING’
libipvs.c:236: 警告:隐式声明函数‘nla_nest_end’
libipvs.c:239: 警告:标号‘nla_put_failure’定义后未使用
libipvs.c: 在函数‘ipvs_add_service’中:
libipvs.c:255: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_update_service’中:
libipvs.c:276: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_del_service’中:
libipvs.c:296: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_zero_service’中:
libipvs.c:321: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_nl_fill_dest_attr’中:
libipvs.c:334: 警告:赋值时将整数赋给指针,未作类型转换
libipvs.c:348: 警告:标号‘nla_put_failure’定义后未使用
libipvs.c: 在函数‘ipvs_add_dest’中:
libipvs.c:366: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_update_dest’中:
libipvs.c:396: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_del_dest’中:
libipvs.c:425: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_set_timeout’中:
libipvs.c:452: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c:454: 警告:标号‘nla_put_failure’定义后未使用
libipvs.c: 在函数‘ipvs_start_daemon’中:
libipvs.c:473: 警告:赋值时将整数赋给指针,未作类型转换
libipvs.c:483: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_stop_daemon’中:
libipvs.c:504: 警告:赋值时将整数赋给指针,未作类型转换
libipvs.c:514: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在文件层:
libipvs.c:526: 警告:‘struct nlattr’在形参表内部声明
libipvs.c: 在函数‘ipvs_parse_stats’中:
libipvs.c:530: 警告:隐式声明函数‘nla_parse_nested’
libipvs.c:548: 警告:隐式声明函数‘nla_get_u64’
libipvs.c: 在函数‘ipvs_services_parse_cb’中:
libipvs.c:562: 警告:初始化时将整数赋给指针,未作类型转换
libipvs.c:592: 警告:隐式声明函数‘nla_get_u16’
libipvs.c:598: 警告:隐式声明函数‘nla_data’
libipvs.c:599: 警告:传递‘memcpy’的第 2 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:44: 附注:需要类型‘const void * __restrict__’,但实参的类型为‘int’
libipvs.c:604: 警告:隐式声明函数‘nla_get_string’
libipvs.c:605: 警告:传递‘strncpy’的第 2 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:131: 附注:需要类型‘const char * __restrict__’,但实参的类型为‘int’
libipvs.c:610: 警告:传递‘strncpy’的第 2 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:131: 附注:需要类型‘const char * __restrict__’,但实参的类型为‘int’
libipvs.c:614: 警告:隐式声明函数‘nla_memcpy’
libipvs.c:618: 警告:传递‘ipvs_parse_stats’的第 2 个参数时在不兼容的指针类型间转换
libipvs.c:526: 附注:需要类型‘struct nlattr *’,但实参的类型为‘struct nlattr *’
libipvs.c: 在函数‘ipvs_get_services’中:
libipvs.c:649: 错误:‘NLM_F_DUMP’未声明(在此函数内第一次使用)
libipvs.c:650: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_dests_parse_cb’中:
libipvs.c:728: 警告:初始化时将整数赋给指针,未作类型转换
libipvs.c:759: 警告:传递‘memcpy’的第 2 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:44: 附注:需要类型‘const void * __restrict__’,但实参的类型为‘int’
libipvs.c:771: 警告:传递‘ipvs_parse_stats’的第 2 个参数时在不兼容的指针类型间转换
libipvs.c:526: 附注:需要类型‘struct nlattr *’,但实参的类型为‘struct nlattr *’
libipvs.c: 在函数‘ipvs_get_dests’中:
libipvs.c:809: 错误:‘NLM_F_DUMP’未声明(在此函数内第一次使用)
libipvs.c:813: 警告:赋值时将整数赋给指针,未作类型转换
libipvs.c:829: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_get_service’中:
libipvs.c:939: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_timeout_parse_cb’中:
libipvs.c:972: 警告:初始化时将整数赋给指针,未作类型转换
libipvs.c:986: 错误:‘NL_OK’未声明(在此函数内第一次使用)
libipvs.c: 在函数‘ipvs_get_timeout’中:
libipvs.c:1005: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
libipvs.c: 在函数‘ipvs_daemon_parse_cb’中:
libipvs.c:1023: 警告:初始化时将整数赋给指针,未作类型转换
libipvs.c:1048: 警告:传递‘strncpy’的第 2 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:131: 附注:需要类型‘const char * __restrict__’,但实参的类型为‘int’
libipvs.c:1051: 错误:‘NL_OK’未声明(在此函数内第一次使用)
libipvs.c: 在函数‘ipvs_get_daemon’中:
libipvs.c:1071: 错误:‘NLM_F_DUMP’未声明(在此函数内第一次使用)
libipvs.c:1072: 错误:提供给函数‘ipvs_nl_send_message’的实参太多
make[1]: *** [libipvs.o] 错误 1
make[1]: Leaving directory `/tmp/ipvsadm-1.26/libipvs'
make: *** [libs] 错误 2
2.[root@lvs1 ipvsadm-1.26]# make
make -C libipvs
make[1]: Entering directory `/tmp/ipvsadm-1.26/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -DHAVE_NET_IP_VS_H -c -o ip_vs_nl_policy.o ip_vs_nl_policy.c
ar rv libipvs.a libipvs.o ip_vs_nl_policy.o
ar: creating libipvs.a
a - libipvs.o
a - ip_vs_nl_policy.o
gcc -shared -Wl,-soname,libipvs.so -o libipvs.so libipvs.o ip_vs_nl_policy.o
make[1]: Leaving directory `/tmp/ipvsadm-1.26/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -DVERSION=\"1.26\" -DSCHEDULERS=\""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq"\" -DPE_LIST=\""sip"\" -DHAVE_NET_IP_VS_H -c -o ipvsadm.o ipvsadm.c
ipvsadm.c: 在函数‘print_largenum’中:
ipvsadm.c:1383: 警告:域宽 的类型应该是‘int’,但实参 2 的类型为‘size_t’
gcc -Wall -Wunused -Wstrict-prototypes -g -DVERSION=\"1.26\" -DSCHEDULERS=\""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq"\" -DPE_LIST=\""sip"\" -DHAVE_NET_IP_VS_H -c -o config_stream.o config_stream.c
gcc -Wall -Wunused -Wstrict-prototypes -g -DVERSION=\"1.26\" -DSCHEDULERS=\""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq"\" -DPE_LIST=\""sip"\" -DHAVE_NET_IP_VS_H -c -o dynamic_array.o dynamic_array.c
gcc -Wall -Wunused -Wstrict-prototypes -g -o ipvsadm ipvsadm.o config_stream.o dynamic_array.o libipvs/libipvs.a -lnl
ipvsadm.o: In function `parse_options':
/tmp/ipvsadm-1.26/ipvsadm.c:432: undefined reference to `poptGetContext'
/tmp/ipvsadm-1.26/ipvsadm.c:435: undefined reference to `poptGetNextOpt'
/tmp/ipvsadm-1.26/ipvsadm.c:660: undefined reference to `poptBadOption'
/tmp/ipvsadm-1.26/ipvsadm.c:502: undefined reference to `poptGetNextOpt'
/tmp/ipvsadm-1.26/ipvsadm.c:667: undefined reference to `poptStrerror'
/tmp/ipvsadm-1.26/ipvsadm.c:667: undefined reference to `poptBadOption'
/tmp/ipvsadm-1.26/ipvsadm.c:670: undefined reference to `poptFreeContext'
/tmp/ipvsadm-1.26/ipvsadm.c:677: undefined reference to `poptGetArg'
/tmp/ipvsadm-1.26/ipvsadm.c:678: undefined reference to `poptGetArg'
/tmp/ipvsadm-1.26/ipvsadm.c:679: undefined reference to `poptGetArg'
/tmp/ipvsadm-1.26/ipvsadm.c:690: undefined reference to `poptGetArg'
/tmp/ipvsadm-1.26/ipvsadm.c:693: undefined reference to `poptFreeContext'
collect2: ld 返回 1
make: *** [ipvsadm] 错误 1