diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2014-11-24 14:53:40 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2014-11-24 14:53:40 +0000 |
commit | 164c06ca578241499e1c0badeef98ab41569d98b (patch) | |
tree | 7cded29abfde62c4871cbf86b4434d4f16481a81 | |
parent | a2bfcd03d9990b858fcb2e108fec6e1bad923a8f (diff) | |
download | alpine_aports-164c06ca578241499e1c0badeef98ab41569d98b.tar.bz2 alpine_aports-164c06ca578241499e1c0badeef98ab41569d98b.tar.xz alpine_aports-164c06ca578241499e1c0badeef98ab41569d98b.zip |
main/xen: fix race in xendomains init.d script
the gnu screen would show files in SCREENDIR before its ready to accept
connections. so starting domains failed
-rw-r--r-- | main/xen/APKBUILD | 8 | ||||
-rw-r--r-- | main/xen/xendomains.initd | 90 |
2 files changed, 59 insertions, 39 deletions
diff --git a/main/xen/APKBUILD b/main/xen/APKBUILD index bb21130ad4..4e1d28efc3 100644 --- a/main/xen/APKBUILD +++ b/main/xen/APKBUILD | |||
@@ -3,7 +3,7 @@ | |||
3 | # Maintainer: William Pitcock <nenolod@dereferenced.org> | 3 | # Maintainer: William Pitcock <nenolod@dereferenced.org> |
4 | pkgname=xen | 4 | pkgname=xen |
5 | pkgver=4.4.1 | 5 | pkgver=4.4.1 |
6 | pkgrel=4 | 6 | pkgrel=5 |
7 | pkgdesc="Xen hypervisor" | 7 | pkgdesc="Xen hypervisor" |
8 | url="http://www.xen.org/" | 8 | url="http://www.xen.org/" |
9 | arch="x86_64" | 9 | arch="x86_64" |
@@ -230,7 +230,7 @@ c13f954d041a6fa78d0d241ad1780c0b elf_local.h | |||
230 | d86504e12f05deca6b3eeeb90157160e xenstored.confd | 230 | d86504e12f05deca6b3eeeb90157160e xenstored.confd |
231 | ed262f15fb880badb53575539468646c xenconsoled.initd | 231 | ed262f15fb880badb53575539468646c xenconsoled.initd |
232 | ec2252c72050d7d5870a3a629b873ba6 xenconsoled.confd | 232 | ec2252c72050d7d5870a3a629b873ba6 xenconsoled.confd |
233 | 10f3ab45a6d0a241b9c7e9757ad59ad8 xendomains.initd | 233 | 03858ab5dda5b95ef344ddeb7340fcc9 xendomains.initd |
234 | 2c80e442cec6dd2a025b61852641834d xendomains.confd | 234 | 2c80e442cec6dd2a025b61852641834d xendomains.confd |
235 | 9df68ac65dc3f372f5d61183abdc83ff xen-consoles.logrotate | 235 | 9df68ac65dc3f372f5d61183abdc83ff xen-consoles.logrotate |
236 | 6a2f777c16678d84039acf670d86fff6 xenqemu.confd | 236 | 6a2f777c16678d84039acf670d86fff6 xenqemu.confd |
@@ -253,7 +253,7 @@ d0b3e5f282a07878341c38f40d01041ed37623757a99d6e0a420ca64d1f4ef2a xen-fd-is-file | |||
253 | 991bb7c9da02941556e29714bd96b26e39e57e0a5b514eadd78d9bfa3fa5a9dc xenstored.confd | 253 | 991bb7c9da02941556e29714bd96b26e39e57e0a5b514eadd78d9bfa3fa5a9dc xenstored.confd |
254 | 93bea2eb90ea1b4628854c8141dd351bbd1fbc5959b12795447ea933ad025f01 xenconsoled.initd | 254 | 93bea2eb90ea1b4628854c8141dd351bbd1fbc5959b12795447ea933ad025f01 xenconsoled.initd |
255 | 2a74be03eb74f6013242a4a5d721df6cb9b959b43c405de1e32813f52d749060 xenconsoled.confd | 255 | 2a74be03eb74f6013242a4a5d721df6cb9b959b43c405de1e32813f52d749060 xenconsoled.confd |
256 | c304a6353ba1daebd0547bb57e9ffffc2c90465d6abe7469cfdacf61c5108eab xendomains.initd | 256 | 15c380c86e1980a3d6ee13c43a419567f359a2a5f2ccc5d1cded10dadc984a9e xendomains.initd |
257 | 2360b1fa1f102ac1b1a6cd0d161a94d13139dfc21d9a2227d35d557b4f04a63e xendomains.confd | 257 | 2360b1fa1f102ac1b1a6cd0d161a94d13139dfc21d9a2227d35d557b4f04a63e xendomains.confd |
258 | 0da87a4b9094f934e3de937e8ef8d3afc752e76793aa3d730182d0241e118b19 xen-consoles.logrotate | 258 | 0da87a4b9094f934e3de937e8ef8d3afc752e76793aa3d730182d0241e118b19 xen-consoles.logrotate |
259 | 4cfcddcade5d055422ab4543e8caa6e5c5eee7625c41880a9000b7a87c7c424e xenqemu.confd | 259 | 4cfcddcade5d055422ab4543e8caa6e5c5eee7625c41880a9000b7a87c7c424e xenqemu.confd |
@@ -276,7 +276,7 @@ e76816c6ad0e91dc5f81947f266da3429b20e6d976c3e8c41202c6179532eec878a3f0913921ef3a | |||
276 | 093f7fbd43faf0a16a226486a0776bade5dc1681d281c5946a3191c32d74f9699c6bf5d0ab8de9d1195a2461165d1660788e92a3156c9b3c7054d7b2d52d7ff0 xenstored.confd | 276 | 093f7fbd43faf0a16a226486a0776bade5dc1681d281c5946a3191c32d74f9699c6bf5d0ab8de9d1195a2461165d1660788e92a3156c9b3c7054d7b2d52d7ff0 xenstored.confd |
277 | 12f981b2459c65d66e67ec0b32d0d19b95a029bc54c2a79138cfe488d3524a22e51860f755abfe25ddcdaf1b27f2ded59b6e350b9d5f8791193d00e2d3673137 xenconsoled.initd | 277 | 12f981b2459c65d66e67ec0b32d0d19b95a029bc54c2a79138cfe488d3524a22e51860f755abfe25ddcdaf1b27f2ded59b6e350b9d5f8791193d00e2d3673137 xenconsoled.initd |
278 | 30df69cc38d0bed26bc4d6e08a2b62cbdc654d5f663009a05cb3b83b3e3dc5e206362d3fd59abbb753ceb8d6d79eaa6e15d079bb8f4f35dc74667103faf4e85d xenconsoled.confd | 278 | 30df69cc38d0bed26bc4d6e08a2b62cbdc654d5f663009a05cb3b83b3e3dc5e206362d3fd59abbb753ceb8d6d79eaa6e15d079bb8f4f35dc74667103faf4e85d xenconsoled.confd |
279 | d1008996e486bc8243abd0c3f50755da0f414009ba81eebe943514e29c7e2440af3e4aa0bc46258f05a502a7876783e834756b02dc72161be1ab3808e6abe67b xendomains.initd | 279 | 21f41fb6480cc1cd14796f24225da70946f2a2be13cd28465a235aa3462c6190d2d32dd696611e161e166b379931c9eb94169c87411f4079cb6003c488caf859 xendomains.initd |
280 | 7c1e32d07aefbde1904ca2d98f9a415543cea7ab8e039b05e0b111e37e78c07c40b540e439b3656d5840dfd76e35e07cf1d6ddea431163d975b1ddf5ddac50d3 xendomains.confd | 280 | 7c1e32d07aefbde1904ca2d98f9a415543cea7ab8e039b05e0b111e37e78c07c40b540e439b3656d5840dfd76e35e07cf1d6ddea431163d975b1ddf5ddac50d3 xendomains.confd |
281 | ab2105c75cfe01768aecd5bcbb56269d63666e8a44e42b6a83aee87df6c84ee2f9ab249171c21b2e09f8fec2cae8318f6e87d160989398a3e7dd68db8d52c426 xen-consoles.logrotate | 281 | ab2105c75cfe01768aecd5bcbb56269d63666e8a44e42b6a83aee87df6c84ee2f9ab249171c21b2e09f8fec2cae8318f6e87d160989398a3e7dd68db8d52c426 xen-consoles.logrotate |
282 | bdbe15c924071cdc2d0f23e53ba8e3f837d4b5369bfb218abd3405f9bef25d105269aaf0784baeb69c073a5786b8c82ffdfd414e86874da34293cfdc2c497928 xenqemu.confd | 282 | bdbe15c924071cdc2d0f23e53ba8e3f837d4b5369bfb218abd3405f9bef25d105269aaf0784baeb69c073a5786b8c82ffdfd414e86874da34293cfdc2c497928 xenqemu.confd |
diff --git a/main/xen/xendomains.initd b/main/xen/xendomains.initd index e6751eeeaa..dd5a924f66 100644 --- a/main/xen/xendomains.initd +++ b/main/xen/xendomains.initd | |||
@@ -37,26 +37,16 @@ set_screen_cmd() { | |||
37 | screen_cmd="screen -c ${SCREENRC:-/dev/null} -q -r ${SCREEN_NAME:=xen} -X" | 37 | screen_cmd="screen -c ${SCREENRC:-/dev/null} -q -r ${SCREEN_NAME:=xen} -X" |
38 | } | 38 | } |
39 | 39 | ||
40 | dir_is_empty() { | ||
41 | local dir=$1 | ||
42 | set -- "$dir"/* | ||
43 | test "$1" = "$dir/*" | ||
44 | } | ||
45 | |||
46 | wait_screen() { | 40 | wait_screen() { |
47 | while dir_is_empty "$SCREENDIR"; do | 41 | while ! ${screen_cmd} dettach; do |
48 | sleep 0.1 | 42 | sleep 0.1 |
49 | done | 43 | done |
50 | } | 44 | } |
51 | 45 | ||
52 | start() { | 46 | init_screen() { |
53 | set_screen_cmd | 47 | set_screen_cmd |
54 | checkpath --directory --mode 755 /var/run/xen | 48 | ebegin "Creating screen session to hold domain consoles" |
55 | 49 | ( screen -c ${SCREENRC:-/dev/null} -d -m -S ${SCREEN_NAME} -t dom0 \ | |
56 | einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}" | ||
57 | if using_screen ; then | ||
58 | ebegin "Creating screen session to hold domain consoles" | ||
59 | ( screen -c ${SCREENRC:-/dev/null} -d -m -S ${SCREEN_NAME} -t dom0 \ | ||
60 | && wait_screen \ | 50 | && wait_screen \ |
61 | && ${screen_cmd} zombie dr \ | 51 | && ${screen_cmd} zombie dr \ |
62 | && logrotate -f /etc/xen/xen-consoles.logrotate \ | 52 | && logrotate -f /etc/xen/xen-consoles.logrotate \ |
@@ -64,13 +54,54 @@ start() { | |||
64 | && ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \ | 54 | && ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \ |
65 | && ${screen_cmd} log on \ | 55 | && ${screen_cmd} log on \ |
66 | && ${screen_cmd} deflog on ) >/dev/null | 56 | && ${screen_cmd} deflog on ) >/dev/null |
67 | if [ $? -ne 0 ] ; then | 57 | eend $? |
68 | eend 1 | 58 | } |
69 | return 1 | 59 | |
70 | else | 60 | startdom_screen() { |
71 | eend | 61 | ${screen_cmd} screen -t ${1} xl create ${2} -c |
72 | fi | 62 | } |
63 | |||
64 | close_screen() { | ||
65 | set_screen_cmd | ||
66 | if ${screen_cmd} sleep 0 >/dev/null 2>&1 ; then | ||
67 | ebegin "Closing screen session ${SCREEN_NAME}" | ||
68 | ${screen_cmd} quit | ||
69 | eend $? | ||
70 | else | ||
71 | eend 0 | ||
73 | fi | 72 | fi |
73 | } | ||
74 | |||
75 | startdom_noconsole() { | ||
76 | xl create --quiet ${2} | ||
77 | } | ||
78 | |||
79 | |||
80 | set_dom_cmd() { | ||
81 | if using_screen; then | ||
82 | : ${XENDOMAINS_CONSOLE:=screen} | ||
83 | fi | ||
84 | case "$XENDOMAINS_CONSOLE" in | ||
85 | screen) | ||
86 | initconsole=init_screen | ||
87 | startdom=startdom_screen | ||
88 | closeconsole=close_screen | ||
89 | ;; | ||
90 | *) | ||
91 | initconsole= | ||
92 | startdom=startdom_noconsole | ||
93 | closeconsole= | ||
94 | esac | ||
95 | } | ||
96 | |||
97 | start() { | ||
98 | set_dom_cmd | ||
99 | checkpath --directory --mode 755 /var/run/xen | ||
100 | |||
101 | einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}" | ||
102 | |||
103 | $initconsole | ||
104 | |||
74 | # Create all domains with config files in AUTODIR. | 105 | # Create all domains with config files in AUTODIR. |
75 | want_usleep= | 106 | want_usleep= |
76 | for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do | 107 | for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do |
@@ -82,11 +113,7 @@ start() { | |||
82 | want_usleep=1 | 113 | want_usleep=1 |
83 | fi | 114 | fi |
84 | ebegin " Starting domain ${name}" | 115 | ebegin " Starting domain ${name}" |
85 | if using_screen ; then | 116 | $startdom ${name} ${dom} |
86 | ${screen_cmd} screen -t ${name} xl create ${dom} -c | ||
87 | else | ||
88 | xl create --quiet ${dom} | ||
89 | fi | ||
90 | eend $? | 117 | eend $? |
91 | else | 118 | else |
92 | einfo " Not starting domain ${name} - already running" | 119 | einfo " Not starting domain ${name} - already running" |
@@ -95,7 +122,7 @@ start() { | |||
95 | } | 122 | } |
96 | 123 | ||
97 | stop() { | 124 | stop() { |
98 | set_screen_cmd | 125 | set_dom_cmd |
99 | 126 | ||
100 | einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}" | 127 | einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}" |
101 | # Stop all domains with config files in AUTODIR. | 128 | # Stop all domains with config files in AUTODIR. |
@@ -126,15 +153,8 @@ stop() { | |||
126 | fi | 153 | fi |
127 | done | 154 | done |
128 | fi | 155 | fi |
129 | if using_screen ; then | 156 | |
130 | if ${screen_cmd} sleep 0 >/dev/null 2>&1 ; then | 157 | $closeconsole |
131 | ebegin "Closing screen session ${SCREEN_NAME}" | ||
132 | ${screen_cmd} quit | ||
133 | eend $? | ||
134 | else | ||
135 | eend 0 | ||
136 | fi | ||
137 | fi | ||
138 | } | 158 | } |
139 | 159 | ||
140 | status() { | 160 | status() { |