ipvsadm源码编译安装

文章详细描述了在Linux环境中通过源码安装ipvsadm的步骤,包括安装必要的依赖包如libnl和libpopt,下载源码,编译和安装过程。在安装过程中遇到的netlink/netlink.h和popt.h文件未找到的错误,通过执行sudoyuminstalllibnl*和sudoyuminstally_popt-static进行修复。
摘要由CSDN通过智能技术生成

源码安装步骤

  1. 安装依赖包

sudo yum install -y gcc-c++
sudo yum install libnl* libpopt*
sudo yum install -y popt-static
  1. 下载源码包

wget https://mirrors.edge.kernel.org/pub/linux/utils/kernel/ipvsadm/ipvsadm-1.31.tar.gz
  1. 编译安装

tar xzvf ipvsadm-1.31.tar.gz
cd ipvsadm-1.31
make
sudo make install
  1. 验证是否可用

[ec2-user@etcd1 ipvsadm-1.31]$ sudo ipvsadm -h
ipvsadm v1.31 2019/12/24 (compiled with popt and IPVS v1.2.1)
Usage:
  ipvsadm -A|E virtual-service [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
  ipvsadm -D virtual-service
  ipvsadm -C
  ipvsadm -R
  ipvsadm -S [-n]
  ipvsadm -a|e virtual-service -r server-address [options]
  ipvsadm -d virtual-service -r server-address
  ipvsadm -L|l [virtual-service] [options]
  ipvsadm -Z [virtual-service]
  ipvsadm --set tcp tcpfin udp
  ipvsadm --start-daemon {master|backup} [daemon-options]
  ipvsadm --stop-daemon {master|backup}
  ipvsadm -h

Commands:
Either long or short options are allowed.
  --add-service     -A        add virtual service with options
  --edit-service    -E        edit virtual service with options
  --delete-service  -D        delete virtual service
  --clear           -C        clear the whole table
  --restore         -R        restore rules from stdin
  --save            -S        save rules to stdout
  --add-server      -a        add real server with options
  --edit-server     -e        edit real server with options
  --delete-server   -d        delete real server
  --list            -L|-l     list the table
  --zero            -Z        zero counters in a service or all services
  --set tcp tcpfin udp        set connection timeout values
  --start-daemon              start connection sync daemon
  --stop-daemon               stop connection sync daemon
  --help            -h        display this help message

virtual-service:
  --tcp-service|-t  service-address   service-address is host[:port]
  --udp-service|-u  service-address   service-address is host[:port]
  --sctp-service    service-address   service-address is host[:port]
  --fwmark-service|-f fwmark          fwmark is an integer greater than zero

Options:
  --ipv6         -6                   fwmark entry uses IPv6
  --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq|fo|ovf|mh,
                                      the default scheduler is wlc.
  --pe            engine              alternate persistence engine may be sip,
                                      not set by default.
  --persistent   -p [timeout]         persistent service
  --netmask      -M netmask           persistent granularity mask
  --real-server  -r server-address    server-address is host (and port)
  --gatewaying   -g                   gatewaying (direct routing) (default)
  --ipip         -i                   ipip encapsulation (tunneling)
  --masquerading -m                   masquerading (NAT)
  --tun-type      type                one of ipip|gue|gre,
                                      the default tunnel type is ipip.
  --tun-port      port                tunnel destination port
  --tun-nocsum                        tunnel encapsulation without checksum
  --tun-csum                          tunnel encapsulation with checksum
  --tun-remcsum                       tunnel encapsulation with remote checksum
  --weight       -w weight            capacity of real server
  --u-threshold  -x uthreshold        upper threshold of connections
  --l-threshold  -y lthreshold        lower threshold of connections
  --connection   -c                   output of current IPVS connections
  --timeout                           output of timeout (tcp tcpfin udp)
  --daemon                            output of daemon information
  --stats                             output of statistics information
  --rate                              output of rate information
  --exact                             expand numbers (display exact values)
  --thresholds                        output of thresholds information
  --persistent-conn                   output of persistent connection info
  --tun-info                          output of tunnel information
  --nosort                            disable sorting output of service/server entries
  --sort                              does nothing, for backwards compatibility
  --ops          -o                   one-packet scheduling
  --numeric      -n                   numeric output of addresses and ports
  --sched-flags  -b flags             scheduler flags (comma-separated)
Daemon Options:
  --syncid sid                        syncid for connection sync (default=255)
  --sync-maxlen length                Max sync message length (default=1472)
  --mcast-interface interface         multicast interface for connection sync
  --mcast-group address               IPv4/IPv6 group (default=224.0.0.81)
  --mcast-port port                   UDP port (default=8848)
  --mcast-ttl ttl                     Multicast TTL (default=1)
[ec2-user@etcd1 ipvsadm-1.31]$

异常处理

  1. fatal error: netlink/netlink.h: No such file or directory错误,具体错误日志信息

[ec2-user@etcd1 ipvsadm-1.31]$ make
make -C libipvs
make[1]: Entering directory '/home/ec2-user/ipvsadm-1.31/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL   -DHAVE_NET_IP_VS_H  -c -o libipvs.o libipvs.c
In file included from libipvs.h:13,
                 from libipvs.c:23:
ip_vs.h:15:10: fatal error: netlink/netlink.h: No such file or directory
   15 | #include <netlink/netlink.h>
      |          ^~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:39: libipvs.o] Error 1
make[1]: Leaving directory '/home/ec2-user/ipvsadm-1.31/libipvs'
make: *** [Makefile:87: libs] Error 2
[ec2-user@etcd1 ipvsadm-1.31]$ 

解决方法:需要安装sudo yum install libnl* libpopt*后修复

  1. fatal error: popt.h: No such file or directory错误,具体错误信息

[ec2-user@etcd1 ipvsadm-1.31]$ make
make -C libipvs
make[1]: Entering directory '/home/ec2-user/ipvsadm-1.31/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -I/usr/include/libnl3   -DHAVE_NET_IP_VS_H  -c -o libipvs.o libipvs.c
gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL -I/usr/include/libnl3   -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 '/home/ec2-user/ipvsadm-1.31/libipvs'
gcc -Wall -Wunused -Wstrict-prototypes -g  -DVERSION=\"1.31\" -DSCHEDULERS=\""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq|fo|ovf|mh"\" -DPE_LIST=\""sip"\"  -DHAVE_NET_IP_VS_H -c -o ipvsadm.o ipvsadm.c
ipvsadm.c:114:10: fatal error: popt.h: No such file or directory
  114 | #include "popt.h"
      |          ^~~~~~~~
compilation terminated.
make: *** [Makefile:142: ipvsadm.o] Error 1
[ec2-user@etcd1 ipvsadm-1.31]$ 

解决方法:执行sudo yum install -y popt-static修复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值