[libvirt] [PATCH v2] Experimental libvirtd upstart job
Daniel P. Berrange
berrange at redhat.com
Mon Apr 18 12:55:34 UTC 2011
On Mon, Apr 18, 2011 at 11:49:17AM +0200, Jiri Denemark wrote:
> From: Alan Pevec <apevec at redhat.com>
>
> To install it, disable libvirtd sysv initscript:
> chkconfig libvirtd off
> service libvirtd stop
>
> and enable libvirtd upstart job:
> cp /usr/share/doc/libvirt-*/libvirtd.upstart \
> /etc/init/libvirtd.conf
> initctl reload-configuration
> initctl start libvirtd
>
> Test:
> initctl status libvirtd
> libvirtd start/running, process 3929
> killall -9 libvirtd
> initctl status libvirtd
> libvirtd start/running, process 4047
>
> I looked into the possibility to use the upstart script from Ubuntu or
> at least getting inspiration from it but that's not possible. "expect
> daemon" is a nice thing but it only works if the process is defined with
> exec stanza instead of script ... no script. Unfortunately, with exec
> stanza environment variables can only be set within upstart script
> (i.e., configuration in /etc/sysconfig/libvirtd can't work). Hence, we
> need to use script stanza, source sysconfig, and execute libvirtd
> without --daemon. For similar reasons we can't use limit stanza and need
> to handle DAEMON_COREFILE_LIMIT in job's script.
> ---
> Notes:
> Version 2:
> - I took Allan's script and modified it a bit
> - DAEMON_COREFILE_LIMIT from sysconfig works
> - PID file handling limited to just removing it
>
> daemon/Makefile.am | 1 +
> daemon/libvirtd.upstart | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> libvirt.spec.in | 1 +
> 3 files changed, 48 insertions(+), 0 deletions(-)
> create mode 100644 daemon/libvirtd.upstart
>
> diff --git a/daemon/Makefile.am b/daemon/Makefile.am
> index cacec1c..af71188 100644
> --- a/daemon/Makefile.am
> +++ b/daemon/Makefile.am
> @@ -26,6 +26,7 @@ EXTRA_DIST = \
> remote_generate_stubs.pl \
> libvirtd.conf \
> libvirtd.init.in \
> + libvirtd.upstart \
> libvirtd.policy-0 \
> libvirtd.policy-1 \
> libvirtd.sasl \
> diff --git a/daemon/libvirtd.upstart b/daemon/libvirtd.upstart
> new file mode 100644
> index 0000000..fd1d951
> --- /dev/null
> +++ b/daemon/libvirtd.upstart
> @@ -0,0 +1,46 @@
> +# libvirtd upstart job
> +#
> +# XXX wait for rc to get all dependent initscripts started
> +# from sysv libvirtd initscript: Required-Start: $network messagebus
> +start on stopped rc RUNLEVEL=[345]
> +stop on runlevel [!345]
> +
> +respawn
> +
> +script
> + LIBVIRTD_CONFIG=
> + LIBVIRTD_ARGS=
> + KRB5_KTNAME=/etc/libvirt/krb5.tab
> +
> + if [ -f /etc/sysconfig/libvirtd ]; then
> + . /etc/sysconfig/libvirtd
> + fi
> +
> + export QEMU_AUDIO_DRV
> + export SDL_AUDIODRIVER
> + export KRB5_KTNAME
> +
> + LIBVIRTD_CONFIG_ARGS=
> + if [ -n "$LIBVIRTD_CONFIG" ]; then
> + LIBVIRTD_CONFIG_ARGS="--config $LIBVIRTD_CONFIG"
> + fi
> +
> + # DAEMON_COREFILE_LIMIT from /etc/sysconfig/libvirtd is not handled
> + # automatically
> + if [ -n "$DAEMON_COREFILE_LIMIT" ]; then
> + ulimit -c "$DAEMON_COREFILE_LIMIT"
> + fi
> +
> + # Clean up a pidfile that might be left around
> + rm -f /var/run/libvirtd.pid
> +
> + mkdir -p /var/cache/libvirt
> + rm -rf /var/cache/libvirt/*
> +
> + exec /usr/sbin/libvirtd $LIBVIRTD_CONFIG_ARGS $LIBVIRTD_ARGS
> +end script
> +
> +post-stop script
> + rm -f $PIDFILE
> + rm -rf /var/cache/libvirt/*
> +end script
> diff --git a/libvirt.spec.in b/libvirt.spec.in
> index 4162fba..bf6b9df 100644
> --- a/libvirt.spec.in
> +++ b/libvirt.spec.in
> @@ -895,6 +895,7 @@ fi
> %{_sysconfdir}/libvirt/nwfilter/*.xml
>
> %{_sysconfdir}/rc.d/init.d/libvirtd
> +%doc daemon/libvirtd.upstart
> %config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
> %config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
> %if %{with_dtrace}
ACK.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list