[Pkg-libvirt-maintainers] Bug#523712: libvirt-bin init script exits with failure status after starting
Guido Günther
agx at sigxcpu.org
Mon Apr 13 15:38:18 UTC 2009
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.
Cheers,
-- Guido
-------------- next part --------------
#! /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
More information about the Pkg-libvirt-maintainers
mailing list