- 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 Reported-by: CDR <[email protected]> Signed-off-by: Dwight Engen <[email protected]> --- v2: rename script lxc-autostart to lxc-autostart-helper to avoid confusion .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 | 82 ++++++++++++++++++++++++++++++++++++++ configure.ac | 2 + lxc.spec.in | 1 + 8 files changed, 117 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 100755 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 100755 index 0000000..b1a725c --- /dev/null +++ b/config/init/sysvinit/lxc.in @@ -0,0 +1,82 @@ +#!/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 + 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/configure.ac b/configure.ac index 474e354..6e0d8df 100644 --- a/configure.ac +++ b/configure.ac @@ -565,7 +565,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/lxc.spec.in b/lxc.spec.in index 5c9fdc8..c33e153 100644 --- a/lxc.spec.in +++ b/lxc.spec.in @@ -156,6 +156,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 _______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
