aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2014-11-24 14:53:40 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2014-11-24 14:53:40 +0000
commit164c06ca578241499e1c0badeef98ab41569d98b (patch)
tree7cded29abfde62c4871cbf86b4434d4f16481a81
parenta2bfcd03d9990b858fcb2e108fec6e1bad923a8f (diff)
downloadalpine_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/APKBUILD8
-rw-r--r--main/xen/xendomains.initd90
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>
4pkgname=xen 4pkgname=xen
5pkgver=4.4.1 5pkgver=4.4.1
6pkgrel=4 6pkgrel=5
7pkgdesc="Xen hypervisor" 7pkgdesc="Xen hypervisor"
8url="http://www.xen.org/" 8url="http://www.xen.org/"
9arch="x86_64" 9arch="x86_64"
@@ -230,7 +230,7 @@ c13f954d041a6fa78d0d241ad1780c0b elf_local.h
230d86504e12f05deca6b3eeeb90157160e xenstored.confd 230d86504e12f05deca6b3eeeb90157160e xenstored.confd
231ed262f15fb880badb53575539468646c xenconsoled.initd 231ed262f15fb880badb53575539468646c xenconsoled.initd
232ec2252c72050d7d5870a3a629b873ba6 xenconsoled.confd 232ec2252c72050d7d5870a3a629b873ba6 xenconsoled.confd
23310f3ab45a6d0a241b9c7e9757ad59ad8 xendomains.initd 23303858ab5dda5b95ef344ddeb7340fcc9 xendomains.initd
2342c80e442cec6dd2a025b61852641834d xendomains.confd 2342c80e442cec6dd2a025b61852641834d xendomains.confd
2359df68ac65dc3f372f5d61183abdc83ff xen-consoles.logrotate 2359df68ac65dc3f372f5d61183abdc83ff xen-consoles.logrotate
2366a2f777c16678d84039acf670d86fff6 xenqemu.confd 2366a2f777c16678d84039acf670d86fff6 xenqemu.confd
@@ -253,7 +253,7 @@ d0b3e5f282a07878341c38f40d01041ed37623757a99d6e0a420ca64d1f4ef2a xen-fd-is-file
253991bb7c9da02941556e29714bd96b26e39e57e0a5b514eadd78d9bfa3fa5a9dc xenstored.confd 253991bb7c9da02941556e29714bd96b26e39e57e0a5b514eadd78d9bfa3fa5a9dc xenstored.confd
25493bea2eb90ea1b4628854c8141dd351bbd1fbc5959b12795447ea933ad025f01 xenconsoled.initd 25493bea2eb90ea1b4628854c8141dd351bbd1fbc5959b12795447ea933ad025f01 xenconsoled.initd
2552a74be03eb74f6013242a4a5d721df6cb9b959b43c405de1e32813f52d749060 xenconsoled.confd 2552a74be03eb74f6013242a4a5d721df6cb9b959b43c405de1e32813f52d749060 xenconsoled.confd
256c304a6353ba1daebd0547bb57e9ffffc2c90465d6abe7469cfdacf61c5108eab xendomains.initd 25615c380c86e1980a3d6ee13c43a419567f359a2a5f2ccc5d1cded10dadc984a9e xendomains.initd
2572360b1fa1f102ac1b1a6cd0d161a94d13139dfc21d9a2227d35d557b4f04a63e xendomains.confd 2572360b1fa1f102ac1b1a6cd0d161a94d13139dfc21d9a2227d35d557b4f04a63e xendomains.confd
2580da87a4b9094f934e3de937e8ef8d3afc752e76793aa3d730182d0241e118b19 xen-consoles.logrotate 2580da87a4b9094f934e3de937e8ef8d3afc752e76793aa3d730182d0241e118b19 xen-consoles.logrotate
2594cfcddcade5d055422ab4543e8caa6e5c5eee7625c41880a9000b7a87c7c424e xenqemu.confd 2594cfcddcade5d055422ab4543e8caa6e5c5eee7625c41880a9000b7a87c7c424e xenqemu.confd
@@ -276,7 +276,7 @@ e76816c6ad0e91dc5f81947f266da3429b20e6d976c3e8c41202c6179532eec878a3f0913921ef3a
276093f7fbd43faf0a16a226486a0776bade5dc1681d281c5946a3191c32d74f9699c6bf5d0ab8de9d1195a2461165d1660788e92a3156c9b3c7054d7b2d52d7ff0 xenstored.confd 276093f7fbd43faf0a16a226486a0776bade5dc1681d281c5946a3191c32d74f9699c6bf5d0ab8de9d1195a2461165d1660788e92a3156c9b3c7054d7b2d52d7ff0 xenstored.confd
27712f981b2459c65d66e67ec0b32d0d19b95a029bc54c2a79138cfe488d3524a22e51860f755abfe25ddcdaf1b27f2ded59b6e350b9d5f8791193d00e2d3673137 xenconsoled.initd 27712f981b2459c65d66e67ec0b32d0d19b95a029bc54c2a79138cfe488d3524a22e51860f755abfe25ddcdaf1b27f2ded59b6e350b9d5f8791193d00e2d3673137 xenconsoled.initd
27830df69cc38d0bed26bc4d6e08a2b62cbdc654d5f663009a05cb3b83b3e3dc5e206362d3fd59abbb753ceb8d6d79eaa6e15d079bb8f4f35dc74667103faf4e85d xenconsoled.confd 27830df69cc38d0bed26bc4d6e08a2b62cbdc654d5f663009a05cb3b83b3e3dc5e206362d3fd59abbb753ceb8d6d79eaa6e15d079bb8f4f35dc74667103faf4e85d xenconsoled.confd
279d1008996e486bc8243abd0c3f50755da0f414009ba81eebe943514e29c7e2440af3e4aa0bc46258f05a502a7876783e834756b02dc72161be1ab3808e6abe67b xendomains.initd 27921f41fb6480cc1cd14796f24225da70946f2a2be13cd28465a235aa3462c6190d2d32dd696611e161e166b379931c9eb94169c87411f4079cb6003c488caf859 xendomains.initd
2807c1e32d07aefbde1904ca2d98f9a415543cea7ab8e039b05e0b111e37e78c07c40b540e439b3656d5840dfd76e35e07cf1d6ddea431163d975b1ddf5ddac50d3 xendomains.confd 2807c1e32d07aefbde1904ca2d98f9a415543cea7ab8e039b05e0b111e37e78c07c40b540e439b3656d5840dfd76e35e07cf1d6ddea431163d975b1ddf5ddac50d3 xendomains.confd
281ab2105c75cfe01768aecd5bcbb56269d63666e8a44e42b6a83aee87df6c84ee2f9ab249171c21b2e09f8fec2cae8318f6e87d160989398a3e7dd68db8d52c426 xen-consoles.logrotate 281ab2105c75cfe01768aecd5bcbb56269d63666e8a44e42b6a83aee87df6c84ee2f9ab249171c21b2e09f8fec2cae8318f6e87d160989398a3e7dd68db8d52c426 xen-consoles.logrotate
282bdbe15c924071cdc2d0f23e53ba8e3f837d4b5369bfb218abd3405f9bef25d105269aaf0784baeb69c073a5786b8c82ffdfd414e86874da34293cfdc2c497928 xenqemu.confd 282bdbe15c924071cdc2d0f23e53ba8e3f837d4b5369bfb218abd3405f9bef25d105269aaf0784baeb69c073a5786b8c82ffdfd414e86874da34293cfdc2c497928 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
40dir_is_empty() {
41 local dir=$1
42 set -- "$dir"/*
43 test "$1" = "$dir/*"
44}
45
46wait_screen() { 40wait_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
52start() { 46init_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 60startdom_screen() {
71 eend 61 ${screen_cmd} screen -t ${1} xl create ${2} -c
72 fi 62}
63
64close_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
75startdom_noconsole() {
76 xl create --quiet ${2}
77}
78
79
80set_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
97start() {
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
97stop() { 124stop() {
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
140status() { 160status() {