Quoting Dwight Engen (dwight.en...@oracle.com): > This change updates the way init scripts get installed so that more > than one init system can be supported. Instead of installing the > systemd service file from the spec file, it should be installed at > make install time, so that someone compiling from source also gets > the unit file installed. > > Update the plamo template to use a lock file not named just > /var/lock/subsys/lxc since the presence of that file is used by > sysv init rc file to know if it should run the K01lxc script. This > also makes it consistent with the other templates which use > /var/lock/subsys/lxc-$template-name. > > Signed-off-by: Dwight Engen <dwight.en...@oracle.com>
I have no objection to this, but I'd appreciate Stéphane taking a closer look. This might lead the way to putting the upstart scripts for ubuntu upstream as well, which would be a plus. It also can give us more reasonable and comprehensive testcases if we can know that common distros will have a certain amount of setup. Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com> > --- > configure.ac | 45 +++++++++++++++++++++++++++++++++++ > lxc.spec.in | 27 +++++++++++++++------ > src/lxc/Makefile.am | 44 +++++++++++++++++++++++++++++++++- > src/lxc/lxc.sysvinit | 64 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > templates/lxc-plamo.in | 4 ++-- > 5 files changed, 174 insertions(+), 10 deletions(-) > create mode 100755 src/lxc/lxc.sysvinit > > diff --git a/configure.ac b/configure.ac > index 4c5f002..2d24937 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -70,6 +70,50 @@ AC_MSG_RESULT([$with_distro]) > AM_CONDITIONAL([HAVE_DEBIAN], [test x"$with_distro" = "xdebian" -o > x"$with_distro" = "xubuntu"]) > AM_CONDITIONAL([DISTRO_UBUNTU], [test "x$with_distro" = "xubuntu"]) > > +# Check for init system type > +AC_MSG_CHECKING([for init system type]) > +AC_ARG_WITH([init-script], > + [AC_HELP_STRING([--with-init-script@<:@=TYPE@:>@], > + [Type of init script to install: sysv, systemd, > upstart, > + distro, none > @<:@default=distro@:>@])],[],[with_init_script=distro]) > +case "$with_init_script" in > + sysv) > + init_script=sysv > + ;; > + systemd) > + init_script=systemd > + ;; > + upstart) > + init_script=upstart > + ;; > + none) > + ;; > + distro) > + case $with_distro in > + fedora) > + init_script=systemd > + ;; > + redhat|centos|oracle|oracleserver) > + init_script=sysv > + ;; > + ubuntu) > + init_script=upstart > + ;; > + *) > + echo -n "Linux distribution init system > unknown, defaulting to sysv" > + init_script=sysv > + ;; > + esac > + ;; > + *) > + AC_MSG_ERROR([Unknown init system type $with_init_script]) > + ;; > +esac > +AM_CONDITIONAL([INIT_SCRIPT_SYSV], test "$init_script" = "sysv") > +AM_CONDITIONAL([INIT_SCRIPT_SYSTEMD], test "$init_script" = "systemd") > +AM_CONDITIONAL([INIT_SCRIPT_UPSTART], test "$init_script" = "upstart") > +AC_MSG_RESULT($init_script) > + > # Allow disabling rpath > AC_ARG_ENABLE([rpath], > [AC_HELP_STRING([--enable-rpath], [set rpath in executables > [default=no]])], > @@ -610,6 +654,7 @@ cat << EOF > Environment: > - compiler: $CC > - distribution: $with_distro > + - init script type: $init_script > - rpath: $enable_rpath > - GnuTLS: $enable_gnutls > > diff --git a/lxc.spec.in b/lxc.spec.in > index 6814ad7..b977c8c 100644 > --- a/lxc.spec.in > +++ b/lxc.spec.in > @@ -23,6 +23,17 @@ > %global with_python %{?_with_python: 1} %{?!_with_python: 0} > %global with_lua %{?_with_lua: 1} %{?!_with_lua: 0} > > +# Set with_systemd on distros that use it, so we can install the service > +# file, otherwise the sysvinit script will be installed > +%if 0%{?fedora} >= 14 || 0%{?rhel} >= 7 || 0%{?suse_version} >= 1210 > +%global with_systemd 1 > +%define init_script systemd > +BuildRequires: systemd-units > +%else > +%global with_systemd 0 > +%define init_script sysv > +%endif > + > # RPM needs alpha/beta/rc in Release: not Version: to ensure smooth > # package upgrades from alpha->beta->rc->release. For more info see: > # > http://fedoraproject.org/wiki/Packaging%3aNamingGuidelines#NonNumericRelease > @@ -94,7 +105,8 @@ PATH=$PATH:/usr/sbin:/sbin %configure $args \ > %if %{with_python} > --enable-python \ > %endif > - --disable-rpath > + --disable-rpath \ > + --with-init-script=%{init_script} > make %{?_smp_mflags} > > %install > @@ -102,11 +114,6 @@ rm -rf %{buildroot} > make install DESTDIR=%{buildroot} > find %{buildroot} -type f -name '*.la' -exec rm -f {} ';' > > -# Install some of our systemd stuff... > -install -d -m 755 %{buildroot}/lib/systemd/system > -install -c -m 644 src/lxc/lxc.service %{buildroot}/lib/systemd/system > -install -c -m 755 src/lxc/lxc-devsetup %{buildroot}/%{_libexecdir}/%{name} > - > %clean > rm -rf %{buildroot} > > @@ -136,7 +143,11 @@ rm -rf %{buildroot} > %{_datadir}/lxc/* > %config(noreplace) %{_sysconfdir}/lxc/* > > -/lib/systemd/system/* > +%if %{with_systemd} > +%{_unitdir}/lxc.service > +%else > +%{_sysconfdir}/rc.d/init.d/lxc > +%endif > > %files libs > %defattr(-,root,root) > @@ -147,7 +158,9 @@ rm -rf %{buildroot} > %endif > %{_localstatedir}/* > %attr(4555,root,root) %{_libexecdir}/%{name}/lxc-init > +%if %{with_systemd} > %attr(555,root,root) %{_libexecdir}/%{name}/lxc-devsetup > +%endif > > %if %{with_python} > %{_libdir}/python3.3/site-packages/_lxc* > diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am > index 74b38e2..c54120a 100644 > --- a/src/lxc/Makefile.am > +++ b/src/lxc/Makefile.am > @@ -154,7 +154,8 @@ EXTRA_DIST = \ > lxc-devsetup \ > lxc-ls \ > lxc-top \ > - lxc.service > + lxc.service \ > + lxc.sysvinit > > if ENABLE_PYTHON > bin_SCRIPTS += lxc-device > @@ -197,6 +198,43 @@ bin_PROGRAMS = \ > pkglibexec_PROGRAMS = \ > lxc-init > > +if INIT_SCRIPT_SYSV > +install-init: lxc.sysvinit > + $(MKDIR_P) $(DESTDIR)$(sysconfdir)/rc.d/init.d > + $(INSTALL_SCRIPT) lxc.sysvinit $(DESTDIR)$(sysconfdir)/rc.d/init.d/lxc > + > +uninstall-init: > + rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/lxc > + rmdir $(DESTDIR)$(sysconfdir)/rc.d/init.d || : > +else > +install-init: > +uninstall-init: > +endif > + > +if INIT_SCRIPT_SYSTEMD > +SYSTEMD_UNIT_DIR = /usr/lib/systemd/system > +install-systemd: lxc.service lxc-devsetup > + $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR) > + $(INSTALL_DATA) lxc.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/ > + > +uninstall-systemd: > + rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/lxc.service > + rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR) || : > +pkglibexec_SCRIPTS = lxc-devsetup > +else > +install-systemd: > +uninstall-systemd: > +endif > + > +if INIT_SCRIPT_UPSTART > +# FIXME: install/uninstall upstart script here > +install-upstart: > +uninstall-upstart: > +else > +install-upstart: > +uninstall-upstart: > +endif > + > AM_LDFLAGS = -Wl,-E > if ENABLE_RPATH > AM_LDFLAGS += -Wl,-rpath -Wl,$(libdir) > @@ -229,6 +267,10 @@ lxc_snapshot_SOURCES = lxc_snapshot.c > lxc_usernsexec_SOURCES = lxc_usernsexec.c > lxc_user_nic_SOURCES = lxc_user_nic.c network.c network.h > > +install-data-local: install-init install-systemd install-upstart > + > +uninstall-local: uninstall-init uninstall-systemd uninstall-upstart > + > install-exec-local: install-soPROGRAMS > mkdir -p $(DESTDIR)$(datadir)/lxc > install -c -m 644 lxc.functions $(DESTDIR)$(datadir)/lxc > diff --git a/src/lxc/lxc.sysvinit b/src/lxc/lxc.sysvinit > new file mode 100755 > index 0000000..9128187 > --- /dev/null > +++ b/src/lxc/lxc.sysvinit > @@ -0,0 +1,64 @@ > +#!/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 |awk '{print $3}'` > + [ -n $BRNAME ] || { return 0; } > + > + 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 -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/templates/lxc-plamo.in b/templates/lxc-plamo.in > index 485f363..8705a05 100644 > --- a/templates/lxc-plamo.in > +++ b/templates/lxc-plamo.in > @@ -145,7 +145,7 @@ install_plamo() { > return 1 > fi > return 0 > - ) 200> @LOCALSTATEDIR@/lock/subsys/lxc > + ) 200> @LOCALSTATEDIR@/lock/subsys/lxc-plamo > } > > configure_plamo() { > @@ -306,7 +306,7 @@ cleanup() { > rm -rf --one-file-system $dlcache $rtcache || return 1 > echo "Done." > return 0 > - ) 200> @LOCALSTATEDIR@/lock/subsys/lxc > + ) 200> @LOCALSTATEDIR@/lock/subsys/lxc-plamo > } > > usage() { > -- > 1.8.3.1 > > _______________________________________________ > lxc-devel mailing list > lxc-devel@lists.linuxcontainers.org > http://lists.linuxcontainers.org/listinfo/lxc-devel _______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel