Magellan Linux

Annotation of /trunk/vzctl/patches/vzctl-3.0.18-magellan.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 273 - (hide annotations) (download)
Sat Jul 21 22:50:20 2007 UTC (16 years, 10 months ago) by niro
File size: 22329 byte(s)
-magellan specific vzctl files

1 niro 273 diff -Naur vzctl-3.0.18/etc/dists/magellan.conf vzctl-3.0.18-magellan/etc/dists/magellan.conf
2     --- vzctl-3.0.18/etc/dists/magellan.conf 1970-01-01 01:00:00.000000000 +0100
3     +++ vzctl-3.0.18-magellan/etc/dists/magellan.conf 2007-07-22 00:44:53.000000000 +0200
4     @@ -0,0 +1,27 @@
5     +# Copyright (C) 2000-2007 SWsoft. All rights reserved.
6     +#
7     +# This program is free software; you can redistribute it and/or modify
8     +# it under the terms of the GNU General Public License as published by
9     +# the Free Software Foundation; either version 2 of the License, or
10     +# (at your option) any later version.
11     +#
12     +# This program is distributed in the hope that it will be useful,
13     +# but WITHOUT ANY WARRANTY; without even the implied warranty of
14     +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     +# GNU General Public License for more details.
16     +#
17     +# You should have received a copy of the GNU General Public License
18     +# along with this program; if not, write to the Free Software
19     +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20     +#
21     +# This configuration file is meant to be used with
22     +# the Magellan distribution kit.
23     +#
24     +
25     +ADD_IP=magellan-add_ip.sh
26     +DEL_IP=magellan-del_ip.sh
27     +SET_HOSTNAME=magellan-set_hostname.sh
28     +SET_DNS=set_dns.sh
29     +SET_USERPASS=set_userpass.sh
30     +SET_UGID_QUOTA=magellan-set_ugid_quota.sh
31     +POST_CREATE=postcreate.sh
32     diff -Naur vzctl-3.0.18/etc/dists/scripts/magellan-add_ip.sh vzctl-3.0.18-magellan/etc/dists/scripts/magellan-add_ip.sh
33     --- vzctl-3.0.18/etc/dists/scripts/magellan-add_ip.sh 1970-01-01 01:00:00.000000000 +0100
34     +++ vzctl-3.0.18-magellan/etc/dists/scripts/magellan-add_ip.sh 2007-07-22 00:45:06.000000000 +0200
35     @@ -0,0 +1,122 @@
36     +#!/bin/bash
37     +# Copyright (C) 2000-2007 SWsoft. All rights reserved.
38     +#
39     +# This program is free software; you can redistribute it and/or modify
40     +# it under the terms of the GNU General Public License as published by
41     +# the Free Software Foundation; either version 2 of the License, or
42     +# (at your option) any later version.
43     +#
44     +# This program is distributed in the hope that it will be useful,
45     +# but WITHOUT ANY WARRANTY; without even the implied warranty of
46     +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47     +# GNU General Public License for more details.
48     +#
49     +# You should have received a copy of the GNU General Public License
50     +# along with this program; if not, write to the Free Software
51     +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
52     +#
53     +#
54     +# This script configure IP alias(es) inside Magellan like VE.
55     +#
56     +# Parameters are passed in environment variables.
57     +# Required parameters:
58     +# IP_ADDR - IP address(es) to add
59     +# (several addresses should be divided by space)
60     +# Optional parameters:
61     +# VE_STATE - state of VE; could be one of:
62     +# starting | stopping | running | stopped
63     +# IPDELALL - delete all old interfaces
64     +#
65     +
66     +VENET_DEV=venet0
67     +IFCFG_DIR=/etc/conf.d
68     +IFCFG=${IFCFG_DIR}/net.${VENET_DEV}
69     +ROUTESCFG=${IFCFG_DIR}/net.routes
70     +SCRIPT=/etc/runlevels/default/net.${VENET_DEV}
71     +HOSTFILE=/etc/hosts
72     +
73     +function setup_network()
74     +{
75     + cat > ${IFCFG} << EOF
76     +ONBOOT=yes
77     +NETWORKING=static
78     +IP=127.0.0.1
79     +NETMASK=255.255.255.255
80     +BROADCAST=0.0.0.0
81     +EOF
82     +
83     + # setup routes
84     + echo "-net ${FAKEGATEWAY} netmask 255.255.255.255 dev ${VENET_DEV}" > ${ROUTESCFG}
85     + echo "default gw ${FAKEGATEWAY}" >> ${ROUTESCFG}
86     +
87     + # Set up /etc/hosts
88     + if [ ! -f ${HOSTFILE} ]; then
89     + echo "127.0.0.1 localhost.localdomain localhost" > $HOSTFILE
90     + fi
91     +}
92     +
93     +function get_all_aliasid()
94     +{
95     + IFNUM=-1
96     + IFNUMLIST=$(for i in $(find ${IFCFG_DIR} -name net.${VENET_DEV}:*); do echo $i | sed "s/.*${VENET_DEV}://"; done)
97     +}
98     +
99     +function get_free_aliasid()
100     +{
101     + local found=
102     +
103     + [ -z "${IFNUMLIST}" ] && get_all_aliasid
104     + while test -z ${found}; do
105     + let IFNUM=IFNUM+1
106     + echo "${IFNUMLIST}" | grep -q -E "${IFNUM}" 2>/dev/null || found=1
107     + done
108     +}
109     +
110     +function create_config()
111     +{
112     + local ip=$1
113     + local ifnum=$2
114     +
115     + echo -e "# auto-generated configuration for ${VENET_DEV}:${ifnum}
116     +ONBOOT=yes
117     +NETWORKING=static
118     +IP=${ip}
119     +NETMASK=255.255.255.255
120     +BROADCAST=0.0.0.0
121     +" > ${IFCFG}:${ifnum}
122     +}
123     +
124     +
125     +function add_ip()
126     +{
127     + local ip
128     + local new_ips
129     +
130     + # In case we are starting VE
131     + if [ "x${VE_STATE}" = "xstarting" ]; then
132     + setup_network
133     + fi
134     +
135     + if [ "x${IPDELALL}" = "xyes" ]; then
136     + rm -f ${IFCFG}
137     + rm -f ${IFCFG}:[0-9]*
138     + fi
139     +
140     + for ip in ${IP_ADDR}; do
141     + found=
142     + if grep -e "\\<${ip}\\>" >/dev/null 2>&1 ${IFCFG}:*; then
143     + continue
144     + fi
145     + get_free_aliasid
146     + create_config ${ip} ${IFNUM}
147     + done
148     +
149     + if [ "x${VE_STATE}" = "xrunning" ]; then
150     + # synchronyze config files & interfaces
151     + /etc/init.d/network restart 2>/dev/null 1>/dev/null
152     + fi
153     +}
154     +
155     +add_ip
156     +exit 0
157     +# end of script
158     diff -Naur vzctl-3.0.18/etc/dists/scripts/magellan-del_ip.sh vzctl-3.0.18-magellan/etc/dists/scripts/magellan-del_ip.sh
159     --- vzctl-3.0.18/etc/dists/scripts/magellan-del_ip.sh 1970-01-01 01:00:00.000000000 +0100
160     +++ vzctl-3.0.18-magellan/etc/dists/scripts/magellan-del_ip.sh 2007-07-22 00:45:09.000000000 +0200
161     @@ -0,0 +1,53 @@
162     +#!/bin/bash
163     +# Copyright (C) 2000-2007 SWsoft. All rights reserved.
164     +#
165     +# This program is free software; you can redistribute it and/or modify
166     +# it under the terms of the GNU General Public License as published by
167     +# the Free Software Foundation; either version 2 of the License, or
168     +# (at your option) any later version.
169     +#
170     +# This program is distributed in the hope that it will be useful,
171     +# but WITHOUT ANY WARRANTY; without even the implied warranty of
172     +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
173     +# GNU General Public License for more details.
174     +#
175     +# You should have received a copy of the GNU General Public License
176     +# along with this program; if not, write to the Free Software
177     +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
178     +#
179     +#
180     +# This script deletes IP alias(es) inside VE for Magellan like distros.
181     +# For usage info see ve-alias_del(5) man page.
182     +#
183     +# Parameters are passed in environment variables.
184     +# Required parameters:
185     +# IP_ADDR - IPs to delete, several addresses should be divided by space
186     +# Optional parameters:
187     +# VE_STATE - state of VE; could be one of:
188     +# starting | stopping | running | stopped
189     +
190     +VENET_DEV=venet0
191     +IFCFG_DIR=/etc/conf.d
192     +IFCFG=${IFCFG_DIR}/net.${VENET_DEV}
193     +
194     +function del_ip()
195     +{
196     + local found=
197     + local ip ifname
198     +
199     + for ip in ${IP_ADDR}; do
200     + ifname=$(grep -l -e "\\<${ip}\\>" ${IFCFG}:* | sed "s:${IFCFG_DIR}:net.::")
201     + if [ -n "${ifname}" ]; then
202     + ifconfig ${ifname} down
203     + rm -f ${IFCFG_DIR}/net.${ifname}
204     + found=true
205     + fi
206     + done
207     + if [ -n "${found}" ]; then
208     + /etc/init.d/network restart 2>/dev/null 1>/dev/null
209     + fi
210     +}
211     +
212     +del_ip
213     +exit 0
214     +# end of script
215     diff -Naur vzctl-3.0.18/etc/dists/scripts/magellan-set_hostname.sh vzctl-3.0.18-magellan/etc/dists/scripts/magellan-set_hostname.sh
216     --- vzctl-3.0.18/etc/dists/scripts/magellan-set_hostname.sh 1970-01-01 01:00:00.000000000 +0100
217     +++ vzctl-3.0.18-magellan/etc/dists/scripts/magellan-set_hostname.sh 2007-07-22 00:45:13.000000000 +0200
218     @@ -0,0 +1,60 @@
219     +#!/bin/bash
220     +# Copyright (C) 2000-2007 SWsoft. All rights reserved.
221     +#
222     +# This program is free software; you can redistribute it and/or modify
223     +# it under the terms of the GNU General Public License as published by
224     +# the Free Software Foundation; either version 2 of the License, or
225     +# (at your option) any later version.
226     +#
227     +# This program is distributed in the hope that it will be useful,
228     +# but WITHOUT ANY WARRANTY; without even the implied warranty of
229     +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
230     +# GNU General Public License for more details.
231     +#
232     +# You should have received a copy of the GNU General Public License
233     +# along with this program; if not, write to the Free Software
234     +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
235     +#
236     +#
237     +# This script sets hostname inside VE for Magellan like distros
238     +# For usage info see vz-veconfig(5) man page.
239     +#
240     +# Some parameters are passed in environment variables.
241     +# Required parameters:
242     +# Optional parameters:
243     +# HOSTNM
244     +# Sets host name for this VE. Modifies /etc/hosts and
245     +# /etc/sysconfig/network (in RedHat) or /etc/rc.config (in SuSE)
246     +
247     +function set_host()
248     +{
249     + local cfgfile="$1"
250     + local var=$2
251     + local val=$3
252     + local host=
253     +
254     + [ -z "${val}" ] && return 0
255     + if grep -q -E "[[:space:]]${val}" ${cfgfile} 2>/dev/null; then
256     + return;
257     + fi
258     + if echo "${val}" | grep "\." >/dev/null 2>&1; then
259     + host=${val%%.*}
260     + fi
261     + host=" ${val} ${host}"
262     + put_param2 "${cfgfile}" "${var}" "${host} localhost localhost.localdomain"
263     +}
264     +
265     +function set_hostname()
266     +{
267     + local cfgfile=$1
268     + local hostname=$2
269     +
270     + [ -z "${hostname}" ] && return 0
271     + echo "${hostname}" > ${cfgfile}
272     + hostname ${hostname}
273     +}
274     +
275     +set_host /etc/hosts "127.0.0.1" "${HOSTNM}"
276     +set_hostname /etc/hostname "${HOSTNM}"
277     +
278     +exit 0
279     diff -Naur vzctl-3.0.18/etc/dists/scripts/magellan-set_ugid_quota.sh vzctl-3.0.18-magellan/etc/dists/scripts/magellan-set_ugid_quota.sh
280     --- vzctl-3.0.18/etc/dists/scripts/magellan-set_ugid_quota.sh 1970-01-01 01:00:00.000000000 +0100
281     +++ vzctl-3.0.18-magellan/etc/dists/scripts/magellan-set_ugid_quota.sh 2007-07-22 00:45:17.000000000 +0200
282     @@ -0,0 +1,72 @@
283     +#!/bin/bash
284     +# Copyright (C) 2000-2007 SWsoft. All rights reserved.
285     +#
286     +# This program is free software; you can redistribute it and/or modify
287     +# it under the terms of the GNU General Public License as published by
288     +# the Free Software Foundation; either version 2 of the License, or
289     +# (at your option) any later version.
290     +#
291     +# This program is distributed in the hope that it will be useful,
292     +# but WITHOUT ANY WARRANTY; without even the implied warranty of
293     +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
294     +# GNU General Public License for more details.
295     +#
296     +# You should have received a copy of the GNU General Public License
297     +# along with this program; if not, write to the Free Software
298     +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
299     +#
300     +#
301     +# This script configures quota startup script inside VE for Magellan like distros
302     +#
303     +# Parameters are passed in environment variables.
304     +# Required parameters:
305     +# MINOR - root device minor number
306     +# MAJOR - root device major number
307     +SCRIPTANAME='/etc/rc.d/init.d/vzquota'
308     +RCDIRS="/etc/rc.d"
309     +
310     +if [ -z "$MAJOR" ]; then
311     + rm -f ${SCRIPTANAME} > /dev/null 2>&1
312     + rm -f /etc/mtab > /dev/null 2>&1
313     + ln -sf /proc/mounts /etc/mtab
314     + exit 0
315     +fi
316     +echo -e '#!/bin/sh
317     +start() {
318     + [ -e "/dev/'${DEVFS}'" ] || mknod /dev/'${DEVFS}' b '$MAJOR' '$MINOR'
319     + rm -f /etc/mtab >/dev/null 2>&1
320     + echo "/dev/'${DEVFS}' / reiserfs rw,usrquota,grpquota 0 0" > /etc/mtab
321     + mnt=`grep -v " / " /proc/mounts`
322     + if [ $? == 0 ]; then
323     + echo "$mnt" >> /etc/mtab
324     + fi
325     + quotaon -aug
326     +}
327     +case "$1" in
328     + start)
329     + start
330     + ;;
331     + *)
332     + exit
333     +esac ' > ${SCRIPTANAME} || {
334     + echo "Unable to create ${SCRIPTNAME}"
335     + exit 1
336     +}
337     +chmod 755 ${SCRIPTANAME}
338     +
339     +RC=
340     +for RC in ${RCDIRS}; do
341     + [ -d ${RC}/rc3.d ] && break
342     +done
343     +
344     +if [ -z "${RC}" ]; then
345     + echo "Unable to find runlevel directories"
346     + exit 1
347     +fi
348     +
349     +for dir in `ls -d ${RC}/rc[0-6].d`; do
350     + ln -sf ${SCRIPTANAME} ${dir}/S10vzquota
351     +done
352     +
353     +exit 0
354     +
355     diff -Naur vzctl-3.0.18/etc/init.d/Makefile.am vzctl-3.0.18-magellan/etc/init.d/Makefile.am
356     --- vzctl-3.0.18/etc/init.d/Makefile.am 2007-07-06 09:46:25.000000000 +0200
357     +++ vzctl-3.0.18-magellan/etc/init.d/Makefile.am 2007-07-21 17:29:07.000000000 +0200
358     @@ -15,7 +15,7 @@
359     # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
360     #
361    
362     -INITSCRIPTS = vz-redhat vz-gentoo
363     +INITSCRIPTS = vz-redhat vz-gentoo vz-magellan
364    
365     EXTRA_DIST = $(INITSCRIPTS:%=%.in)
366    
367     @@ -34,3 +34,7 @@
368     install-gentoo: vz-gentoo
369     $(mkinstalldirs) $(DESTDIR)$(initddir)
370     $(INSTALL_SCRIPT) vz-gentoo $(DESTDIR)$(initddir)/vz
371     +
372     +install-gentoo: vz-magellan
373     + $(mkinstalldirs) $(DESTDIR)$(initddir)
374     + $(INSTALL_SCRIPT) vz-magellan $(DESTDIR)$(initddir)/vz
375     diff -Naur vzctl-3.0.18/etc/init.d/Makefile.in vzctl-3.0.18-magellan/etc/init.d/Makefile.in
376     --- vzctl-3.0.18/etc/init.d/Makefile.in 2007-07-06 09:46:34.000000000 +0200
377     +++ vzctl-3.0.18-magellan/etc/init.d/Makefile.in 2007-07-21 17:28:37.000000000 +0200
378     @@ -204,7 +204,7 @@
379     target_cpu = @target_cpu@
380     target_os = @target_os@
381     target_vendor = @target_vendor@
382     -INITSCRIPTS = vz-redhat vz-gentoo
383     +INITSCRIPTS = vz-redhat vz-gentoo vz-magellan
384     EXTRA_DIST = $(INITSCRIPTS:%=%.in)
385     CLEANFILES = $(INITSCRIPTS)
386     @ENABLE_BASHCOMP_TRUE@bashcdir = $(sysconfdir)/bash_completion.d
387     @@ -407,6 +407,11 @@
388     install-gentoo: vz-gentoo
389     $(mkinstalldirs) $(DESTDIR)$(initddir)
390     $(INSTALL_SCRIPT) vz-gentoo $(DESTDIR)$(initddir)/vz
391     +
392     +install-magellan: vz-magellan
393     + $(mkinstalldirs) $(DESTDIR)$(initddir)
394     + $(INSTALL_SCRIPT) vz-magellan $(DESTDIR)$(initddir)/vz
395     +
396     # Tell versions [3.59,3.63) of GNU make to not export all variables.
397     # Otherwise a system limit (for SysV at least) may be exceeded.
398     .NOEXPORT:
399     diff -Naur vzctl-3.0.18/etc/init.d/vz-magellan.in vzctl-3.0.18-magellan/etc/init.d/vz-magellan.in
400     --- vzctl-3.0.18/etc/init.d/vz-magellan.in 1970-01-01 01:00:00.000000000 +0100
401     +++ vzctl-3.0.18-magellan/etc/init.d/vz-magellan.in 2007-07-22 00:44:28.000000000 +0200
402     @@ -0,0 +1,405 @@
403     +#!/bin/bash
404     +# $Header: /root/magellan-cvs/src/vzctl/patches/vzctl-3.0.18-magellan.patch,v 1.1 2007-07-21 22:50:20 niro Exp $
405     +
406     +#%rlevels: 3:s 4:s 5:s 0:k 1:k 2:k 6:k
407     +#%start: 96
408     +#%stop: 88
409     +
410     +#deps
411     +#%needs:
412     +#%before:
413     +#%after:
414     +
415     +source /etc/sysconfig/rc
416     +source $rc_functions
417     +
418     +check_config()
419     +{
420     + source /etc/vz/vz.conf
421     +
422     + # if we don't want openvz running, say so
423     + [ "${VIRTUOZZO}" = "yes" ] || return 1
424     +
425     + # set default values
426     + : ${VZCTL:=@SBINDIR@/vzctl}
427     + : ${VZQUOTA:=@SBINDIR@/vzquota}
428     + : ${VZVEINFO:=/proc/vz/veinfo}
429     + : ${VESTAT:=/proc/vz/vestat}
430     + : ${VPSCONFDIR:=@VPSCONFDIR@}
431     + : ${VZDEV:=venet0}
432     + : ${SRC_CRONSCRIPT_DIR:=@CRONDDIR@}
433     + : ${DST_CRONSCRIPT_DIR:=@DST_CRONDDIR@}
434     +
435     + if [ "${MODULES_DISABLED}" != "yes" ]
436     + then
437     + : ${PRELOAD_MODULES:="af_packet"}
438     + : ${MODULES:="vzmon vzdquota vzdev"}
439     + : ${MIGRATE_MODULES:="vzcpt vzrst"}
440     + : ${NET_MODULES="vznetdev vznet"}
441     +
442     + # check if you should load vzwdog module
443     + [ "${VZWDOG}" = "yes" ] && MODULES="${MODULES} vzwdog"
444     + fi
445     +
446     + # we need a working vzctl
447     + if [ ! -x "${VZCTL}" ]
448     + then
449     + ${FAILURE} "vzctl missing (${VZCTL})"
450     + return 1
451     + fi
452     +
453     + if [ -z "${VE0CPUUNITS}" ]
454     + then
455     + ${WARNING} "VE0CPUUNITS is not set in /etc/conf.d/vz; using default value of 1000"
456     + VE0CPUUNITS=1000
457     + fi
458     + return 0
459     +}
460     +
461     +# We used to install OpenVZ cron job when the vzctl package was
462     +# installed, irrespective of whether OpenVZ was actually being
463     +# run. Although the cron jobs didn't create any problems if someone
464     +# wasn't running OpenVZ some users complained about the cron log file
465     +# filling up, resource usage, and power consumption since systems
466     +# wouldn't really idle. It really only makes sense to run the OpenVZ
467     +# cron job if the vz service is turned on and not just merely
468     +# having the package installed. This init.d script is an obvious place
469     +# to install or remove the cron jobs based on the service
470     +# being enabled or not.
471     +setup_cron()
472     +{
473     + [ -z "${SRC_CRONSCRIPT_DIR}" ] && return
474     + [ -d "${SRC_CRONSCRIPT_DIR}" ] || return
475     + install -m644 -o root -g root ${SRC_CRONSCRIPT_DIR}/vz ${DST_CRONSCRIPT_DIR}
476     +}
477     +
478     +remove_cron()
479     +{
480     + [ -z "${SRC_CRONSCRIPT_DIR}" ] && return
481     + [ -d "${SRC_CRONSCRIPT_DIR}" ] || return
482     + cat > ${DST_CRONSCRIPT_DIR}/vz <<EOF
483     +# DO NOT EDIT THIS FILE!
484     +#
485     +# Contents of this file managed by /etc/init.d/vz script
486     +# Master copy is ${SRC_CRONSCRIPT_DIR}/vz.
487     +# Consult that file for documentation.
488     +EOF
489     +}
490     +
491     +setup_ve0()
492     +{
493     + local msg retval ve0conf="${VPSCONFDIR}/0.conf"
494     +
495     + msg=$(${VZCTL} set 0 --cpuunits ${VE0CPUUNITS} 2>&1)
496     + [ $? -ne 0 ] && ${WARNING} "vzctl set 0 --cpuunits ${VE0CPUUNITS} failed: ${msg}"
497     +
498     + test -f ${ve0conf} || return
499     + egrep -q '^ONBOOT=yes\|^ONBOOT=\"yes\"' ${ve0conf} || return
500     +
501     + echo -en ${COLOREDSTAR}"Configuring hardware node UB resources: "
502     + msg=$(${VZCTL} set 0 --reset_ub 2>&1)
503     + retval=$?
504     + echo "${msg}"
505     + evaluate_retval ${retval}
506     +}
507     +
508     +start_net()
509     +{
510     + local mod
511     +
512     + # we don't operate on a running interface
513     + if /sbin/ip addr list | grep -q "venet0:.*UP" 2>/dev/null
514     + then
515     + return 0
516     + fi
517     +
518     + # load necessary modules
519     + for mod in ${NET_MODULES}
520     + do
521     + /sbin/modprobe ${mod} 2>/dev/null
522     + done
523     +
524     + if [ ! -f ${VZVEINFO} ]
525     + then
526     + return 0
527     + fi
528     +
529     + # configure the device
530     + echo -e ${COLOREDSTAR}"Bringing up interface ${VZDEV}"
531     + /sbin/ip link set ${VZDEV} up
532     + evaluate_retval
533     +
534     + /sbin/ip addr add 0.0.0.0/0 dev ${VZDEV}
535     +
536     + echo -e ${COLOREDSTAR}"Configuring interface ${VZDEV}"
537     + /sbin/sysctl -q -w net.ipv4.conf.${VZDEV}.send_redirects=0
538     + evaluate_retval
539     +}
540     +
541     +stop_net()
542     +{
543     + local mod
544     +
545     + if /sbin/ip addr list | grep -q "venet0:.*UP" 2>/dev/null
546     + then
547     + echo -e ${COLOREDSTAR}"Bringing down interface ${VZDEV}"
548     + /sbin/ip link set ${VZDEV} down 2>/dev/null
549     + evaluate_retval
550     + fi
551     +
552     + # remove all modules we probably loaded on start_net
553     + for mod in ${NET_MODULES}
554     + do
555     + /sbin/modprobe -r ${mod} > /dev/null 2>&1
556     + done
557     +}
558     +
559     +start_ve()
560     +{
561     + local veid velist msg need_restart="" retval
562     +
563     + # get all VEs we should start on boot
564     + if ! cd ${VPSCONFDIR}
565     + then
566     + ${FAILURE} "Unable to cd to ${VPSCONFDIR}"
567     + return 1
568     + fi
569     + velist=$(grep -l '^ONBOOT=yes\|^ONBOOT=\"yes\"' [0-9]*.conf 2>/dev/null | sed -e 's/.conf//g' | sort -n)
570     + cd - >/dev/null
571     +
572     + /sbin/sysctl -q -w net.ipv4.route.src_check=0
573     +
574     + for veid in ${velist}
575     + do
576     + echo -en ${COLOREDSTAR}"Starting VE ${veid}"
577     + if [ "${VZFASTBOOT}" = "yes" -a "${DISK_QUOTA}" = "yes" ]
578     + then
579     + ${VZQUOTA} stat ${veid} >/dev/null 2>&1
580     + if [ $? -eq 6 ]
581     + then
582     + if ${VZQUOTA} show ${veid} 2>&1 | grep "vzquota : (warning) Quota is running" >/dev/null 2>&1
583     + then
584     + ${VZQUOTA} on ${veid} --nocheck >/dev/null 2>&1
585     + need_restart="${need_restart} ${veid}"
586     + fi
587     + fi
588     + fi
589     + msg=$(${VZCTL} start ${veid} 2>&1)
590     + retval=$?
591     + echo "${mesg}"
592     + evaluate_retval ${retval}
593     + done
594     +
595     + for veid in ${need_restart}
596     + do
597     + echo -en ${COLOREDSTAR}"Stopping VE ${veid}"
598     + msg=$(${VZCTL} stop ${veid})
599     + retval=$?
600     + echo "${mesg}"
601     + evaluate_retval ${retval}
602     +
603     + echo -e ${COLOREDSTAR}"Starting VE ${veid}"
604     + msg=$($VZCTL start ${veid} 2>&1)
605     + retval=$?
606     + echo "${mesg}"
607     + evaluate_retval ${retval}
608     + done
609     +
610     + # we're ok even if some VEs failed to start
611     + return 0
612     +}
613     +
614     +get_parallel()
615     +{
616     + [ -n "${PARALLEL}" ] && return
617     + PARALLEL=`awk '
618     +BEGIN { num=0; }
619     +$1 == "processor" { num++; }
620     +END { print num * 4; }' /proc/cpuinfo`
621     +}
622     +
623     +stop_ve()
624     +{
625     + local veid velist msg m mounts fail i iter pid pids quota retval
626     +
627     + if [ -f ${VESTAT} ]
628     + then
629     + get_parallel
630     + for ((i = 0; i <= 2; i++))
631     + do
632     + iter=0
633     + pids=
634     + velist=$(awk '$1 != "VEID" && $1 != "Version:" {print $1}' ${VESTAT})
635     + for veid in ${velist}
636     + do
637     + echo -e ${COLOREDSTAR}"Shutting down VE $veid"
638     + # Set fairsched parameters to maximum so
639     + # VE will stop fast
640     + ${VZCTL} set ${veid} --cpuunits 2000 --cpulimit 0 >/dev/null 2>&1
641     + ${VZCTL} --skiplock stop ${veid} >/dev/null 2>&1 &
642     + pids="${pids} $!"
643     + let iter++
644     + if [ ${iter} -gt ${PARALLEL} ]
645     + then
646     + for pid in ${pids}
647     + do
648     + wait ${pid}
649     + done
650     + pids=
651     + iter=0
652     + fi
653     + done
654     +
655     + for pid in ${pids}
656     + do
657     + wait ${pid}
658     + done
659     + done
660     + fi
661     +
662     + iter=0
663     + fail=1
664     +
665     + while [ ${iter} -lt 5 -a ${fail} -ne 0 ]
666     + do
667     + fail=0
668     + mounts=$(awk '{if ($3=="simfs") print $2}' /proc/mounts)
669     +
670     + for m in ${mounts}
671     + do
672     + echo -en ${COLOREDSTAR}"Unmounting VE area ${m}"
673     + msg=$(umount ${m} 2>&1)
674     + retval=$?
675     + echo "${mesg}"
676     + evaluate_retval ${retval}
677     + if [ $? -ne 0 ]
678     + then
679     + let fail++
680     + fuser -k -m ${m} > /dev/null 2>&1
681     + fi
682     + done
683     +
684     + let iter++
685     + done
686     +
687     + # turn quota off
688     + quota=$(awk -F: '/^[0-9]+:/{print $1}' /proc/vz/vzquota 2>/dev/null)
689     +
690     + for m in ${quota}
691     + do
692     + echo -e ${COLOREDSTAR}"Turning quota off for VE ${m}"
693     + msg=$(vzquota off ${m} 2>&1)
694     + retval=$?
695     + echo "${mesg}"
696     + evaluate_retval ${retval}
697     + done
698     +}
699     +
700     +status_ve()
701     +{
702     + local velist veid
703     +
704     + check_config
705     +
706     + if [ -f ${VESTAT} ]
707     + then
708     + velist=$(awk '$1 != "VEID" && $1 != "Version:" {print $1}' ${VESTAT})
709     + for veid in ${velist}
710     + do
711     + ${VZCTL} status ${veid}
712     + done
713     + fi
714     +}
715     +
716     +case "$1" in
717     + start)
718     + check_config || exit
719     +
720     + echo -e ${COLOREDSTAR}"Loading OpenVZ modules"
721     + for mod in ${PRELOAD_MODULES}
722     + do
723     + /sbin/modprobe -r ${mod} >/dev/null 2>&1
724     + /sbin/modprobe ${mod} >/dev/null 2>&1
725     + done
726     +
727     + for mod in ${MODULES}
728     + do
729     + /sbin/modprobe ${mod} >/dev/null 2>&1
730     + retval=$?
731     + if [ ${retval} -ne 0 ]
732     + then
733     + ${FAILURE} "failed to load module ${mod}"
734     + exit ${retval}
735     + fi
736     + done
737     +
738     + for mod in ${MIGRATE_MODULES}
739     + do
740     + /sbin/modprobe ${mod} >/dev/null 2>&1
741     + done
742     + evaluate_retval
743     +
744     + if [ ! -e /dev/vzctl ]
745     + then
746     + ${FAILURE} "Missing device node /dev/vzctl"
747     + echo
748     + echo "Please create the vzctl device node using the following command:"
749     + echo " /bin/mknod /dev/vzctl c 126 0"
750     + echo
751     + exit 1
752     + fi
753     +
754     + start_net
755     + setup_ve0
756     + setup_cron
757     + start_ve
758     +
759     + update_svcstatus $1
760     + splash svc_started "$(basename $0)" 0
761     + ;;
762     +
763     + stop)
764     + check_config || exit
765     +
766     + stop_ve
767     + remove_cron
768     + stop_net
769     +
770     + echo -e ${COLOREDSTAR}"Unloading OpenVZ modules"
771     + for mod in ${MIGRATE_MODULES}
772     + do
773     + /sbin/modprobe -r ${mod} > /dev/null 2>&1
774     + done
775     +
776     + for mod in ${MODULES}
777     + do
778     + /sbin/modprobe -r ${mod} > /dev/null 2>&1
779     + done
780     +
781     + for mod in ${PRELOAD_MODULES}
782     + do
783     + /sbin/modprobe -r ${mod} > /dev/null 2>&1
784     + done
785     + # Even if some modules failed to unload (say they were not loaded)
786     + # we return success for the service to be marked as stopped.
787     + print_status success
788     +
789     + update_svcstatus $1
790     + splash svc_stopped "$(basename $0)" 0
791     + ;;
792     +
793     + restart)
794     + $0 stop
795     + sleep 1
796     + $0 start
797     + ;;
798     +
799     + status)
800     + status_ve
801     + ;;
802     +
803     + *)
804     + echo "Usage: $0 {start|stop|restart|status}"
805     + exit 1
806     + ;;
807     +esac