On Fri, 2014-05-09 at 16:32 -0400, Stéphane Graber wrote: > Mike, it'd be great if you could indeed resend the final patchset (or > path if you just fold them all into one).
> I'll try to prepare the lxc-autostart change too so we don't need to > call it twice and will then push that after your change (whenever I get > it working), it's easier to do this all in two steps. As yea seek so shall yea find... All folded into one. -- Rollup of autostart patches for systemd, sysvinit, and upstart. This is a rollup of 4 earlier patches patching the systemd init to use the sysvinit script, adding an onboot group to the boot set, updating upstart to include the onboot group, and adding documentation for the special boot groups. From the individual patches: From: Dwight Engen <dwight.en...@oracle.com> Reported-by: CDR <vene...@gmail.com> Signed-off-by: Dwight Engen <dwight.en...@oracle.com> - reuse the sysvinit script to ensure that if the lxc is configured to use a bridge setup by libvirt, the bridge will be available before starting the container - made the sysvinit script check for the existance of ifconfig, and fall back to ip link list if available - made the lxc service also dependant on the network.target - autoconfized the paths in the service file and sysvinit script - v2: rename script lxc-autostart to lxc-autostart-helper to avoid confusion From: Michael H. Warfield <m...@wittsend.com> Signed-off-by: Michael H. Warfield <m...@wittsend.com> - This adds a non-null group (onboot) to the sysvinit startup script for autobooting containers. This allows for containers which are in other groups to be included in the autoboot process. This script is used by both the sysvinit systems and the systemd systems. From: Michael H. Warfield <m...@wittsend.com> Signed-off-by: Michael H. Warfield <m...@wittsend.com> - Add the feature to the Upstart init script to boot the "onboot" group dependent on the start.auto = 1 flag. This brings the the Upstart behavior into congruence with the sysvinit script for SysV Init and Systemd. From: Michael H. Warfield <m...@wittsend.com> Signed-off-by: Michael H. Warfield <m...@wittsend.com> Added sections to lxc-autostart and lxc.container.config to document the behavior of the LXC service at host system boot time with regards to the lxc.group and lxc.start.auto parameters. Signed-off-by: Michael H. Warfield <m...@wittsend.com> --- .gitignore | 3 ++ config/init/systemd/Makefile.am | 14 ++++++- config/init/systemd/lxc.service | 17 -------- config/init/systemd/lxc.service.in | 17 ++++++++ config/init/sysvinit/lxc | 66 ----------------------------- config/init/sysvinit/lxc.in | 85 ++++++++++++++++++++++++++++++++++++++ config/init/upstart/lxc.conf | 7 ++++ configure.ac | 2 + doc/lxc-autostart.sgml.in | 30 ++++++++++++++ doc/lxc.container.conf.sgml.in | 23 +++++++++++ lxc.spec.in | 1 + 11 files changed, 180 insertions(+), 85 deletions(-) delete mode 100644 config/init/systemd/lxc.service create mode 100644 config/init/systemd/lxc.service.in delete mode 100755 config/init/sysvinit/lxc create mode 100644 config/init/sysvinit/lxc.in diff --git a/.gitignore b/.gitignore index 8145f81..2b478cd 100644 --- a/.gitignore +++ b/.gitignore @@ -111,6 +111,9 @@ config/missing config/libtool.m4 config/lt*.m4 config/bash/lxc +config/init/systemd/lxc-autostart-helper +config/init/systemd/lxc.service +config/init/sysvinit/lxc doc/*.1 doc/*.5 diff --git a/config/init/systemd/Makefile.am b/config/init/systemd/Makefile.am index de5ee50..fc374c5 100644 --- a/config/init/systemd/Makefile.am +++ b/config/init/systemd/Makefile.am @@ -5,7 +5,17 @@ EXTRA_DIST = \ if INIT_SCRIPT_SYSTEMD SYSTEMD_UNIT_DIR = $(prefix)/lib/systemd/system -install-systemd: lxc.service lxc-devsetup +lxc-autostart-helper: ../sysvinit/lxc.in $(top_builddir)/config.status + $(AM_V_GEN)sed \ + -e 's|[@]SYSCONFDIR[@]|$(sysconfdir)|g' \ + -e 's|[@]LOCALSTATEDIR[@]|$(localstatedir)|g' \ + -e 's|[@]BINDIR[@]|$(bindir)|g' \ + < $< > $@-t && \ + chmod a+x $@-t && \ + mv $@-t $@ +BUILT_SOURCES = lxc-autostart-helper + +install-systemd: lxc.service lxc-devsetup lxc-autostart-helper $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR) $(INSTALL_DATA) lxc.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/ @@ -13,7 +23,7 @@ uninstall-systemd: rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/lxc.service rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR) || : -pkglibexec_SCRIPTS = lxc-devsetup +pkglibexec_SCRIPTS = lxc-devsetup lxc-autostart-helper install-data-local: install-systemd uninstall-local: uninstall-systemd diff --git a/config/init/systemd/lxc.service b/config/init/systemd/lxc.service deleted file mode 100644 index aa20b91..0000000 --- a/config/init/systemd/lxc.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=LXC Container Initialization and Autoboot Code -After=syslog.target - -[Service] -Type=oneshot -RemainAfterExit=yes -ExecStartPre=/usr/libexec/lxc/lxc-devsetup -ExecStart=/usr/libexec/lxc/lxc-startup start -ExecStop=/usr/libexec/lxc/lxc-startup stop -# Environment=BOOTUP=serial -# Environment=CONSOLETYPE=serial -StandardOutput=syslog -StandardError=syslog - -[Install] -WantedBy=multi-user.target 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 b/config/init/sysvinit/lxc deleted file mode 100755 index 5ab3c46..0000000 --- a/config/init/sysvinit/lxc +++ /dev/null @@ -1,66 +0,0 @@ -#!/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 - -# Source function library. -. /etc/init.d/functions - -# Check for needed utility program -[ -x /usr/bin/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 /etc/lxc/default.conf ] || { return 0; } - - BRNAME=`grep '^[ ]*lxc.network.link' /etc/lxc/default.conf | sed 's/^.*=[ ]*//'` - if [ -z "$BRNAME" ]; then - return 0 - fi - - for try in `seq 1 30`; do - ifconfig -a |grep "^$BRNAME" >/dev/null 2>&1 - if [ $? = 0 ]; then - return - fi - sleep 1 - done -} - -# See how we were called. -case "$1" in - start) - [ ! -f /var/lock/subsys/lxc ] || { exit 0; } - - # Start containers - wait_for_bridge - action $"Starting LXC containers: " /usr/bin/lxc-autostart - touch /var/lock/subsys/lxc - ;; - stop) - action $"Stopping LXC containers: " /usr/bin/lxc-autostart -a -A -s - rm -f /var/lock/subsys/lxc - ;; - restart|reload|force-reload) - $0 stop - $0 start - ;; - *) - echo $"Usage: $0 {start|stop|restart|reload|force-reload}" - exit 2 -esac -exit $? diff --git a/config/init/sysvinit/lxc.in b/config/init/sysvinit/lxc.in new file mode 100644 index 0000000..0b802af --- /dev/null +++ b/config/init/sysvinit/lxc.in @@ -0,0 +1,85 @@ +#!/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@" + +# Source function library. +test ! -r "$sysconfdir"/rc.d/init.d/functions || + . "$sysconfdir"/rc.d/init.d/functions + +# 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; } + + # Start containers + wait_for_bridge + # Start autoboot containers first. + action $"Starting LXC autoboot containers: " /usr/bin/lxc-autostart -g onboot + # Start NULL group containers last. + action $"Starting LXC containers: " "$bindir"/lxc-autostart + touch "$localstatedir"/lock/subsys/lxc + ;; + stop) + action $"Stopping LXC containers: " "$bindir"/lxc-autostart -a -A -s + 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 $? diff --git a/config/init/upstart/lxc.conf b/config/init/upstart/lxc.conf index d5131ad..3578a37 100644 --- a/config/init/upstart/lxc.conf +++ b/config/init/upstart/lxc.conf @@ -20,6 +20,13 @@ pre-start script [ "x$LXC_AUTO" = "xtrue" ] || exit 0 + # Process the "onboot" group first. + lxc-autostart -L -g onboot | while read line; do + set -- $line + (start lxc-instance NAME=$1 && sleep $2) || true + done + + # Now process the <NULL> group. lxc-autostart -L | while read line; do set -- $line (start lxc-instance NAME=$1 && sleep $2) || true diff --git a/configure.ac b/configure.ac index 8865bc8..a7fce11 100644 --- a/configure.ac +++ b/configure.ac @@ -573,7 +573,9 @@ AC_CONFIG_FILES([ config/bash/lxc config/init/Makefile config/init/sysvinit/Makefile + config/init/sysvinit/lxc config/init/systemd/Makefile + config/init/systemd/lxc.service config/init/upstart/Makefile config/etc/Makefile config/templates/Makefile diff --git a/doc/lxc-autostart.sgml.in b/doc/lxc-autostart.sgml.in index 3d423dd..116d7bc 100644 --- a/doc/lxc-autostart.sgml.in +++ b/doc/lxc-autostart.sgml.in @@ -185,6 +185,36 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA </variablelist> </refsect1> + <refsect1> + <title>Autostart and System Boot</title> + + <para> + The <command>lxc-autostart</command> command is used as part of the + LXC system service, when enabled to run on host system at bootup and at + shutdown. It's used to select which containers to start in what order + and how much to delay between each startup when the host system boots. + </para> + + <para> + Each container can be part of any number of groups or no group at all. + Two groups are special. One is the NULL group, i.e. the container does + not belong to any group. The other group is the "onboot" group. + </para> + + <para> + When the system boots with the LXC service enabled, it will first + attempt to boot any containers with lxc.start.auto == 1 that is a member + of the "onboot" group. The startup will be in order of lxc.start.order. + If an lxc.start.delay has been specified, that delay will be honored + before attempting to start the next container to give the current + container time to begin initialization and reduce overloading the host + system. After starting the members of the "onboot" group, the LXC system + will proceed to boot containers with lxc.start.auto == 1 which are not + members of any group (the NULL group) and proceed as with the onboot + group. + </para> + </refsect1> + &seealso; <refsect1> diff --git a/doc/lxc.container.conf.sgml.in b/doc/lxc.container.conf.sgml.in index 6e96889..bbae448 100644 --- a/doc/lxc.container.conf.sgml.in +++ b/doc/lxc.container.conf.sgml.in @@ -1464,6 +1464,29 @@ mknod errno 0 </varlistentry> </variablelist> </refsect2> + + <refsect2> + <title>Autostart and System Boot</title> + <para> + Each container can be part of any number of groups or no group at all. + Two groups are special. One is the NULL group, i.e. the container does + not belong to any group. The other group is the "onboot" group. + </para> + + <para> + When the system boots with the LXC service enabled, it will first + attempt to boot any containers with lxc.start.auto == 1 that is a member + of the "onboot" group. The startup will be in order of lxc.start.order. + If an lxc.start.delay has been specified, that delay will be honored + before attempting to start the next container to give the current + container time to begin initialization and reduce overloading the host + system. After starting the members of the "onboot" group, the LXC system + will proceed to boot containers with lxc.start.auto == 1 which are not + members of any group (the NULL group) and proceed as with the onboot + group. + </para> + + </refsect2> </refsect1> <refsect1> diff --git a/lxc.spec.in b/lxc.spec.in index 2717c83..57912a1 100644 --- a/lxc.spec.in +++ b/lxc.spec.in @@ -154,6 +154,7 @@ rm -rf %{buildroot} %attr(4111,root,root) %{_libexecdir}/%{name}/lxc-user-nic %if %{with_systemd} %attr(555,root,root) %{_libexecdir}/%{name}/lxc-devsetup +%attr(555,root,root) %{_libexecdir}/%{name}/lxc-autostart-helper %endif %if %{with_python} -- 1.9.0 -- Michael H. Warfield (AI4NB) | (770) 978-7061 | m...@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!
signature.asc
Description: This is a digitally signed message part
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel