2
# Copyright 1999-2005 Gentoo Foundation
3
# Distributed under the terms of the GNU General Public License v2
4
# $Header: /var/www/viewcvs.gentoo.org/raw_cvs/gentoo-x86/sys-cluster/vzctl/files/vz-3.0.10.initd,v 1.2 2006/07/09 10:29:24 phreak Exp $
11
# if we don't want openvz running, say so
12
[ "${VIRTUOZZO}" = "yes" ] || return 1
15
: ${VZCTL:=@SBINDIR@/vzctl}
16
: ${VZQUOTA:=@SBINDIR@/vzquota}
17
: ${VZVEINFO:=/proc/vz/veinfo}
18
: ${VESTAT:=/proc/vz/vestat}
19
: ${VPSCONFDIR:=@VPSCONFDIR@}
21
: ${SRC_CRONSCRIPT_DIR:=@CRONDDIR@}
22
: ${DST_CRONSCRIPT_DIR:=@DST_CRONDDIR@}
24
if [ "${MODULES_DISABLED}" != "yes" ]; then
25
: ${PRELOAD_MODULES:="af_packet"}
26
: ${MODULES:="vzmon vzdquota vzdev"}
27
: ${MIGRATE_MODULES:="vzcpt vzrst"}
28
: ${NET_MODULES="vznetdev vznet"}
30
# check if you should load vzwdog module
31
[ "${VZWDOG}" = "yes" ] && MODULES="${MODULES} vzwdog"
34
# we need a working vzctl
35
if [ ! -x "${VZCTL}" ]; then
36
eerror "vzctl missing (${VZCTL})"
40
if [ -z "${VE0CPUUNITS}" ]; then
41
ewarn "VE0CPUUNITS is not set in /etc/conf.d/vz; using default value of 1000"
47
# We used to install OpenVZ cron job when the vzctl package was
48
# installed, irrespective of whether OpenVZ was actually being
49
# run. Although the cron jobs didn't create any problems if someone
50
# wasn't running OpenVZ some users complained about the cron log file
51
# filling up, resource usage, and power consumption since systems
52
# wouldn't really idle. It really only makes sense to run the OpenVZ
53
# cron job if the vz service is turned on and not just merely
54
# having the package installed. This init.d script is an obvious place
55
# to install or remove the cron jobs based on the service
56
# being enabled or not.
59
[ -z "$SRC_CRONSCRIPT_DIR" ] && return
60
[ -d "$SRC_CRONSCRIPT_DIR" ] || return
61
install -m644 -o root -g root $SRC_CRONSCRIPT_DIR/vz \
67
[ -z "$SRC_CRONSCRIPT_DIR" ] && return
68
[ -d "$SRC_CRONSCRIPT_DIR" ] || return
69
cat > $DST_CRONSCRIPT_DIR/vz <<EOF
70
# DO NOT EDIT THIS FILE!
72
# Contents of this file managed by /etc/init.d/vz script
73
# Master copy is $SRC_CRONSCRIPT_DIR/vz.
74
# Consult that file for documentation.
79
local msg ve0conf="${VPSCONFDIR}/0.conf"
81
msg=$(${VZCTL} set 0 --cpuunits ${VE0CPUUNITS} 2>&1)
82
[ $? -ne 0 ] && ewarn "vzctl set 0 --cpuunits ${VE0CPUUNITS} failed: ${msg}"
84
test -f ${ve0conf} || return
85
egrep -q '^ONBOOT=yes\|^ONBOOT=\"yes\"' ${ve0conf} || return
87
ebegin "Configuring hardware node UB resources: "
88
msg=$(${VZCTL} set 0 --reset_ub 2>&1)
95
# we don't operate on a running interface
96
if /sbin/ip addr ls | grep -q "venet0:.*UP" 2>/dev/null; then
100
# load necessary modules
101
for mod in ${NET_MODULES}; do
102
/sbin/modprobe ${mod} 2>/dev/null
105
if [ ! -f ${VZVEINFO} ]; then
109
# configure the device
110
ebegin "Bringing up interface ${VZDEV}"
111
/sbin/ip link set ${VZDEV} up
114
/sbin/ip addr add 0.0.0.0/0 dev ${VZDEV}
116
ebegin "Configuring interface ${VZDEV}"
117
/sbin/sysctl -q -w net.ipv4.conf.${VZDEV}.send_redirects=0
124
if /sbin/ip a l | grep -q "venet0:.*UP" 2>/dev/null; then
125
ebegin "Bringing down interface ${VZDEV}"
126
/sbin/ip link set ${VZDEV} down 2>/dev/null
130
# remove all modules we probably loaded on start_net
131
for mod in ${NET_MODULES}; do
132
/sbin/modprobe -r ${mod} > /dev/null 2>&1
137
local veid velist msg need_restart=""
139
# get all VEs we should start on boot
140
if ! cd ${VPSCONFDIR}; then
141
eerror $? "Unable to cd to ${VPSCONFDIR}"
144
velist=$(grep -l '^ONBOOT=yes\|^ONBOOT=\"yes\"' [0-9]*.conf 2>/dev/null | sed -e 's/.conf//g' | sort -n)
147
/sbin/sysctl -q -w net.ipv4.route.src_check=0
149
for veid in ${velist}; do
150
ebegin "Starting VE ${veid}"
151
if [ "${VZFASTBOOT}" = "yes" -a "${DISK_QUOTA}" = "yes" ]; then
152
${VZQUOTA} stat ${veid} >/dev/null 2>&1
153
if [ $? -eq 6 ]; then
154
if ${VZQUOTA} show ${veid} 2>&1 | grep "vzquota : (warning) Quota is running" >/dev/null 2>&1; then
155
${VZQUOTA} on ${veid} --nocheck >/dev/null 2>&1
156
need_restart="${need_restart} ${veid}"
160
msg=$(${VZCTL} start ${veid} 2>&1)
164
for veid in ${need_restart}; do
165
ebegin "Stopping VE ${veid}"
166
msg=$(${VZCTL} stop ${veid})
169
ebegin "Starting VE ${veid}"
170
msg=$($VZCTL start ${veid} 2>&1)
174
# we're ok even if some VEs failed to start
180
[ -n "${PARALLEL}" ] && return
183
$1 == "processor" { num++; }
184
END { print num * 4; }' /proc/cpuinfo`
188
local veid velist msg m mounts fail i iter pid pids quota
190
if [ -f ${VESTAT} ]; then
192
for ((i = 0; i <= 2; i++)); do
195
velist=$(awk '$1 != "VEID" && $1 != "Version:" {print $1}' ${VESTAT})
196
for veid in ${velist}; do
197
ebegin "Shutting down VE $veid"
198
# Set fairsched parameters to maximum so
200
${VZCTL} set ${veid} --cpuunits 2000 --cpulimit 0 >/dev/null 2>&1
201
${VZCTL} --skiplock stop ${veid} >/dev/null 2>&1 &
204
if [ ${iter} -gt ${PARALLEL} ]; then
205
for pid in ${pids}; do
213
for pid in ${pids}; do
222
while [ ${iter} -lt 5 -a ${fail} -ne 0 ]; do
224
mounts=$(awk '{if ($3=="simfs") print $2}' /proc/mounts)
226
for m in ${mounts}; do
227
ebegin "Unmounting VE area ${m}"
228
msg=$(umount ${m} 2>&1)
230
if [ $? -ne 0 ]; then
232
fuser -k -m ${m} > /dev/null 2>&1
240
quota=$(awk -F: '/^[0-9]+:/{print $1}' /proc/vz/vzquota 2>/dev/null)
242
for m in ${quota}; do
243
ebegin "Turning quota off for VE ${m}"
244
msg=$(vzquota off ${m} 2>&1)
250
check_config || return
254
ebegin "Loading OpenVZ modules"
255
for mod in ${PRELOAD_MODULES}; do
256
/sbin/modprobe -r ${mod} >/dev/null 2>&1
257
/sbin/modprobe ${mod} >/dev/null 2>&1
260
for mod in ${MODULES}; do
261
/sbin/modprobe ${mod} >/dev/null 2>&1
263
if [ ${rc} -ne 0 ]; then
264
eend ${rc} "failed to load module ${mod}"
269
for mod in ${MIGRATE_MODULES}; do
270
/sbin/modprobe ${mod} >/dev/null 2>&1
274
if [ ! -e /dev/vzctl ]; then
275
eerror "Missing device node /dev/vzctl"
277
einfo "Please create the vzctl device node using the following command:"
278
einfo " /bin/mknod /dev/vzctl c 126 0"
290
check_config || return
298
for mod in ${MODULES}; do
299
/sbin/modprobe -r ${mod} > /dev/null 2>&1
302
for mod in ${PRELOAD_MODULES}; do
303
/sbin/modprobe -r ${mod} > /dev/null 2>&1
306
# Even if some modules failed to unload (say they were not loaded)
307
# we return 0 for the service to be marked as stopped.