Re: [libvirt] [PATCH] RFC: experimental libvirtd upstart job

2011-02-23 Thread Serge E. Hallyn
Quoting Daniel P. Berrange (berra...@redhat.com):
 On Fri, Feb 18, 2011 at 03:48:29PM -0600, Serge E. Hallyn wrote:
  Quoting ape...@gmail.com (ape...@gmail.com):
   From: Alan Pevec ape...@redhat.com
  =
  # libvirt-cgred-wait
  start on starting libvirt-bin
  stop on started cgred or stopped cgred
  
  task
  normal exit 2
  script
status cgred | grep -q start/running  exit 0
start cgred || true
sleep 3600
  end script
  =
 
 FYI, libvirt has no need for the  cgred to be present / running, and

Absolutely.  And so the above job ships with the libcgroup package,
not with libvirt.

 indeed if you're not careful with the rules you create for cgred it
 could really mess things up by moving VM proceses to a different
 cgroup behind libvirt's back.

Yes.  And with the default rules, if libcgroup is installed *and*
if libvirt does not wait until libcgroup is configured at boot, then
VMs won't start up.

So when just libvirt is installed, the above job is not needed (and
not installed on the machine).  When just libcgroup is installed, the
above job will be installed, but since it starts on 'starting libvirt',
it won't ever run if libvirt is not installed.

 For cgroups integration, libvirt merely requires that something has
 mounted the various cgroups controllers. The can be mounted in any
 location, and with any combination of controllers. libvirtd will
 detect what cgroups it is located in at startup, and create its
 own cgroups below these points in the hierarchy.

Yup, I definately don't want to suggest that there is anything wrong
with what libvirt does.

 On Fedora we do this with the 'cgconfig' init script which more or
 less just runs  'cgconfigparse -l /etc/cgconfig.conf' to mount the
 bits

Right, and the above job just makes sure that the above has finished
before libvirt starts.

thanks,
-serge

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] RFC: experimental libvirtd upstart job

2011-02-21 Thread Daniel P. Berrange
On Fri, Feb 18, 2011 at 03:48:29PM -0600, Serge E. Hallyn wrote:
 Quoting ape...@gmail.com (ape...@gmail.com):
  From: Alan Pevec ape...@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
  ---
   daemon/Makefile.am  |1 +
   daemon/libvirtd.upstart |   47 
  +++
   libvirt.spec.in |1 +
   3 files changed, 49 insertions(+), 0 deletions(-)
   create mode 100644 daemon/libvirtd.upstart
  
  diff --git a/daemon/Makefile.am b/daemon/Makefile.am
  index cdf0f75..a4ebcf8 100644
  --- a/daemon/Makefile.am
  +++ b/daemon/Makefile.am
  @@ -27,6 +27,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 000..40d5fa3
  --- /dev/null
  +++ b/daemon/libvirtd.upstart
  @@ -0,0 +1,47 @@
  +# 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 [016]
  +respawn
  +# default rate limit is 10x/5s
  +#respawn limit 10 5
  +
  +# DAEMON_COREFILE_LIMIT in /etc/sysconfig/libvirtd doesn't have effect
  +# must set resource limits here
  +#limit core unlimited unlimited
  +
  +# documented http://upstart.ubuntu.com/wiki/Stanzas#pid
  +# but not accepted by upstart-0.6.5
  +#pid file /var/run/libvirtd.pid
  +
  +env PIDFILE=/var/run/libvirtd.pid
  +
  +script
  +   LIBVIRTD_CONFIG=
  +   LIBVIRTD_ARGS=
  +   KRB5_KTNAME=/etc/libvirt/krb5.tab
  +   
  +   test -f /etc/sysconfig/libvirtd  . /etc/sysconfig/libvirtd
  +   
  +   export QEMU_AUDIO_DRV
  +   export SDL_AUDIODRIVER
  +   
  +   LIBVIRTD_CONFIG_ARGS=
  +   if [ -n $LIBVIRTD_CONFIG ]
  +   then
  +   LIBVIRTD_CONFIG_ARGS=--config $LIBVIRTD_CONFIG
  +   else
  +   true
  +   fi
  +   
  +   mkdir -p /var/cache/libvirt
  +   rm -rf /var/cache/libvirt/*
  +   KRB5_KTNAME=$KRB5_KTNAME /usr/sbin/libvirtd $LIBVIRTD_CONFIG_ARGS 
  $LIBVIRTD_ARGS
  +end script
  +
  +post-stop script
  +   rm -f $PIDFILE
  +   rm -rf /var/cache/libvirt/*
  +end script
 
 Hi,
 
 If you're using upstart, then why use your own pidfile? FWIW, attached is
 the upstart script used in Ubuntu:
 
 =
 description libvirt daemon
 author Dustin Kirkland kirkl...@canonical.com
 
 start on runlevel [2345]
 stop on runlevel [!2345]
 
 expect daemon
 respawn
 
 env libvirtd_opts=-d
 env start_libvirtd=yes
 pre-start script
   [ -r /etc/default/libvirt-bin ]  . /etc/default/libvirt-bin
   [ ! x$start_libvirtd = xyes ]  { stop; exit 0; }
   mkdir -p /var/run/libvirt
   # Clean up a pidfile that might be left around
   rm -f /var/run/libvirtd.pid
 end script
 
 # If you used to set $libvirtd_opts in /etc/default/libvirt-bin,
 # change the 'exec' line here instead.
 exec /usr/sbin/libvirtd $libvirtd_opts
 =
 
 In order to play nicely with libcgroup, we're also testing
 the following job to ship with libcgroup:
 
 =
 # libvirt-cgred-wait
 start on starting libvirt-bin
 stop on started cgred or stopped cgred
 
 task
 normal exit 2
 script
   status cgred | grep -q start/running  exit 0
   start cgred || true
   sleep 3600
 end script
 =

FYI, libvirt has no need for the  cgred to be present / running, and
indeed if you're not careful with the rules you create for cgred it
could really mess things up by moving VM proceses to a different
cgroup behind libvirt's back.

For cgroups integration, libvirt merely requires that something has
mounted the various cgroups controllers. The can be mounted in any
location, and with any combination of controllers. libvirtd will
detect what cgroups it is located in at startup, and create its
own cgroups below these points in the hierarchy.

On Fedora we do this with the 'cgconfig' init script which more or
less just runs  'cgconfigparse -l /etc/cgconfig.conf' to mount the
bits

Regards,
Daniel
-- 
|: http://berrange.com  -o-   

Re: [libvirt] [PATCH] RFC: experimental libvirtd upstart job

2011-02-18 Thread Serge E. Hallyn
Quoting ape...@gmail.com (ape...@gmail.com):
 From: Alan Pevec ape...@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
 ---
  daemon/Makefile.am  |1 +
  daemon/libvirtd.upstart |   47 
 +++
  libvirt.spec.in |1 +
  3 files changed, 49 insertions(+), 0 deletions(-)
  create mode 100644 daemon/libvirtd.upstart
 
 diff --git a/daemon/Makefile.am b/daemon/Makefile.am
 index cdf0f75..a4ebcf8 100644
 --- a/daemon/Makefile.am
 +++ b/daemon/Makefile.am
 @@ -27,6 +27,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 000..40d5fa3
 --- /dev/null
 +++ b/daemon/libvirtd.upstart
 @@ -0,0 +1,47 @@
 +# 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 [016]
 +respawn
 +# default rate limit is 10x/5s
 +#respawn limit 10 5
 +
 +# DAEMON_COREFILE_LIMIT in /etc/sysconfig/libvirtd doesn't have effect
 +# must set resource limits here
 +#limit core unlimited unlimited
 +
 +# documented http://upstart.ubuntu.com/wiki/Stanzas#pid
 +# but not accepted by upstart-0.6.5
 +#pid file /var/run/libvirtd.pid
 +
 +env PIDFILE=/var/run/libvirtd.pid
 +
 +script
 + LIBVIRTD_CONFIG=
 + LIBVIRTD_ARGS=
 + KRB5_KTNAME=/etc/libvirt/krb5.tab
 + 
 + test -f /etc/sysconfig/libvirtd  . /etc/sysconfig/libvirtd
 + 
 + export QEMU_AUDIO_DRV
 + export SDL_AUDIODRIVER
 + 
 + LIBVIRTD_CONFIG_ARGS=
 + if [ -n $LIBVIRTD_CONFIG ]
 + then
 + LIBVIRTD_CONFIG_ARGS=--config $LIBVIRTD_CONFIG
 + else
 + true
 + fi
 + 
 + mkdir -p /var/cache/libvirt
 + rm -rf /var/cache/libvirt/*
 + KRB5_KTNAME=$KRB5_KTNAME /usr/sbin/libvirtd $LIBVIRTD_CONFIG_ARGS 
 $LIBVIRTD_ARGS
 +end script
 +
 +post-stop script
 + rm -f $PIDFILE
 + rm -rf /var/cache/libvirt/*
 +end script

Hi,

If you're using upstart, then why use your own pidfile? FWIW, attached is
the upstart script used in Ubuntu:

=
description libvirt daemon
author Dustin Kirkland kirkl...@canonical.com

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon
respawn

env libvirtd_opts=-d
env start_libvirtd=yes
pre-start script
[ -r /etc/default/libvirt-bin ]  . /etc/default/libvirt-bin
[ ! x$start_libvirtd = xyes ]  { stop; exit 0; }
mkdir -p /var/run/libvirt
# Clean up a pidfile that might be left around
rm -f /var/run/libvirtd.pid
end script

# If you used to set $libvirtd_opts in /etc/default/libvirt-bin,
# change the 'exec' line here instead.
exec /usr/sbin/libvirtd $libvirtd_opts
=

In order to play nicely with libcgroup, we're also testing
the following job to ship with libcgroup:

=
# libvirt-cgred-wait
start on starting libvirt-bin
stop on started cgred or stopped cgred

task
normal exit 2
script
  status cgred | grep -q start/running  exit 0
  start cgred || true
  sleep 3600
end script
=

thanks,
-serge

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list