On Thu, May 01, 2014 at 04:22:18PM -0400, Dwight Engen wrote: > On Thu, 1 May 2014 16:06:02 -0400 > Stéphane Graber <[email protected]> wrote: > > > On Thu, May 01, 2014 at 03:33:58PM -0400, Dwight Engen wrote: > > > - 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]> > > > --- > > > .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..77b1ceb 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 > > > +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..bbc7baa 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: ../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 > > > + > > > +install-systemd: lxc.service lxc-devsetup lxc-autostart > > > $(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 > > > > > > 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..2f293eb > > > --- /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 start > > > +ExecStop=@libexecdir@/lxc/lxc-autostart stop > > > > ^ That still seems wrong to me, lxc-autostart is a standard binary in > > BINDIR. > > Perhaps I should have called this script a different name: > @libexecdir@/lxc/lxc-autostart is a shell script (generated from the > sysvinit script by the build system) that calls @bindir@/lxc-autostart > after waiting for the bridge to come online.
Oh, I see, I should have read the whole diff :)
Can we maybe call it lxc-autostart-helper or something like that to
clear up any confusion?
>
> > > +# 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..f4286c2 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
> > > %endif
> > >
> > > %if %{with_python}
> > > --
> > > 1.9.0
> > >
> > > _______________________________________________
> > > lxc-devel mailing list
> > > [email protected]
> > > http://lists.linuxcontainers.org/listinfo/lxc-devel
> >
>
> _______________________________________________
> lxc-devel mailing list
> [email protected]
> http://lists.linuxcontainers.org/listinfo/lxc-devel
--
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
signature.asc
Description: Digital signature
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
