slitaz-vz annotate base-scripts/vz @ rev 6

Remove ashism ==
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Feb 26 08:27:32 2019 +0100 (2019-02-26)
parents
children
rev   line source
erjo@2 1 #!/bin/sh
erjo@2 2 # Copyright (C) 2000-2008, Parallels, Inc. All rights reserved.
erjo@2 3 #
erjo@2 4 # This program is free software; you can redistribute it and/or modify
erjo@2 5 # it under the terms of the GNU General Public License as published by
erjo@2 6 # the Free Software Foundation; either version 2 of the License, or
erjo@2 7 # (at your option) any later version.
erjo@2 8 #
erjo@2 9 # This program is distributed in the hope that it will be useful,
erjo@2 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
erjo@2 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
erjo@2 12 # GNU General Public License for more details.
erjo@2 13 #
erjo@2 14 # You should have received a copy of the GNU General Public License
erjo@2 15 # along with this program; if not, write to the Free Software
erjo@2 16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
erjo@2 17 #
erjo@2 18 #
erjo@2 19 # OpenVZ startup script, used for redhat and debian related distributions.
erjo@2 20
erjo@2 21 ###
erjo@2 22 # description: OpenVZ startup script.
erjo@2 23 ###
erjo@2 24
erjo@2 25 VZCONF=/etc/vz/vz.conf
erjo@2 26
erjo@2 27 [ -f ${VZCONF} ] || exit 0
erjo@2 28 . ${VZCONF}
erjo@2 29 [ "${VIRTUOZZO}" = "no" ] && exit 0
erjo@2 30
erjo@2 31 VZCTL=/usr/sbin/vzctl
erjo@2 32 [ -x ${VZCTL} ] || exit 0
erjo@2 33
erjo@2 34 VZQUOTA=/usr/sbin/vzquota
erjo@2 35 CONFIG_DIR=/etc/vz/conf
erjo@2 36 LOCKFILE=/var/lock/subsys/vz_lock
erjo@2 37 SUBSYS_VZ=/var/lock/subsys/vz
erjo@2 38 VESTAT=/proc/vz/vestat
erjo@2 39 VZDEV=venet0
erjo@2 40 PRELOAD_MODULES=
erjo@2 41 MODULES=
erjo@2 42 MODULES_OTHER=
erjo@2 43 NET_MODULES=
erjo@2 44 IPT_MODULES=
erjo@2 45
erjo@2 46 if [ "${MODULES_DISABLED}" != "yes" ]; then
erjo@2 47 PRELOAD_MODULES="af_packet"
erjo@2 48 MODULES="vzmon vzdquota vzdev"
erjo@2 49 CPT_MODULES="vzcpt vzrst"
erjo@2 50 MODULES_OTHER="vzcompat ${CPT_MODULES}"
erjo@2 51 VNET_MODULES="vznetdev vznet"
erjo@2 52 VETH_MODULES="vzethdev"
erjo@2 53 NET_MODULES="${VNET_MODULES} ${VETH_MODULES}"
erjo@2 54 if [ "${VZWDOG}" = "yes" ]; then
erjo@2 55 MODULES="${MODULES} vzwdog"
erjo@2 56 fi
erjo@2 57 IPT_MODULES="ip_tables ${IPTABLES} xt_tcpudp"
erjo@2 58 if [ "${IPV6}" = "yes" ]; then
erjo@2 59 IPT_MODULES="${IPT_MODULES} ${IP6TABLES}"
erjo@2 60 fi
erjo@2 61 VZFS_MODULES="simfs"
erjo@2 62 fi
erjo@2 63
erjo@2 64
erjo@2 65 rc_done='..done'
erjo@2 66 rc_failed='..failed'
erjo@2 67
erjo@2 68 # Source function library.
erjo@2 69 if [ -r /etc/init.d/functions ]; then
erjo@2 70 source /etc/init.d/functions
erjo@2 71 if [ -r /etc/redhat-release ] || [ -r /etc/centos-release ]; then
erjo@2 72 DISTR=redhat
erjo@2 73 fi
erjo@2 74 elif [ -r /etc/rc.status ]; then
erjo@2 75 source /etc/rc.status
erjo@2 76 if [ -r /etc/SuSE-release ]; then
erjo@2 77 DISTR=suse
erjo@2 78 fi
erjo@2 79 elif [ -r /etc/debian_version ]; then
erjo@2 80 DISTR=debian
erjo@2 81 LOCKFILE=/var/lock/vz_lock
erjo@2 82 SUBSYS_VZ=/var/lock/vz
erjo@2 83 elif [ -r /etc/slitaz-release ]; then
erjo@2 84 DISTR=slitaz
erjo@2 85 LOCKFILE=/var/lock/vz_lock
erjo@2 86 SUBSYS_VZ=/var/lock/vz
erjo@2 87 fi
erjo@2 88
erjo@2 89 VEINFO=""
erjo@2 90 RETVAL=0
erjo@2 91 # Number of the containers to stop in parallel.
erjo@2 92 # In case of empty value the number of CTs is calculated as 'num_cpu * 4'
erjo@2 93 PARALLEL=
erjo@2 94 cd /
erjo@2 95
erjo@2 96 # We used to install OpenVZ cron job when the vzctl package was
erjo@2 97 # installed, irrespective of whether OpenVZ was actually being
erjo@2 98 # run. Although the cron jobs didn't create any problems if someone
erjo@2 99 # wasn't running OpenVZ some users complained about the cron log file
erjo@2 100 # filling up, resource usage, and power consumption since systems
erjo@2 101 # wouldn't really idle. It really only makes sense to run the OpenVZ
erjo@2 102 # cron job if the vz service is turned on and not just merely
erjo@2 103 # having the package installed. This init.d script is an obvious place
erjo@2 104 # to install or remove the cron jobs based on the service
erjo@2 105 # being enabled or not.
erjo@2 106 SRC_CRONSCRIPT_DIR=/etc/vz/cron
erjo@2 107 DST_CRONSCRIPT_DIR=/etc/cron.d
erjo@2 108
erjo@2 109 check_old_cron_files()
erjo@2 110 {
erjo@2 111 # avoid double OpenVZ cron settings
erjo@2 112 local f
erjo@2 113 for f in vpsreboot vpsnetclean; do
erjo@2 114 [ -f $DST_CRONSCRIPT_DIR/$f ] && rm -f $DST_CRONSCRIPT_DIR/$f
erjo@2 115 done
erjo@2 116 }
erjo@2 117
erjo@2 118 setup_cron()
erjo@2 119 {
erjo@2 120 check_old_cron_files
erjo@2 121 [ -z "$SRC_CRONSCRIPT_DIR" ] && return
erjo@2 122 [ -d "$SRC_CRONSCRIPT_DIR" ] || return
erjo@2 123 cat $SRC_CRONSCRIPT_DIR/vz* > $DST_CRONSCRIPT_DIR/vz &&
erjo@2 124 chmod 644 $DST_CRONSCRIPT_DIR/vz
erjo@2 125 }
erjo@2 126
erjo@2 127 remove_cron()
erjo@2 128 {
erjo@2 129 check_old_cron_files
erjo@2 130 [ -z "$SRC_CRONSCRIPT_DIR" ] && return
erjo@2 131 [ -d "$SRC_CRONSCRIPT_DIR" ] || return
erjo@2 132 cat > $DST_CRONSCRIPT_DIR/vz <<EOF
erjo@2 133 # DO NOT EDIT THIS FILE!
erjo@2 134 #
erjo@2 135 # Contents of this file managed by /etc/init.d/vz script
erjo@2 136 # Master copy is in $SRC_CRONSCRIPT_DIR/vz* file(s).
erjo@2 137 # Consult $SRC_CRONSCRIPT_DIR/vz* for documentation.
erjo@2 138 EOF
erjo@2 139 }
erjo@2 140
erjo@2 141 # Actualize OpenVZ cron entry:
erjo@2 142 # if OpenVZ is running, add it, otherwise remove.
erjo@2 143 update_cron()
erjo@2 144 {
erjo@2 145 if is_running; then
erjo@2 146 __echo "Adding OpenVZ cron entries"
erjo@2 147 setup_cron
erjo@2 148 else
erjo@2 149 __echo "Removing OpenVZ cron entries"
erjo@2 150 remove_cron
erjo@2 151 fi
erjo@2 152 print_result
erjo@2 153 }
erjo@2 154
erjo@2 155 check_kernel()
erjo@2 156 {
erjo@2 157 if ! test -d /proc/vz ; then
erjo@2 158 print_failure "Running kernel is not OpenVZ kernel."
erjo@2 159 exit 1
erjo@2 160 fi
erjo@2 161 }
erjo@2 162
erjo@2 163 get_kernel_version()
erjo@2 164 {
erjo@2 165 [ ! -z "$KERNEL_MAJOR" ] && return
erjo@2 166
erjo@2 167 local ver=$(uname -r)
erjo@2 168 local kernel=$(echo $ver | sed s/[-+].*//)
erjo@2 169 KERNEL_MAJOR=$(echo $kernel | awk -F . '{print $1}')
erjo@2 170 KERNEL_MINOR=$(echo $kernel | awk -F . '{print $2}')
erjo@2 171 KERNEL_PATCHLEVEL=$(echo $kernel | awk -F . '{print $3}')
erjo@2 172 }
erjo@2 173
erjo@2 174 check_kernel_config()
erjo@2 175 {
erjo@2 176 test -r /proc/config.gz || return 0
erjo@2 177
erjo@2 178 local conf opt err=0
erjo@2 179 local opt_must="SIM_FS VE VE_CALLS VZ_GENCALLS"
erjo@2 180 get_kernel_version
erjo@2 181 # For kernels >= 2.6.9 VZ_DEV must be set.
erjo@2 182 test "${KERNEL_MINOR}" -ge 6 &&
erjo@2 183 test "${KERNEL_PATCHLEVEL}" -gt 9 &&
erjo@2 184 opt_must="${opt_must} VZ_DEV"
erjo@2 185 # local opt_rec="SCHED_VCPU FAIRSCHED VZ_QUOTA VZ_QUOTA_UGID VE_NETDEV VE_ETHDEV
erjo@2 186 # VE_IPTABLES VZ_CHECKPOINT VZ_WDOG"
erjo@2 187
erjo@2 188 conf="`zcat /proc/config.gz 2>/dev/null | grep -E -v '^#|^$'`"
erjo@2 189
erjo@2 190 for opt in $opt_must; do
erjo@2 191 if ! echo "$conf" 2>/dev/null | grep -q "$opt="; then
erjo@2 192 echo "ERROR: Missing kernel config option: CONFIG_$opt"
erjo@2 193 err=1
erjo@2 194 fi
erjo@2 195 done
erjo@2 196 if [ $err != 0 ]; then
erjo@2 197 print_failure "Please recompile your kernel."
erjo@2 198 exit 1
erjo@2 199 fi
erjo@2 200 }
erjo@2 201
erjo@2 202 get_parallel()
erjo@2 203 {
erjo@2 204 [ -n "${PARALLEL}" ] && return
erjo@2 205 PARALLEL=`awk '
erjo@2 206 BEGIN { num=0; }
erjo@2 207 $1 == "processor" { num++; }
erjo@2 208 END { print num * 4; }' /proc/cpuinfo`
erjo@2 209 }
erjo@2 210
erjo@2 211 get_veinfo()
erjo@2 212 {
erjo@2 213 if [ -f /proc/vz/veinfo ]; then
erjo@2 214 VEINFO=/proc/vz/veinfo
erjo@2 215 elif [ -f /proc/veinfo ]; then
erjo@2 216 VEINFO=/proc/veinfo
erjo@2 217 elif [ ! -f $VESTAT ]; then
erjo@2 218 return 1
erjo@2 219 fi
erjo@2 220 return 0
erjo@2 221 }
erjo@2 222
erjo@2 223 print_success()
erjo@2 224 {
erjo@2 225 if [ "$DISTR" = "redhat" ]; then
erjo@2 226 echo_success
erjo@2 227 else
erjo@2 228 echo -n "$rc_done"
erjo@2 229 fi
erjo@2 230 echo
erjo@2 231 }
erjo@2 232
erjo@2 233 print_failure()
erjo@2 234 {
erjo@2 235 echo -n "$1"
erjo@2 236 if [ "$DISTR" = "redhat" ]; then
erjo@2 237 failure $"$1"
erjo@2 238 else
erjo@2 239 echo -n "$rc_failed"
erjo@2 240 fi
erjo@2 241 echo
erjo@2 242 }
erjo@2 243
erjo@2 244 # Calls either print_success or print_failure, depending on $?
erjo@2 245 # Optional argument $1 -- an error string passed to print_failure.
erjo@2 246 print_result()
erjo@2 247 {
erjo@2 248 if [ $? -eq 0 ] ; then
erjo@2 249 print_success
erjo@2 250 else
erjo@2 251 print_failure "$1"
erjo@2 252 fi
erjo@2 253 }
erjo@2 254
erjo@2 255 __echo()
erjo@2 256 {
erjo@2 257 if [ "$DISTR" = "redhat" ]; then
erjo@2 258 echo -n $"$1"
erjo@2 259 else
erjo@2 260 echo -n "$1"
erjo@2 261 fi
erjo@2 262 }
erjo@2 263
erjo@2 264 is_running()
erjo@2 265 {
erjo@2 266 get_veinfo || return 1
erjo@2 267 [ -f $SUBSYS_VZ ] || return 1
erjo@2 268 }
erjo@2 269
erjo@2 270 status()
erjo@2 271 {
erjo@2 272 check_kernel
erjo@2 273
erjo@2 274 if is_running; then
erjo@2 275 echo "OpenVZ is running..."
erjo@2 276 return 0
erjo@2 277 else
erjo@2 278 echo "OpenVZ is stopped."
erjo@2 279 return 3
erjo@2 280 fi
erjo@2 281 }
erjo@2 282
erjo@2 283 start_net()
erjo@2 284 {
erjo@2 285 local mod
erjo@2 286
erjo@2 287 # load all kernel modules needed for containers networking
erjo@2 288 for mod in ${NET_MODULES}; do
erjo@2 289 modprobe ${mod} 2>/dev/null
erjo@2 290 done
erjo@2 291
erjo@2 292 if ip addr list | grep -q "venet0:.*UP" 2>/dev/null; then
erjo@2 293 return 0
erjo@2 294 fi
erjo@2 295
erjo@2 296 get_veinfo
erjo@2 297 if [ -z "$VEINFO" ]; then
erjo@2 298 return 0
erjo@2 299 fi
erjo@2 300 __echo "Bringing up interface $VZDEV: "
erjo@2 301 ip link set $VZDEV up
erjo@2 302 print_result
erjo@2 303 ip addr add 0.0.0.0/0 dev $VZDEV
erjo@2 304 __echo "Configuring interface $VZDEV: "
erjo@2 305 sysctl -w net.ipv4.conf.$VZDEV.send_redirects=0
erjo@2 306 print_result
erjo@2 307 if [ "${IPV6}" = "yes" ]; then
erjo@2 308 __echo "Configuring ipv6 $VZDEV: "
erjo@2 309 # Fix me: ip addres should be generated
erjo@2 310 ip -6 addr add fe80::1/128 dev $VZDEV
erjo@2 311 print_result
erjo@2 312 fi
erjo@2 313 }
erjo@2 314
erjo@2 315 stop_net()
erjo@2 316 {
erjo@2 317 local mod
erjo@2 318
erjo@2 319 if ip addr list | grep -q "venet0:.*UP" 2>/dev/null; then
erjo@2 320 __echo "Bringing down interface $VZDEV: "
erjo@2 321 ip link set $VZDEV down
erjo@2 322 print_result
erjo@2 323 fi
erjo@2 324 for mod in ${NET_MODULES}; do
erjo@2 325 /sbin/modprobe -r ${mod} > /dev/null 2>&1
erjo@2 326 done
erjo@2 327 }
erjo@2 328
erjo@2 329 setup_ve0()
erjo@2 330 {
erjo@2 331 if test -z "${VE0CPUUNITS}"; then
erjo@2 332 echo "Warning: VE0CPUUNITS is not set in ${VZCONF}; using value of 1000"
erjo@2 333 VE0CPUUNITS=1000
erjo@2 334 fi
erjo@2 335 msg=`${VZCTL} set 0 --cpuunits ${VE0CPUUNITS} 2>&1`
erjo@2 336 if [ $? -ne 0 ]; then
erjo@2 337 print_failure "vzctl set 0 --cpuunits ${VE0CPUUNITS} failed: $msg"
erjo@2 338 fi
erjo@2 339
erjo@2 340 if ! test -f "${CONFIG_DIR}/0.conf"; then
erjo@2 341 return
erjo@2 342 fi
erjo@2 343 if ! grep -q '^ONBOOT=yes\|^ONBOOT=\"yes\"' ${CONFIG_DIR}/0.conf;
erjo@2 344 then
erjo@2 345 return
erjo@2 346 fi
erjo@2 347 __echo "Configure node UB resources: "
erjo@2 348 msg=`$VZCTL set 0 --reset_ub 2>&1`
erjo@2 349 print_result "$msg"
erjo@2 350 }
erjo@2 351
erjo@2 352 start_ves()
erjo@2 353 {
erjo@2 354 local veid
erjo@2 355 local velist
erjo@2 356 local msg
erjo@2 357 local need_restart
erjo@2 358
erjo@2 359 need_restart=""
erjo@2 360 cd ${CONFIG_DIR} || return
erjo@2 361 velist=`grep -l '^ONBOOT=yes\|^ONBOOT=\"yes\"' [0-9]*.conf 2>/dev/null |
erjo@2 362 sed -e 's/.conf//g' | sort -n`
erjo@2 363 cd - >/dev/null
erjo@2 364 sysctl -w net.ipv4.route.src_check=0
erjo@2 365 for veid in $velist; do
erjo@2 366 [ "${veid}" = "0" ] && continue
erjo@2 367 __echo "Starting CT ${veid}: "
erjo@2 368 if [ "x${VZFASTBOOT}" = "xyes" -a "x${DISK_QUOTA}" = "xyes" ];
erjo@2 369 then
erjo@2 370 $VZQUOTA stat ${veid} >/dev/null 2>&1
erjo@2 371 if [ $? -eq 6 ]; then
erjo@2 372 if $VZQUOTA show ${veid} 2>&1 | grep "vzquota : (warning) Quota is running" >/dev/null 2>&1; then
erjo@2 373 $VZQUOTA on ${veid} --nocheck >/dev/null 2>&1
erjo@2 374 need_restart="${need_restart} ${veid}"
erjo@2 375 fi
erjo@2 376 fi
erjo@2 377 fi
erjo@2 378 msg=`$VZCTL start ${veid} 2>&1`
erjo@2 379 print_result "$msg"
erjo@2 380 done
erjo@2 381 for veid in ${need_restart}; do
erjo@2 382 __echo "Stopping CT ${veid}: "
erjo@2 383 $VZCTL stop ${veid} 2>&1 >/dev/null 2>&1
erjo@2 384 print_result "$msg"
erjo@2 385 __echo "Starting CT ${veid}: "
erjo@2 386 msg=`$VZCTL start ${veid} 2>&1`
erjo@2 387 print_result "$msg"
erjo@2 388 done
erjo@2 389 }
erjo@2 390
erjo@2 391 stop_ves()
erjo@2 392 {
erjo@2 393 local veid
erjo@2 394 local velist
erjo@2 395 local msg
erjo@2 396 local m
erjo@2 397 local mounts
erjo@2 398 local fail
erjo@2 399 local iter
erjo@2 400 local quota
erjo@2 401 local pids
erjo@2 402
erjo@2 403 if get_veinfo; then
erjo@2 404 get_parallel
erjo@2 405 for i in 0 1 2; do
erjo@2 406 iter=0;
erjo@2 407 pids=
erjo@2 408 velist=`awk '$1 != "VEID" && $1 != "Version:" {print $1}' ${VESTAT}`
erjo@2 409 for veid in $velist; do
erjo@2 410 echo "Shutting down CT $veid"
erjo@2 411 # Set fairsched parameters to maximum so
erjo@2 412 # CT will stop fast
erjo@2 413 $VZCTL set $veid --cpuunits 2000 --cpulimit 0 >/dev/null 2>&1
erjo@2 414 $VZCTL --skiplock stop $veid >/dev/null 2>&1 &
erjo@2 415 pids="$pids $!"
erjo@2 416 iter=$(($iter+1))
erjo@2 417 if [ ${iter} -gt ${PARALLEL} ]; then
erjo@2 418 for pid in ${pids}; do
erjo@2 419 wait ${pid}
erjo@2 420 done
erjo@2 421 pids=
erjo@2 422 iter=0
erjo@2 423 fi
erjo@2 424 done
erjo@2 425 for pid in $pids; do
erjo@2 426 wait $pid
erjo@2 427 done
erjo@2 428 done
erjo@2 429 fi
erjo@2 430 iter=0
erjo@2 431 fail=1
erjo@2 432 while test $iter -lt 5 -a $fail -ne 0; do
erjo@2 433 fail=0
erjo@2 434 mounts=`awk '{if ($3=="simfs") print $2}' /proc/mounts`
erjo@2 435 for m in $mounts; do
erjo@2 436 __echo "Unmounting CT area "
erjo@2 437 echo -n $m
erjo@2 438 msg=`umount $m 2>&1`
erjo@2 439 if [ $? -eq 0 ]; then
erjo@2 440 print_success
erjo@2 441 else
erjo@2 442 print_failure "$msg"
erjo@2 443 fail=$((fail+1))
erjo@2 444 fuser -k -m ${m} > /dev/null 2>&1
erjo@2 445 fi
erjo@2 446 done
erjo@2 447 iter=$(($iter+1))
erjo@2 448 done
erjo@2 449 # turn quota off
erjo@2 450 quota=`awk -F: '/^[0-9]+:/{print $1}' /proc/vz/vzquota 2>/dev/null`
erjo@2 451 for m in ${quota}; do
erjo@2 452 __echo "Turn quota off for CT "
erjo@2 453 echo -n $m
erjo@2 454 msg=`vzquota off ${m} 2>&1`
erjo@2 455 print_result "$msg"
erjo@2 456 done
erjo@2 457 }
erjo@2 458
erjo@2 459 lockfile()
erjo@2 460 {
erjo@2 461 local TEMPFILE="${1}.$$"
erjo@2 462 local LOCKFILE="${1}"
erjo@2 463
erjo@2 464 trap -- "rm -f ${LOCKFILE} ${TEMPFILE}" EXIT
erjo@2 465
erjo@2 466 echo $$ > ${TEMPFILE} 2> /dev/null || {
erjo@2 467 echo "Can't write to ${TEMPFILE}"
erjo@2 468 }
erjo@2 469 ln ${TEMPFILE} ${LOCKFILE} >/dev/null 2>&1 && {
erjo@2 470 rm -f ${TEMPFILE};
erjo@2 471 return 0;
erjo@2 472 }
erjo@2 473 kill -0 `cat $LOCKFILE` >/dev/null 2>&1 && {
erjo@2 474 return 1;
erjo@2 475 }
erjo@2 476 ln ${TEMPFILE} ${LOCKFILE} >/dev/null 2>&1 && {
erjo@2 477 rm -f ${TEMPFILE};
erjo@2 478 return 0;
erjo@2 479 }
erjo@2 480 rm -f ${LOCKFILE}
erjo@2 481 echo $$ > ${LOCKFILE}
erjo@2 482 return 0
erjo@2 483 }
erjo@2 484
erjo@2 485 start()
erjo@2 486 {
erjo@2 487 local veid
erjo@2 488 local velist
erjo@2 489 local msg
erjo@2 490 local mod
erjo@2 491
erjo@2 492 check_kernel
erjo@2 493 check_kernel_config
erjo@2 494
erjo@2 495 if ! lockfile $LOCKFILE; then
erjo@2 496 __echo "OpenVZ is locked"
erjo@2 497 print_failure
erjo@2 498 return 1
erjo@2 499 fi
erjo@2 500 if [ -f ${SUBSYS_VZ} ]; then
erjo@2 501 __echo "OpenVZ already running"
erjo@2 502 print_failure
erjo@2 503 return 1
erjo@2 504 fi
erjo@2 505 __echo "Starting OpenVZ: "
erjo@2 506 load_modules "${IPT_MODULES}"
erjo@2 507 for mod in $PRELOAD_MODULES; do
erjo@2 508 /sbin/modprobe -r $mod >/dev/null 2>&1
erjo@2 509 /sbin/modprobe $mod >/dev/null 2>&1
erjo@2 510 done
erjo@2 511 for mod in $MODULES; do
erjo@2 512 /sbin/modprobe $mod >/dev/null 2>&1
erjo@2 513 RETVAL=$?
erjo@2 514 if [ $RETVAL -ne 0 ]; then
erjo@2 515 print_failure "failed to load module ${mod}"
erjo@2 516 return $RETVAL
erjo@2 517 fi
erjo@2 518 done
erjo@2 519 load_modules "${MODULES_OTHER} ${VZFS_MODULES}"
erjo@2 520 print_success "loading OpenVZ modules"
erjo@2 521
erjo@2 522 if [ ! -e /dev/vzctl ]; then
erjo@2 523 # On most modern distros udev will create a device for you,
erjo@2 524 # while on the old distros /dev/vzctl comes with vzctl rpm.
erjo@2 525 # So the below mknod call is probably not needed at all.
erjo@2 526 /bin/mknod -m 600 /dev/vzctl c 126 0 > /dev/null 2>&1
erjo@2 527 RETVAL=$?
erjo@2 528 if [ $RETVAL -ne 0 ]; then
erjo@2 529 print_failure "creating /dev/vzctl"
erjo@2 530 return $RETVAL
erjo@2 531 fi
erjo@2 532 fi
erjo@2 533
erjo@2 534 start_net
erjo@2 535 setup_ve0
erjo@2 536 setup_cron
erjo@2 537 start_ves
erjo@2 538
erjo@2 539 rm -f $LOCKFILE
erjo@2 540 touch $SUBSYS_VZ
erjo@2 541 }
erjo@2 542
erjo@2 543 stop()
erjo@2 544 {
erjo@2 545 local mod
erjo@2 546
erjo@2 547 if ! lockfile $LOCKFILE; then
erjo@2 548 __echo "OpenVZ is locked"
erjo@2 549 print_failure
erjo@2 550 RETVAL=1
erjo@2 551 return 1
erjo@2 552 fi
erjo@2 553
erjo@2 554 stop_ves
erjo@2 555 remove_cron
erjo@2 556 stop_net
erjo@2 557 __echo "Stopping OpenVZ: "
erjo@2 558 for mod in ${MODULES_OTHER} ${MODULES} ${PRELOAD_MODULES} ${IPT_MODULES} ${VZFS_MODULES}; do
erjo@2 559 /sbin/modprobe -r ${mod} > /dev/null 2>&1
erjo@2 560 done
erjo@2 561 rm -f $LOCKFILE
erjo@2 562 rm -f $SUBSYS_VZ
erjo@2 563 print_success
erjo@2 564 }
erjo@2 565
erjo@2 566 load_modules()
erjo@2 567 {
erjo@2 568 local modules=$1
erjo@2 569 local mod
erjo@2 570
erjo@2 571 for mod in ${modules}; do
erjo@2 572 if /sbin/lsmod | grep -qw ${mod}; then
erjo@2 573 continue
erjo@2 574 fi
erjo@2 575 /sbin/modprobe ${mod} >/dev/null 2>&1
erjo@2 576 done
erjo@2 577 }
erjo@2 578
erjo@2 579 # See how we were called.
erjo@2 580 case "$1" in
erjo@2 581 start)
erjo@2 582 start
erjo@2 583 ;;
erjo@2 584 stop)
erjo@2 585 stop
erjo@2 586 ;;
erjo@2 587 restart|force-reload)
erjo@2 588 stop
erjo@2 589 start
erjo@2 590 ;;
erjo@2 591 status)
erjo@2 592 status
erjo@2 593 RETVAL=$?
erjo@2 594 ;;
erjo@2 595 update-cron)
erjo@2 596 update_cron
erjo@2 597 RETVAL=0
erjo@2 598 ;;
erjo@2 599 *)
erjo@2 600 echo "Usage: $0 {start|stop|status|restart|force-reload|update-cron}"
erjo@2 601 exit 1
erjo@2 602 esac
erjo@2 603
erjo@2 604 exit $RETVAL