[lxc-devel] [PATCH] v2 Refactoring lxc-autostart boot process and group handling.

Stéphane Graber stgraber at ubuntu.com
Sun May 25 12:51:06 UTC 2014


On Tue, May 20, 2014 at 10:26:13AM -0400, Michael H. Warfield wrote:
> On Tue, 2014-05-20 at 11:56 +0200, Stéphane Graber wrote:
> > On Mon, May 19, 2014 at 03:57:26PM -0400, Michael H. Warfield wrote:
> > > On Mon, 2014-05-19 at 17:22 +0200, Stéphane Graber wrote:
> > > > On Fri, May 16, 2014 at 02:07:31PM -0400, Michael H. Warfield wrote:
> > > > > Before anyone else spots it...  I did miss one spot where I failed to
> > > > > toss a list (cmd_group_lists) on exit.  So, some memory checkers will
> > > > > complain about orphaned memory or leaks (even though it's on exit).
> > > > > I'll fix that and add some doco once this has been reviewed further.
> > > 
> > > > Hi,
> > > 
> > > > I took a quick look at the proposed patch and don't have any issue with
> > > > it, so please resend with those updates done and I'll do some proper
> > > > testing and apply it.
> > > 
> > > > Thanks!
> > > 
> > > Ok...  Ask and yea shall receive.  Version 2 of the refactoring
> > > autostart patch with Dwight's patch and my other patches adding now the
> > > fix for the minor cleanup gotcha I spotted plus I enhanced the
> > > documentation in lxc-autostart.sgml.in for group handling.
> > > 
> > > While this was going on, I also pinged Dwight about parameterizing the
> > > bootup groups and other options in the startup scripts.  Consequently,
> > > with his concurrence, I've added some boot time configuration options to
> > > the sysvinit/systemd init script and the upstart configuration file for
> > > BOOTGROUPS, SHUTDOWNDELAY, OPTIONS, and STOPOPTS.  For the former
> > > (Oracle, RHEL Fedora, CentOS, et al), it's in /etc/sysconfig/lxc and the
> > > later (Ubuntu, Debian, etc) in /etc/default/lxc.  I've tested the
> > > sysvinit/systemd init script.  Someone needs to verify the upstart
> > > changes.
> > > 
> > > Attached below the jump.
> > > 
> > > Thanks!
> > > 
> > > Regards,
> > > Mike
> > 
> >  ==> Executing: "./autogen.sh" in /build/git/
> > + test -d autom4te.cache
> > + aclocal -I config
> > + autoheader
> > + autoconf
> > + automake --add-missing --copy
> > configure.ac:31: installing 'config/compile'
> > configure.ac:30: installing 'config/config.guess'
> > configure.ac:30: installing 'config/config.sub'
> > configure.ac:29: installing 'config/install-sh'
> > configure.ac:29: installing 'config/missing'
> > configure.ac:565: error: required file 'config/init/systemd/lxc.service.in' not found
> > configure.ac:565: error: required file 'config/init/sysvinit/lxc.in' not found
> > src/lua-lxc/Makefile.am: installing 'config/depcomp'
> > + exit 1
> >  ==> Cleaning up the environment
> >  ==> Exitting with status FAIL
> 
> > Seems like "make dist" is missing a bunch of files...
> 
> Crud.  Missed them when I did the add and commit.  Redoing.  Sorry about
> that...
> 
> Below the jump...
> 
> Regards,
> Mike

lxc-test-autostart is failing on all arches:

FAIL: lxc-tests: /usr/bin/lxc-test-autostart
---
Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created an Ubuntu container (release=trusty, arch=amd64, variant=default)
The default username/password is: ubuntu / ubuntu
To gain root privileges, please use sudo.

*** Error in `lxc-autostart': double free or corruption (fasttop): 0x00000000008df5a0 ***
Aborted (core dumped)
*** Error in `lxc-autostart': double free or corruption (fasttop): 0x0000000001dfa5a0 ***
Aborted (core dumped)
*** Error in `lxc-autostart': double free or corruption (fasttop): 0x0000000001835c80 ***
Aborted (core dumped)
*** Error in `lxc-autostart': double free or corruption (fasttop): 0x0000000002118c80 ***
Aborted (core dumped)
FAIL
---


> -- 
> Michael H. Warfield (AI4NB) | (770) 978-7061 |  mhw at WittsEnd.com
>    /\/\|=mhw=|\/\/          | (678) 463-0932 |  http://www.wittsend.com/mhw/
>    NIC whois: MHW9          | An optimist believes we live in the best of all
>  PGP Key: 0x674627FF        | possible worlds.  A pessimist is sure of it!
> 
> -- 
> 
> Added missing files...
> 
> Accidentally overlooked two new files when building patch set.
> 
> Signed-off-by: Michael H. Warfield <mhw at WittsEnd.com>
> ---
>  config/init/systemd/lxc.service.in |  17 +++++
>  config/init/sysvinit/lxc.in        | 124 +++++++++++++++++++++++++++++++++++++
>  2 files changed, 141 insertions(+)
>  create mode 100644 config/init/systemd/lxc.service.in
>  create mode 100644 config/init/sysvinit/lxc.in
> 
> diff --git a/config/init/systemd/lxc.service.in b/config/init/systemd/lxc.service.in
> new file mode 100644
> index 0000000..5f155b6
> --- /dev/null
> +++ b/config/init/systemd/lxc.service.in
> @@ -0,0 +1,17 @@
> +[Unit]
> +Description=LXC Container Initialization and Autoboot Code
> +After=syslog.target network.target
> +
> +[Service]
> +Type=oneshot
> +RemainAfterExit=yes
> +ExecStartPre=@libexecdir@/lxc/lxc-devsetup
> +ExecStart=@libexecdir@/lxc/lxc-autostart-helper start
> +ExecStop=@libexecdir@/lxc/lxc-autostart-helper stop
> +# Environment=BOOTUP=serial
> +# Environment=CONSOLETYPE=serial
> +StandardOutput=syslog
> +StandardError=syslog
> +
> +[Install]
> +WantedBy=multi-user.target
> diff --git a/config/init/sysvinit/lxc.in b/config/init/sysvinit/lxc.in
> new file mode 100644
> index 0000000..1a876a2
> --- /dev/null
> +++ b/config/init/sysvinit/lxc.in
> @@ -0,0 +1,124 @@
> +#!/bin/sh
> +#
> +# lxc Start/Stop LXC autoboot containers
> +#
> +# chkconfig: 345 99 01
> +# description: Starts/Stops all LXC containers configured for autostart.
> +#
> +### BEGIN INIT INFO
> +# Provides: lxc
> +# Default-Start: 3 4 5
> +# Default-Stop: 0 1 6
> +# Short-Description: Bring up/down LXC autostart containers
> +# Description: Bring up/down LXC autostart containers
> +### END INIT INFO
> +
> +sysconfdir="@SYSCONFDIR@"
> +bindir="@BINDIR@"
> +localstatedir="@LOCALSTATEDIR@"
> +
> +# These can be overridden in @SYSCONFDIR@/sysconfig/lxc
> +
> +# BOOTGROUPS - What groups should start on bootup?
> +#	Comma separated list of groups.
> +#	Leading comma, trailing comma or embedded double
> +#	comma indicates when the NULL group should be run.
> +# Example (default): boot the onboot group first then the NULL group
> +BOOTGROUPS="onboot,"
> +
> +# SHUTDOWNDELAY - Wait time for a container to shut down.
> +#	ner shutdown can result in lengthy system
> +#	shutdown times.  Even 5 seconds per container can be
> +#	too long.
> +SHUTDOWNDELAY=5
> +
> +# OPTIONS can be used for anything else.
> +#	If you want to boot everything then
> +#	options can be "-a" or "-a -A".
> +OPTIONS=
> +
> +# STOPOPTS are stop options.  The can be used for anything else to stop.
> +#	If you want to kill containers fast, use -k
> +STOPOPTS="-a -A -s"
> +
> +# Source function library.
> +test ! -r "$sysconfdir"/rc.d/init.d/functions ||
> +        . "$sysconfdir"/rc.d/init.d/functions
> +
> +# Source any configurable options
> +test ! -r "$sysconfdir"/sysconfig/lxc ||
> +        . "$sysconfdir"/sysconfig/lxc
> +
> +# Check for needed utility program
> +[ -x "$bindir"/lxc-autostart ] || exit 1
> +
> +# If libvirtd is providing the bridge, it might not be
> +# immediately available, so wait a bit for it before starting
> +# up the containers or else any that use the bridge will fail
> +# to start
> +wait_for_bridge()
> +{
> +    [ -f "$sysconfdir"/lxc/default.conf ] || { return 0; }
> +
> +    which ifconfig >/dev/null 2>&1
> +    if [ $? = 0 ]; then
> +        cmd="ifconfig -a"
> +    else
> +        which ip >/dev/null 2>&1
> +        if [ $? = 0 ]; then
> +            cmd="ip link list"
> +        fi
> +    fi
> +    [ -n cmd ] || { return 0; }
> +
> +    BRNAME=`grep '^[ 	]*lxc.network.link' "$sysconfdir"/lxc/default.conf | sed 's/^.*=[ 	]*//'`
> +    if [ -z "$BRNAME" ]; then
> +	return 0
> +    fi
> +
> +    for try in `seq 1 30`; do
> +	eval $cmd |grep "^$BRNAME" >/dev/null 2>&1
> +	if [ $? = 0 ]; then
> +	    return
> +	fi
> +	sleep 1
> +    done
> +}
> +
> +# See how we were called.
> +case "$1" in
> +  start)
> +	[ ! -f "$localstatedir"/lock/subsys/lxc ] || { exit 0; }
> +
> +	if [ -n "$BOOTGROUPS" ]
> +	then
> +		BOOTGROUPS="-g $BOOTGROUPS"
> +	fi
> +
> +	# Start containers
> +	wait_for_bridge
> +	# Start autoboot containers first then the NULL group "onboot,".
> +	action $"Starting LXC autoboot containers: " /usr/bin/lxc-autostart $OPTIONS $BOOTGROUPS
> +	touch "$localstatedir"/lock/subsys/lxc
> +	;;
> +  stop)
> +	if [ -n "$SHUTDOWNDELAY" ]
> +	then
> +		SHUTDOWNDELAY="-t $SHUTDOWNDELAY"
> +	fi
> +
> +	# The stop is serialized and can take excessive time.  We need to avoid
> +	# delaying the system shutdown / reboot as much as we can since it's not
> +	# parallelized...  Even 5 second timout may be too long.
> +	action $"Stopping LXC containers: " "$bindir"/lxc-autostart $STOPOPTS $SHUTDOWNDELAY
> +	rm -f "$localstatedir"/lock/subsys/lxc
> +	;;
> +  restart|reload|force-reload)
> +	$0 stop
> +	$0 start
> +	;;
> +  *)
> +	echo $"Usage: $0 {start|stop|restart|reload|force-reload}"
> +	exit 2
> +esac
> +exit $?
> -- 
> 1.9.0
> 
> 



> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140525/66a14b84/attachment.sig>


More information about the lxc-devel mailing list