[Pkg-libvirt-maintainers] Bug#523712: libvirt-bin init script exits with failure status after starting

Chip Salzenberg chip at pobox.com
Mon Apr 13 17:33:26 UTC 2009


On Mon, Apr 13, 2009 at 05:38:18PM +0200, Guido Günther wrote:
> On Sun, Apr 12, 2009 at 01:46:31PM -0700, Chip Salzenberg wrote:
> > On Sun, Apr 12, 2009 at 09:31:25PM +0200, Guido Günther wrote:
> > > On Sat, Apr 11, 2009 at 07:52:18PM -0700, Chip Salzenberg wrote:
> > > > Package: libvirt-bin
> > > > Version: 0.6.2-1
> > > > Severity: important
> > > > 
> > > > '/etc/init.d/libvirt-bin start' actually works but exits with non-zero status.
> > > > The output looks odd, as well: it prints both "OK" *and* "fail":
> > > > 
> > > > # /etc/init.d/libvirt-bin start
> > > >  * Starting libvirt management daemon libvirtd                           [ OK ] 
> > > >                                                                          [fail]
> > > > 
> > > > that's how it looks
> > > Please do some dash -x debugging. It looks sane here:
> > > 
> > > $ sudo /etc/init.d/libvirt-bin start
> > > Starting libvirt management daemon: libvirtd.
> > > $ echo $?
> > > 0
> > 
> > Here you go.  Looks like something wrong with splashy integration.
> Seems as log_end_msg 0 doesn't return 0 and we end up calling
> log_end_msg 1 therefore. Does the attached version do any better? If so
> it's a problem with the splashy integration.

No change.  Can you help with filing the splashy bug?  I don't understand
what's not working.


> Cheers,
>  -- Guido

> #! /bin/sh
> #
> # Init skript for libvirtd
> #
> # (c) 2007 Guido Guenther <agx at sigxcpu.org>
> # based on the skeletons that comes with dh_make
> #
> ### BEGIN INIT INFO
> # Provides:          libvirtd
> # Required-Start:    $network $local_fs
> # Required-Stop:     
> # Should-Start:      hal
> # Default-Start:     2 3 4 5
> # Default-Stop:      0 1 6
> # Short-Description: libvirt management daemon
> ### END INIT INFO
> 
> PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
> DAEMON=/usr/sbin/libvirtd
> NAME=libvirtd
> DESC="libvirt management daemon"
> 
> test -x $DAEMON || exit 0
> . /lib/lsb/init-functions
> 
> PIDFILE=/var/run/$NAME.pid
> DODTIME=1                   # Time to wait for the server to die, in seconds
> 
> # Include libvirtd defaults if available
> if [ -f /etc/default/libvirt-bin ] ; then
> 	. /etc/default/libvirt-bin
> fi
> 
> set -e
> 
> check_start_libvirtd_option() {
>   if [ ! "$start_libvirtd" = "yes" ]; then
>     log_warning_msg "Not starting libvirt management daemon libvirtd, disabled via /etc/default/libvirt-bin"
>     return 1
>   else
>     return 0
>   fi
> }
> 
> running_pid()
> {
>     # Check if a given process pid's cmdline matches a given name
>     pid=$1
>     name=$2
>     [ -z "$pid" ] && return 1 
>     [ ! -d /proc/$pid ] &&  return 1
>     cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
>     # Is this the expected child?
>     [ "$cmd" != "$name" ] &&  return 1
>     return 0
> }
> 
> running()
> {
> # Check if the process is running looking at /proc
> # (works for all users)
>     # No pidfile, probably no daemon present
>     [ ! -f "$PIDFILE" ] && return 1
>     # Obtain the pid and check it against the binary name
>     pid=`cat $PIDFILE`
>     running_pid $pid $DAEMON || return 1
>     return 0
> }
> 
> force_stop() {
> # Forcefully kill the process
>     [ ! -f "$PIDFILE" ] && return
>     if running ; then
>         kill -15 $pid
>         # Is it really dead?
>         [ -n "$DODTIME" ] && sleep "$DODTIME"s
>         if running ; then
>             kill -9 $pid
>             [ -n "$DODTIME" ] && sleep "$DODTIME"s
>             if running ; then
>                 echo "Cannot kill $LABEL (pid=$pid)!"
>                 exit 1
>             fi
>         fi
>     fi
>     rm -f $PIDFILE
>     return 0
> }
> 
> mkdir -p /var/run/libvirt
> case "$1" in
>   start)
> 	if check_start_libvirtd_option; then
> 		log_daemon_msg "Starting $DESC" "$NAME"
>         	if running ;  then
>             		log_progress_msg "already running"
>             		log_end_msg 0
>             		exit 0
>         	fi
> 		rm -f /var/run/libvirtd.pid
> 		start-stop-daemon --start --quiet --pidfile $PIDFILE \
> 			--exec $DAEMON -- $libvirtd_opts
> 		if running; then
> 			log_end_msg 0
> 		else
> 			log_end_msg 1
> 		fi
> 	fi
> 	;;
>   stop)
> 	log_daemon_msg "Stopping $DESC" "$NAME"
>        	if ! running ;  then
>            	log_progress_msg "not running"
>             	log_end_msg 0
>             	exit 0
>        	fi
> 	start-stop-daemon --stop --quiet --pidfile $PIDFILE \
> 		--exec $DAEMON
> 	log_end_msg 0
> 	;;
>   force-stop)
> 	log_daemon_msg "Forcefully stopping $DESC" "$NAME"
>         force_stop
>         ! running && log_end_msg 0 || log_end_msg 1
> 	;;
>   restart)
> 	if check_start_libvirtd_option; then
> 		log_daemon_msg "Restarting $DESC" "$DAEMON"
> 		start-stop-daemon --oknodo --stop --quiet --pidfile \
> 			/var/run/$NAME.pid --exec $DAEMON
> 		[ -n "$DODTIME" ] && sleep $DODTIME
> 		start-stop-daemon --start --quiet --pidfile \
> 			/var/run/$NAME.pid --exec $DAEMON -- $libvirtd_opts
> 		running && log_end_msg 0 || log_end_msg 1
> 	fi
> 	;;
>   reload|force-reload)
>   	if running; then
>             log_daemon_msg "Reloading configuration of $DESC" "$NAME"
> 	    start-stop-daemon --stop --signal 1 --quiet --pidfile \
> 	             /var/run/$NAME.pid --exec $DAEMON
> 	    log_end_msg 0
> 	else
>             log_warning_msg "libvirtd not running, doing nothing."
> 	fi
> 	;;
>   status)
>         log_daemon_msg "Checking status of $DESC" "$NAME"
>         if running ;  then
>             log_progress_msg "running"
>             log_end_msg 0
>         else
>             log_progress_msg "not running"
>             log_end_msg 1
> 	fi
>     ;;
>   *)
> 	N=/etc/init.d/libvirt-bin
> 	echo "Usage: $N {start|stop|restart|reload|force-reload|status|force-stop}" >&2
> 	exit 1
> 	;;
> esac
> 
> exit 0


-- 
Chip Salzenberg





More information about the Pkg-libvirt-maintainers mailing list