[lxc-devel] [PATCH] have systemd service call lxc-autostart via script
Michael H. Warfield
mhw at WittsEnd.com
Thu May 1 21:14:12 UTC 2014
Related to this... Dwight and I have been bouncing a couple of things
back and forth and I noticed that lxc-autostart is being called from the
sysvinit scripts without the -a parameter. That means that any
container in a non-null group will not be autostart on boot. I feel
that's the wrong behavior. If autoboot = 1 then it should be autobooted
on boot. What you do after boot is up to you but I would expect it to
be "autoboot = 1" => "autobooted on bootup", not "autoboot = 1" =>
"autobooted on bootup if it's not in a group".
Regards,
Mike
On Thu, 2014-05-01 at 16:06 -0400, Stéphane Graber 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 <venefax at gmail.com>
> > Signed-off-by: Dwight Engen <dwight.engen at oracle.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 | 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.
>
> > +# 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
> > lxc-devel at lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/lxc-devel
>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
--
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!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 482 bytes
Desc: This is a digitally signed message part
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140501/527e57b4/attachment.sig>
More information about the lxc-devel
mailing list