Backport the init script from RHEL6 (#593276).
This commit is contained in:
parent
506db94ef8
commit
0742eb65a7
23
ipvsadm-config
Normal file
23
ipvsadm-config
Normal file
@ -0,0 +1,23 @@
|
||||
# Unload modules on restart and stop
|
||||
# Value: yes|no, default: yes
|
||||
# This option has to be 'yes' to get to a sane state for a ipvs
|
||||
# restart or stop. Only set to 'no' if there are problems unloading ipvs
|
||||
# modules.
|
||||
IPVS_MODULES_UNLOAD="yes"
|
||||
|
||||
# Save current ipvs rules on stop.
|
||||
# Value: yes|no, default: no
|
||||
# Saves all ipvs rules to /etc/sysconfig/ipvsadm if ipvsadm gets stopped
|
||||
# (e.g. on system shutdown).
|
||||
IPVS_SAVE_ON_STOP="no"
|
||||
|
||||
# Save current ipvs rules on restart.
|
||||
# Value: yes|no, default: no
|
||||
# Saves all ipvs rules to /etc/sysconfig/ipvsadm if ipvsadm gets
|
||||
# restarted.
|
||||
IPVS_SAVE_ON_RESTART="no"
|
||||
|
||||
# Numeric status output
|
||||
# Value: yes|no, default: yes
|
||||
# Print IP addresses and port numbers in numeric format in the status output.
|
||||
IPVS_STATUS_NUMERIC="yes"
|
177
ipvsadm.init
177
ipvsadm.init
@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
#
|
||||
# Startup script handle the initialisation of LVS
|
||||
# chkconfig: - 08 92
|
||||
# chkconfig: - 28 72
|
||||
# description: Initialise the Linux Virtual Server
|
||||
# config: /etc/sysconfig/ipvsadm
|
||||
#
|
||||
@ -15,60 +15,175 @@
|
||||
# balancer running on Linux.
|
||||
### END INIT INFO
|
||||
|
||||
# set the configuration file
|
||||
IPVSADM_CONFIG="/etc/sysconfig/ipvsadm"
|
||||
|
||||
# Source function library
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
IPVSADM=ipvsadm
|
||||
IPVSADMRESTORE=${IPVSADM}-restore
|
||||
IPVSADMSAVE=${IPVSADM}-save
|
||||
# Saved IPVS data
|
||||
IPVSADM_DATA=/etc/sysconfig/$IPVSADM
|
||||
# Configuration
|
||||
IPVSADM_CONFIG=/etc/sysconfig/${IPVSADM}-config
|
||||
IPVS=ip_vs
|
||||
PROC_IPVS=/proc/net/$IPVS
|
||||
VAR_SUBSYS_IPVSADM=/var/lock/subsys/$IPVSADM
|
||||
|
||||
if [ ! -x /sbin/$IPVSADM ]; then
|
||||
echo -n $"${IPVSADM}: /sbin/$IPVSADM does not exist."; warning; echo
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# Old or new modutils
|
||||
/sbin/modprobe --version 2>&1 | grep -q module-init-tools \
|
||||
&& NEW_MODUTILS=1 \
|
||||
|| NEW_MODUTILS=0
|
||||
|
||||
# Default IPVSADM configuration:
|
||||
IPVS_MODULES_UNLOAD="yes"
|
||||
IPVS_SAVE_ON_STOP="no"
|
||||
IPVS_SAVE_ON_RESTART="no"
|
||||
IPVS_STATUS_NUMERIC="yes"
|
||||
|
||||
# Load IPVSADM configuration.
|
||||
[ -f "$IPVSADM_CONFIG" ] && . "$IPVSADM_CONFIG"
|
||||
|
||||
rmmod_r() {
|
||||
# Unload module with all referring modules.
|
||||
# At first all referring modules will be unloaded, then the module itself.
|
||||
local mod=$1
|
||||
local ret=0
|
||||
local ref=
|
||||
|
||||
# Get referring modules.
|
||||
# New modutils have another output format.
|
||||
[ $NEW_MODUTILS = 1 ] \
|
||||
&& ref=$(lsmod | awk "/^${mod}[[:space:]]/ { print \$4; }" | tr ',' ' ') \
|
||||
|| ref=$(lsmod | grep ^${mod} | cut -d "[" -s -f 2 | cut -d "]" -s -f 1)
|
||||
|
||||
# recursive call for all referring modules
|
||||
for i in $ref; do
|
||||
rmmod_r $i
|
||||
let ret+=$?;
|
||||
done
|
||||
|
||||
# Unload module.
|
||||
# The extra test is for 2.6: The module might have autocleaned,
|
||||
# after all referring modules are unloaded.
|
||||
if grep -q "^${mod}" /proc/modules ; then
|
||||
modprobe -r $mod > /dev/null 2>&1
|
||||
res=$?
|
||||
[ $res -eq 0 ] || echo -n " $mod"
|
||||
let ret+=$res;
|
||||
fi
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
start() {
|
||||
# Do not start if there is no config file.
|
||||
[ ! -f "$IPVSADM_DATA" ] && return 6
|
||||
|
||||
# If we don't clear these first, we might be adding to pre-existing rules.
|
||||
action "Clearing the current IPVS table:" ipvsadm -C
|
||||
echo -n "Applying IPVS configuration: "
|
||||
ipvsadm-restore < ${IPVSADM_CONFIG} && \
|
||||
success "Applying IPVS configuration" || \
|
||||
failure "Applying IPVS configuration"
|
||||
echo
|
||||
touch /var/lock/subsys/ipvsadm
|
||||
action $"${IPVSADM}: Clearing the current IPVS table:" $IPVSADM -C
|
||||
|
||||
echo -n $"${IPVSADM}: Applying IPVS configuration: "
|
||||
$IPVSADMRESTORE < ${IPVSADM_DATA}
|
||||
if [ $? -eq 0 ];then success; echo; else failure; echo; return 1;fi
|
||||
|
||||
touch $VAR_SUBSYS_IPVSADM
|
||||
}
|
||||
|
||||
stop() {
|
||||
action "Clearing the current IPVS table:" ipvsadm -C
|
||||
rm -f /var/lock/subsys/ipvsadm
|
||||
# Do not stop if ipvs module is not loaded.
|
||||
[ ! -e "$PROC_IPVS" ] && return 0
|
||||
|
||||
action $"${IPVSADM}: Clearing the current IPVS table:" $IPVSADM -C
|
||||
|
||||
ret=0
|
||||
|
||||
if [ "x$IPVS_MODULES_UNLOAD" = "xyes" ]; then
|
||||
action $"${IPVSADM}: Unloading modules:" rmmod_r $IPVS
|
||||
[ $? -ne 0 ] && ret=1
|
||||
fi
|
||||
|
||||
rm -f $VAR_SUBSYS_IPVSADM
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
status() {
|
||||
# Do not print status if lockfile is missing and ipvs modules are not
|
||||
# loaded.
|
||||
if [ ! -f "$VAR_SUBSYS_IPVSADM" -a ! -e "$PROC_IPVS" ]; then
|
||||
echo $"${IPVSADM}: IPVS is not running."
|
||||
return 3
|
||||
fi
|
||||
|
||||
# Do show status if ipvs module is not loaded.
|
||||
if [ ! -e "$PROC_IPVS" ];then
|
||||
echo $"${IPVSADM}: IPVS module is not loaded."
|
||||
return 3
|
||||
fi
|
||||
|
||||
NUM=""
|
||||
[ "x$IPVS_STATUS_NUMERIC" = "xyes" ] && NUM="-n"
|
||||
|
||||
$IPVSADM -L $NUM && echo
|
||||
}
|
||||
|
||||
save() {
|
||||
echo -n "Saving IPVS table to ${IPVSADM_CONFIG}: "
|
||||
ipvsadm-save -n > ${IPVSADM_CONFIG} 2>/dev/null && \
|
||||
success "Saving IPVS table to ${IPVSADM_CONFIG}" || \
|
||||
failure "Saving IPVS table to ${IPVSADM_CONFIG}"
|
||||
echo
|
||||
# Check if module is loaded
|
||||
[ ! -e "$PROC_IPVS" ] && return 0
|
||||
|
||||
echo -n $"${IPVSADM}: Saving IPVS table to ${IPVSADM_DATA}: "
|
||||
$IPVSADMSAVE -n > ${IPVSADM_DATA} 2>/dev/null
|
||||
if [ $? -eq 0 ];then success; echo; else failure; echo; return 1;fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
restart() {
|
||||
[ "x$IPVS_SAVE_ON_RESTART" = "xyes" ] && save
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start)
|
||||
[ -f "$VAR_SUBSYS_IPVSADM" ] && exit 0
|
||||
|
||||
# If we have no configuration, save the current one
|
||||
[ -f ${IPVSADM_CONFIG} ] || save
|
||||
[ -f ${IPVSADM_DATA} ] || save
|
||||
start
|
||||
RETVAL=$?
|
||||
;;
|
||||
stop)
|
||||
[ "x$IPVS_SAVE_ON_STOP" = "xyes" ] && save
|
||||
stop
|
||||
RETVAL=$?
|
||||
;;
|
||||
restart|force-reload)
|
||||
restart
|
||||
RETVAL=$?
|
||||
;;
|
||||
reload)
|
||||
# Start will flush everything, so it counts as a reload
|
||||
start
|
||||
RETVAL=$?
|
||||
;;
|
||||
reload|force-reload|restart)
|
||||
# Start will flush everything, so it counts as a restart
|
||||
start
|
||||
;;
|
||||
status)
|
||||
ipvsadm -L -n
|
||||
;;
|
||||
status
|
||||
RETVAL=$?
|
||||
;;
|
||||
save)
|
||||
save
|
||||
;;
|
||||
RETVAL=$?
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|force-reload|status|save}"
|
||||
exit 3
|
||||
echo "Usage: $0 {start|stop|restart|force-reload|reload|status|save}"
|
||||
RETVAL=2
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
exit $RETVAL
|
||||
|
12
ipvsadm.spec
12
ipvsadm.spec
@ -1,12 +1,13 @@
|
||||
Summary: Utility to administer the Linux Virtual Server
|
||||
Name: ipvsadm
|
||||
Version: 1.26
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
License: GPLv2+
|
||||
Group: Applications/System
|
||||
URL: http://www.linuxvirtualserver.org/software/ipvs.html
|
||||
Source0: http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-%{version}.tar.gz
|
||||
Source1: ipvsadm.init
|
||||
Source2: ipvsadm-config
|
||||
Patch0: ipvsadm-1.26-popt.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||
Buildrequires: libnl-devel
|
||||
@ -33,8 +34,10 @@ CFLAGS="%{optflags}" make
|
||||
rm -rf %{buildroot}
|
||||
mkdir -p %{buildroot}/etc/rc.d/init.d
|
||||
make install BUILD_ROOT=%{buildroot} MANDIR=%{_mandir}
|
||||
# Overwrite the provided init script with our own (mostly) LSB compliant one
|
||||
# Overwrite the provided init script with our flexible and LSB compliant one
|
||||
install -p -m 0755 %{SOURCE1} %{buildroot}/etc/rc.d/init.d/ipvsadm
|
||||
# Install config file which controls the service behavior
|
||||
install -D -p -m 0600 %{SOURCE2} %{buildroot}/etc/sysconfig/ipvsadm-config
|
||||
|
||||
|
||||
%clean
|
||||
@ -54,6 +57,7 @@ fi
|
||||
%defattr(-,root,root)
|
||||
%doc README
|
||||
/etc/rc.d/init.d/ipvsadm
|
||||
%config(noreplace) /etc/sysconfig/ipvsadm-config
|
||||
/sbin/ipvsadm
|
||||
/sbin/ipvsadm-restore
|
||||
/sbin/ipvsadm-save
|
||||
@ -63,6 +67,10 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon Jul 11 2011 Matthias Saou <http://freshrpms.net/> 1.26-2
|
||||
- Backport the init script from RHEL6, which contains lots of changes to make
|
||||
it behave simlarly to the iptables init script (#593276).
|
||||
|
||||
* Sat Jul 9 2011 Matthias Saou <http://freshrpms.net/> 1.26-1
|
||||
- Update to 1.26 (#676167).
|
||||
- Remove upstreamed Makefile and activeconns patchs, rebase popt patch.
|
||||
|
Loading…
Reference in New Issue
Block a user