On Mon, Jan 06, 2014 at 11:19:56AM -0500, Dwight Engen wrote: > On Fri, 3 Jan 2014 15:07:01 -0500 > Stéphane Graber <stgra...@ubuntu.com> wrote: > > > On Fri, Jan 03, 2014 at 02:00:25PM -0600, Serge Hallyn wrote: > > > Quoting Stéphane Graber (stgra...@ubuntu.com): > > > > On Thu, Jan 02, 2014 at 11:09:25AM -0600, Serge Hallyn wrote: > > > > > 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> > > > > > > > > I don't think the current proposal is appropriate. > > > > > > > > At least in Ubuntu and Debian, we typically want more than one > > > > init script to be installed. The way things work in Debian based > > > > distros is that init scripts for all supported init daemons are > > > > installed and only the relevant ones are used at boot time and by > > > > the user (with the "service" command). > > > > > > > > As a result, I'd expect an LXC package build on Debian or Ubuntu > > > > to include the upstart jobs, sysvinit script and systemd unit in > > > > their usual locations. > > > > > > Drat, I just pushed the commit. > > > > > > So having > > > > > > case $with_distro in > > > ubuntu) > > > init_script=upstart,systemd,sysv > > > ;; > > > > > > and the rest geared to support that, could work here? > > > > And the same for debian) but yes, that'd be fine I think. > > > > I'm also wondering whether non-Debian distros actually have a problem > > should they all be installed at once, if not, then maybe we can do > > without the whole --init-script thing and always have them all > > installed? > > Yeah, Fedora packaging guidelines [1], [2] want either sysv or systemd, > but not both ("Packagers MUST NOT include SysV initscripts in addition > to systemd unit files, even in a separate $name-sysvinit subpackage as > there are corner cases where the initscripts can override the systemd > unit files."). So that is why I had only one of them being installed. I > can see that it makes sense to install multiple if the distro supports > it. > > As far as the sysv initscript I provided running on multiple distros: > It is pretty simple and I tried to make it generic, it has both > chkconfig and LSB headers. I will admit that I did only test it on > OracleLinux. > > [1] https://fedoraproject.org/wiki/Packaging:SysVInitScript > [2] https://fedoraproject.org/wiki/Packaging:Systemd
Weird policy but fair enough, can you then add support for a comma separated list of init systems that Debian, Ubuntu and any similar distro could use? > > > > > > > > > > > > > > > > > --- > > > > > > 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 > > > > > > > > -- > > > > Stéphane Graber > > > > Ubuntu developer > > > > http://www.ubuntu.com > > > > > > > > > > > > > _______________________________________________ > > > > 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 > > > -- Stéphane Graber Ubuntu developer http://www.ubuntu.com
signature.asc
Description: Digital signature
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel