[lxc-devel] [PATCH 2/2] add lxc-autostart support for sysv init systems
Michael H. Warfield
mhw at WittsEnd.com
Mon Jan 6 18:03:12 UTC 2014
On Mon, 2014-01-06 at 12:08 -0500, Dwight Engen wrote:
> On Mon, 6 Jan 2014 11:25:11 -0500
> Stéphane Graber <stgraber at ubuntu.com> wrote:
>
> > 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 <stgraber at ubuntu.com> wrote:
> > >
> > > > On Fri, Jan 03, 2014 at 02:00:25PM -0600, Serge Hallyn wrote:
> > > > > Quoting Stéphane Graber (stgraber at ubuntu.com):
> > > > > > On Thu, Jan 02, 2014 at 11:09:25AM -0600, Serge Hallyn wrote:
> > > > > > > Quoting Dwight Engen (dwight.engen at 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.engen at 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.hallyn at 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?
> Sure, I can look into that. I think part of this is because systemd has
> some compatibility with sysv init scripts, so if you had both installed
> maybe it would start the service twice? Not sure how upstart handles
> that since I thought it had sysv init script compatibility too?
It shouldn't start the service twice. If the systemd unit file exists,
it should take precedence and not fall back to the sysv init scripts.
From reading, it sounds like there may be some unpredictable corner
cases. Giving the complexity of systemd, this does not surprise me
though I'm at a loss to think of any readily.
I'm sure they're buried in some of the inconsistent ways systemd handled
certain services... One glaring example in my personal experience is
the inconsistent way in which systemd handles IPsec VPN's vs OpenVPN
vpn's. IPsec is handled as an entire subsystem and started like this:
systemctl start ipsec.service
OpenVPN vpn's are handled as connections and started (and enabled) like
this:
systemctl start openvpn at canyon.wittsend.com.service
That last command is handled by the openvpn at .service (not
openvpn.service) file.
Sigh... Fresh bait for corner cases. I think they're taking the course
out of an abundance of caution and I don't blame them. And they may be
aware of specific corner cases...
Maybe I can think of one. Let's consider my OpenVPN case above. The
sysv init script for OpenVPN starts every connection that has a .conf
file in /etc/openvpn. But that's NOT how the systemd unit file works.
So, what happens when someone runs "service openvpn restart" under
systemd? The systemd unit file should bitch and bail but does the sysv
init script then run and restart everything? What if something was
started from one and then the other ran? There may be worse examples
lurking in the ugly corner cases than merely openvpn. It's a potential
morass.
Regards,
Mike
> > >
> > > >
> > > > >
> > > > > > >
> > > > > > > > ---
> > > > > > > > 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 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
> > > > > >
> > > > > > --
> > > > > > Stéphane Graber
> > > > > > Ubuntu developer
> > > > > > http://www.ubuntu.com
> > > > >
> > > > >
> > > > >
> > > > > > _______________________________________________
> > > > > > 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
> > > >
> > >
> >
>
> _______________________________________________
> 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: 465 bytes
Desc: This is a digitally signed message part
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140106/fab4f42d/attachment-0001.pgp>
More information about the lxc-devel
mailing list