Hello,
for everybody who develops or uses the script /etc/init.d/xendomains,
there is a serious error in this script.
If the given variable XEN_DOMAINS_AUTO_ONLY is set to
true in /etc/sysconfig/xendomains, then the saving of the domains always fails
– the domains are shut down instead of the saving. This is very bad
especially for some HVM domains which MUST be saved instead of shut down, it
affects also the wished migration of the domain to another machine, etc. The
error code is in the beginning of the loop in the stop() procedure:
stop()
{
# Collect list of domains to shut down
if test
"$XENDOMAINS_AUTO_ONLY" = "true"; then
rdnames
fi
echo -n "Shutting down Xen
domains:"
while read LN; do
parseln
"$LN"
if test $id =
0; then continue; fi
echo -n "
$name"
if test
"$XENDOMAINS_AUTO_ONLY" = "true"; then
case $name in
($NAMES)
# nothing
;;
(*)
echo -n "(skip)"
continue
;;
esac
fi
.....
}
The case cause is not evaluated correctly in the case
"$XENDOMAINS_AUTO_ONLY" = "true" - it falls always to the
possibility (*) in the case there are more than one domain specified in
/etc/xen/auto - then in $NAMES there is for example something like
DomName1|DomName2 what is then incorrectly handled and it never matches the
$name parameter even if it is filled by DomName1 or DomName2 or whatever else.
So there comes the „continue“ statement and nothing is made with
the given domain, no saving, no migration to another machine, nothing. The
domains are then shut down with the shutdown of all remaining
„non-auto“ domains
The correct way is to evaluate the case using eval:
stop()
{
# Collect list of domains to shut down
if test
"$XENDOMAINS_AUTO_ONLY" = "true"; then
rdnames
fi
echo -n "Shutting down Xen
domains:"
while read LN; do
parseln
"$LN"
if test $id = 0;
then continue; fi
echo -n "
$name"
if test
"$XENDOMAINS_AUTO_ONLY" = "true"; then
eval "
case $name in
($NAMES)
# nothing
;;
(*)
echo -n '(skip)'
continue
;;
esac
"
fi
...
}
- in this case the variable $NAMES is substituted first
into the case, which is then evaluated with the help of the eval built-in.
This error can be found in version 3.1.0 as well as in
version 3.2.1 of Xen.
Please repair it for the next version of Xen, it cost me
some hours to track it out, so please do not waste this time by other users too.
This is a serious bug causing crash of the HVM domains not reacting on
shutdown.
With regards
Artur Linhart
http://www.bcpraha.cz