Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 529972 | Differences between
and this patch

Collapse All | Expand All

(-)a/xen-tools/files/xendomains.initd-r2 (-23 / +104 lines)
Lines 11-17 Link Here
11
}
11
}
12
12
13
get_domname() {
13
get_domname() {
14
	local name_from_file=$(sed -rn 's/^name\W*=\W*\"?([[:alnum:]_\.-]+)\"?\W*;?/\1/p' "${1}" | tail -n 1)
14
	local name_from_file=$(sed -rn 's/^name\W*=\W*\"?([[:alnum:]_\.-]+)\"?\W*;?/\1/p' "${1}" 2>/dev/null | tail -n 1)
15
15
16
	if [ -z ${name_from_file} ] ; then
16
	if [ -z ${name_from_file} ] ; then
17
		basename "${1}"
17
		basename "${1}"
Lines 24-35 Link Here
24
	/usr/sbin/xl list "${1}" >/dev/null 2>&1
24
	/usr/sbin/xl list "${1}" >/dev/null 2>&1
25
}
25
}
26
26
27
domains_running() {
28
	if [[ "`jobs -l|wc -l`" -eq "0" ]] ; then
29
		return 1
30
	else
31
		return 0
32
	fi
33
34
}
35
27
using_screen() {
36
using_screen() {
28
	[ "${SCREEN}" = "yes" -o "${SCREEN}" = "YES" ]
37
	[ "${SCREEN}" = "yes" -o "${SCREEN}" = "YES" ]
29
}
38
}
30
39
31
set_screen_cmd() {
40
set_screen_cmd() {
32
	screen_cmd="screen -c ${SCREENRC:-/dev/null} -q -r ${SCREEN_NAME:=xen} -X"
41
	export SCREENDIR
42
	screen_cmd="screen -c ${SCREENRC:-/dev/null} -q -r -S ${SCREEN_NAME:=xen} -X"
43
}
44
45
exists_screen() {
46
	export SCREENDIR
47
	screen -c ${SCREENRC:-/dev/null} -S ${SCREEN_NAME:=xen} -q -ls -r
48
	# <10 no sessions, 10 session, but attached, 11 1 session, 12 2 sessions, ...
49
	running_sessions=$?
50
	return $running_sessions
33
}
51
}
34
52
35
start() {
53
start() {
Lines 37-58 Link Here
37
55
38
	einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}"
56
	einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}"
39
	if using_screen ; then
57
	if using_screen ; then
40
		ebegin "Creating screen session to hold domain consoles"
58
		export SCREENDIR 
41
		(  screen -c ${SCREENRC:-/dev/null} -d -m -S ${SCREEN_NAME} -t dom0 \
59
		einfo "Wiping old sessions"
42
		&& sleep 5 \
60
		screen -S ${SCREEN_NAME:=xen} -wipe
43
		&& ${screen_cmd} zombie dr \
61
		exists_screen
44
		&& logrotate -f /etc/xen/xen-consoles.logrotate \
62
		rsessions=$?
45
		&& ${screen_cmd} logfile  /var/log/xen-consoles/%t.log \
63
		case $rsessions in
46
		&& ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \
64
		"8")	# no screeen, create
47
		&& ${screen_cmd} log on \
65
			ebegin "Creating screen session to hold domain consoles"
48
		&& ${screen_cmd} deflog on ) >/dev/null
66
			( 
49
		if [ $? -ne 0 ] ; then
67
			screen -c ${SCREENRC:-/dev/null} -d -m -S ${SCREEN_NAME:=xen} -t dom0 \
68
			&& sleep 5 \
69
			&& ${screen_cmd} zombie dr \
70
			&& logrotate -f /etc/xen/xen-consoles.logrotate \
71
			&& ${screen_cmd} logfile  /var/log/xen-consoles/%t.log \
72
			&& ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \
73
			&& ${screen_cmd} log on \
74
			&& ${screen_cmd} deflog on ) 2>&1 >/tmp/debug #>/dev/null
75
			if [ $? -ne 0 ] ; then
76
				eend 1
77
				return 1
78
			else
79
				eend
80
			fi
81
			;;
82
		"10")	# screen, but attached. detach.
83
			ebegin "Detaching the connected screen session"
84
			screen -d -S ${SCREEN_NAME:=xen}
85
			eend $?
86
			;;
87
		"11")	# one session free, do nothing
88
			einfo "Already existing screen session, doing nothing"
89
			;;
90
		*)	# more than one session
91
			let rsessions=$rsessions-10
92
			ebegin "$rsessions session running. Please check with screen -S xen -ls."
50
			eend 1
93
			eend 1
51
			return 1
94
			return 1
52
		else
95
		esac
53
			eend
54
		fi
55
	fi
96
	fi
97
	# debug
98
	#eend 1
99
	#return 1
56
	# Create all domains with config files in AUTODIR.
100
	# Create all domains with config files in AUTODIR.
57
	for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do
101
	for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do
58
		name=$(get_domname ${dom})
102
		name=$(get_domname ${dom})
Lines 76-83 Link Here
76
	einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}"
120
	einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}"
77
	# Stop all domains with config files in AUTODIR.
121
	# Stop all domains with config files in AUTODIR.
78
	DOMAINS="$(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort -r)"
122
	DOMAINS="$(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort -r)"
79
123
	RDOMAINS="$(/usr/sbin/xl vm-list|awk '{print $3}'|grep -v "^name$")"
80
	if [ "$PARALLEL_SHUTDOWN" = "yes" ] ; then
124
	
125
	# Adding running domains
126
	for rdom in $RDOMAINS ; do
127
		if [[ "`echo $DOMAINS | grep $rdom`" == "" ]] ; then
128
			DOMAINS="$rdom $DOMAINS"
129
		fi
130
	done
131
	
132
	if [[ "$PARALLEL_SHUTDOWN" == "yes" ]] ; then
81
		for dom in $DOMAINS ; do
133
		for dom in $DOMAINS ; do
82
			name=$(get_domname ${dom})
134
			name=$(get_domname ${dom})
83
			if is_running ${name} ; then
135
			if is_running ${name} ; then
Lines 87-107 Link Here
87
				einfo "  Not stopping domain ${name} - not running"
139
				einfo "  Not stopping domain ${name} - not running"
88
			fi
140
			fi
89
		done
141
		done
90
		einfo "  Waiting for shutdown of domains that are still running"
142
		einfo "  Waiting ${MAXWAIT} seconds for shutdown of domains that are still running"
91
		wait
143
		counter=0
92
		eend $?
144
		while domains_running ; do
145
			if [[ ${counter} -gt ${MAXWAIT} ]] ; then
146
				break
147
			fi
148
			sleep 1
149
			let counter=$counter+1
150
			echo -n .
151
		done
93
	else
152
	else
94
		for dom in $DOMAINS ; do
153
		for dom in $DOMAINS ; do
95
			name=$(get_domname ${dom})
154
			name=$(get_domname ${dom})
96
			if is_running ${name} ; then
155
			if is_running ${name} ; then
97
				ebegin "  Waiting for domain ${name} to shutdown"
156
				ebegin "  Waiting ${MAXWAIT} seconds for domain ${name} to shutdown"
98
				xl shutdown -w ${name} >/dev/null
157
				xl shutdown ${name} >/dev/null
99
				eend $?
158
				counter=0
159
				while is_running ${name} ; do
160
					if [[ ${counter} -gt ${MAXWAIT} ]]
161
					then
162
						break
163
					fi
164
					sleep 1
165
					let counter=$counter+1
166
					echo -n .
167
				done
100
			else
168
			else
101
				einfo "  Not stopping domain ${name} - not running"
169
				einfo "  Not stopping domain ${name} - not running"
102
			fi
170
			fi
103
		done
171
		done
104
	fi
172
	fi
173
	
174
	# Destroying remaining domains
175
	DOMAINS="$(/usr/sbin/xl vm-list|awk '{print $3}'|grep -v "^name$")"
176
	for dom in $DOMAINS ; do
177
		name=$(get_domname ${dom})
178
		if is_running ${name} ; then
179
			ebegin "  Destroying running domain ${name}..."
180
			xl destroy ${name} >/dev/null
181
		else
182
			einfo "  Not stopping domain ${name} - not running"
183
		fi
184
	done
185
105
	if using_screen ; then
186
	if using_screen ; then
106
		if ${screen_cmd} sleep 0 >/dev/null 2>&1 ; then
187
		if ${screen_cmd} sleep 0 >/dev/null 2>&1 ; then
107
			ebegin "Closing screen session ${SCREEN_NAME}"
188
			ebegin "Closing screen session ${SCREEN_NAME}"

Return to bug 529972