Index: libvirt-0.8.7/tools/Makefile.am =================================================================== --- libvirt-0.8.7.orig/tools/Makefile.am +++ libvirt-0.8.7/tools/Makefile.am @@ -129,17 +129,18 @@ install-data-local: install-init uninstall-local: uninstall-init -if LIBVIRT_INIT_SCRIPT_RED_HAT install-init: libvirt-guests.init - mkdir -p $(DESTDIR)$(sysconfdir)/rc.d/init.d + mkdir -p $(DESTDIR)$(sysconfdir)/init.d $(INSTALL_SCRIPT) libvirt-guests.init \ - $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests - mkdir -p $(DESTDIR)$(sysconfdir)/sysconfig + $(DESTDIR)$(sysconfdir)/init.d/libvirt-guests + ln -s $(DESTDIR)$(sysconfdir)/init.d/libvirt-guests \ + $(DESTDIR)/usr/sbin/rclibvirt-guests + mkdir -p $(DESTDIR)/var/adm/fillup-templates $(INSTALL_DATA) $(srcdir)/libvirt-guests.sysconf \ - $(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests + $(DESTDIR)/var/adm/fillup-templates/sysconfig.libvirt-guests uninstall-init: - rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/libvirt-guests \ + rm -f $(DESTDIR)$(sysconfdir)/init.d/libvirt-guests \ $(DESTDIR)$(sysconfdir)/sysconfig/libvirt-guests BUILT_SOURCES += libvirt-guests.init @@ -152,11 +153,6 @@ libvirt-guests.init: libvirt-guests.init < $< > $@-t && \ chmod a+x $@-t && \ mv $@-t $@ -else -install-init: -uninstall-init: -libvirt-guests.init: -endif # LIBVIRT_INIT_SCRIPT_RED_HAT CLEANFILES = $(bin_SCRIPTS) $(man1_MANS) Index: libvirt-0.8.7/tools/libvirt-guests.sysconf =================================================================== --- libvirt-0.8.7.orig/tools/libvirt-guests.sysconf +++ libvirt-0.8.7/tools/libvirt-guests.sysconf @@ -1,15 +1,23 @@ +## Path: System/Virtualization/libvirt + +## Type: string +## Default: default # URIs to check for running guests # example: URIS='default xen:/// vbox+tcp://host/system lxc:///' -#URIS=default +URIS=default +## Type: string +## Default: start # action taken on host boot # - start all guests which were running on shutdown are started on boot # regardless on their autostart settings # - ignore libvirt-guests init script won't start any guest on boot, however, # guests marked as autostart will still be automatically started by # libvirtd -#ON_BOOT=start +ON_BOOT=start +## Type: string +## Default: suspend # action taken on host shutdown # - suspend all running guests are suspended using virsh managedsave # - shutdown all running guests are asked to shutdown. Please be careful with @@ -18,7 +26,9 @@ # which just needs a long time to shutdown. When setting # ON_SHUTDOWN=shutdown, you must also set SHUTDOWN_TIMEOUT to a # value suitable for your guests. -#ON_SHUTDOWN=suspend +ON_SHUTDOWN=suspend +## Type: integer +## Default: 120 # number of seconds we're willing to wait for a guest to shut down -#SHUTDOWN_TIMEOUT=0 +SHUTDOWN_TIMEOUT=120 Index: libvirt-0.8.7/tools/libvirt-guests.init.in =================================================================== --- libvirt-0.8.7.orig/tools/libvirt-guests.init.in +++ libvirt-0.8.7/tools/libvirt-guests.init.in @@ -4,10 +4,10 @@ # ### BEGIN INIT INFO # Provides: libvirt-guests -# Required-Start: libvirtd -# Required-Stop: libvirtd -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 +# Required-Start: $network $remote_fs libvirtd +# Required-Stop: $network $remote_fs libvirtd +# Default-Start: 3 5 +# Default-Stop: 0 1 2 4 6 # Short-Description: suspend/resume libvirt guests on shutdown/boot # Description: This is a script for suspending active libvirt guests # on shutdown and resuming them on next boot @@ -24,14 +24,13 @@ # See http://libvirt.org # +. /etc/rc.status +rc_reset + sysconfdir=@sysconfdir@ localstatedir=@localstatedir@ libvirtd=@sbindir@/libvirtd -# Source function library. -test ! -r "$sysconfdir"/rc.d/init.d/functions || - . "$sysconfdir"/rc.d/init.d/functions - URIS=default ON_BOOT=start ON_SHUTDOWN=suspend @@ -42,12 +41,10 @@ test -f "$sysconfdir"/sysconfig/libvirt- LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests VAR_SUBSYS_LIBVIRT_GUESTS="$localstatedir"/lock/subsys/libvirt-guests -RETVAL=0 - retval() { "$@" if [ $? -ne 0 ]; then - RETVAL=1 + rc_failed 1 return 1 else return 0 @@ -71,12 +68,31 @@ run_virsh_c() { ( export LC_ALL=C; run_virsh "$@" ) } +await_daemon_up() +{ + uri=$1 + i=1 + rets=10 + run_virsh $uri list > /dev/null 2>&1 + while [ $? -ne 0 -a $i -lt $rets ]; do + sleep 1 + echo -n . + i=$(($i + 1)) + run_virsh $uri list > /dev/null 2>&1 + done + if [ $i -eq $rets ]; then + echo $"libvirt-guests unable to connect to URI: $uri" + return 1 + fi + return 0 +} + list_guests() { uri=$1 list=$(run_virsh_c $uri list) if [ $? -ne 0 ]; then - RETVAL=1 + rc_failed 1 return 1 fi @@ -84,7 +100,7 @@ list_guests() { for id in $(echo "$list" | awk 'NR > 2 {print $1}'); do uuid=$(run_virsh_c $uri dominfo $id | awk '/^UUID:/{print $2}') if [ -z "$uuid" ]; then - RETVAL=1 + rc_failed 1 return 1 fi uuids="$uuids $uuid" @@ -111,7 +127,7 @@ guest_is_on() { guest_running=false info=$(run_virsh_c $uri dominfo $uuid) if [ $? -ne 0 ]; then - RETVAL=1 + rc_failed 1 return 1 fi @@ -148,6 +164,12 @@ start() { continue fi + await_daemon_up $uri + if [ $? -ne 0 ]; then + echo $"Ignoring guests on $uri URI, can't connect" + continue + fi + echo $"Resuming guests on $uri URI..." for guest in $list; do name=$(guest_name $uri $guest) @@ -227,7 +249,7 @@ stop() { suspending=false if [ $SHUTDOWN_TIMEOUT -le 0 ]; then echo $"Shutdown action requested but SHUTDOWN_TIMEOUT was not set" - RETVAL=6 + rc_failed 6 return fi fi @@ -291,14 +313,13 @@ gueststatus() { rh_status() { if [ -f "$LISTFILE" ]; then echo $"stopped, with saved guests" - RETVAL=3 + rc_failed 3 else if [ -f "$VAR_SUBSYS_LIBVIRT_GUESTS" ]; then echo $"started" else echo $"stopped, with no saved guests" fi - RETVAL=0 fi } @@ -340,4 +361,4 @@ case "$1" in usage ;; esac -exit $RETVAL +rc_exit