Contents of /trunk/vzctl/patches/vzctl-3.0.18-magellan.patch
Parent Directory | Revision Log
Revision 273 -
(show annotations)
(download)
Sat Jul 21 22:50:20 2007 UTC (17 years, 2 months ago) by niro
File size: 22329 byte(s)
Sat Jul 21 22:50:20 2007 UTC (17 years, 2 months ago) by niro
File size: 22329 byte(s)
-magellan specific vzctl files
1 | 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 |