]> git.proxmox.com Git - mirror_lxc.git/commitdiff
Rework init scripts
authorMichael H. Warfield <mhw@WittsEnd.com>
Mon, 25 Aug 2014 19:00:46 +0000 (15:00 -0400)
committerStéphane Graber <stgraber@ubuntu.com>
Fri, 26 Sep 2014 14:55:11 +0000 (10:55 -0400)
This commit is based on the work of:
Signed-off-by: Michael H. Warfield <mhw@WittsEnd.com>
A generic changelog would be:
 - Bring support for lxcbr0 to all distributions
 - Share the container startup and network configuration logic across
   distributions and init systems.
 - Have all the init scripts call the helper script.
 - Support for the various different distro-specific configuration
   locations to configure lxc-net and container startup.

Changes on top of Mike's original version:
 - Remove sysconfig/lxc-net as it's apparently only there as a
   workaround for an RPM limitation and is breaking Debian systems by
   including a useless file which will get registered as a package provided
   conffile in the dpkg database and will therefore cause conffile prompts
   on upgrades...
 - Go with a consistant coding style in the various init scripts.
 - Split out the common logic from the sysvinit scripts and ship both in
   their respective location rather than have them be copies.
 - Fix the upstart jobs so they actually work (there's no such thing as
   libexec on Debian systems).

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
24 files changed:
config/Makefile.am
config/etc/Makefile.am
config/etc/default.conf.lxcbr [new file with mode: 0644]
config/etc/default.conf.ubuntu [deleted file]
config/init/Makefile.am
config/init/common/Makefile.am [new file with mode: 0644]
config/init/common/lxc-containers.in [new file with mode: 0644]
config/init/common/lxc-net.in [new file with mode: 0644]
config/init/systemd/Makefile.am
config/init/systemd/lxc-net.service.in
config/init/systemd/lxc.service.in
config/init/sysvinit/Makefile.am
config/init/sysvinit/lxc-containers.in [new file with mode: 0644]
config/init/sysvinit/lxc-net.in [new file with mode: 0644]
config/init/sysvinit/lxc.in [deleted file]
config/init/upstart/Makefile.am
config/init/upstart/lxc-net.conf [deleted file]
config/init/upstart/lxc-net.conf.in [new file with mode: 0644]
config/sysconfig/Makefile.am [new file with mode: 0644]
config/sysconfig/lxc.in [new file with mode: 0644]
configure.ac
lxc.spec.in
src/lxc/Makefile.am
src/lxc/lxc.net [deleted file]

index 37fd24ba2a92006db5f3745486bd5e6f7c583cba..54f8859e1ccaa50b870fb143f6959ee6517600ac 100644 (file)
@@ -1 +1 @@
-SUBDIRS = apparmor bash etc init selinux templates yum
+SUBDIRS = apparmor bash etc init selinux templates yum sysconfig
index a830aef3568dc44bf8e9938d2fcc72a4ae4d5af7..d5d0a9aac034ecf2619550eab5f05c9cd0ad531a 100644 (file)
@@ -1,7 +1,7 @@
 configdir = $(sysconfdir)/lxc
 config_DATA = default.conf
 
-EXTRA_DIST = default.conf.ubuntu default.conf.libvirt default.conf.unknown
+EXTRA_DIST = default.conf.lxcbr default.conf.libvirt default.conf.unknown
 
 distclean-local:
        @$(RM) -f default.conf
diff --git a/config/etc/default.conf.lxcbr b/config/etc/default.conf.lxcbr
new file mode 100644 (file)
index 0000000..661718b
--- /dev/null
@@ -0,0 +1,4 @@
+lxc.network.type = veth
+lxc.network.link = lxcbr0
+lxc.network.flags = up
+lxc.network.hwaddr = 00:16:3e:xx:xx:xx
diff --git a/config/etc/default.conf.ubuntu b/config/etc/default.conf.ubuntu
deleted file mode 100644 (file)
index 661718b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-lxc.network.type = veth
-lxc.network.link = lxcbr0
-lxc.network.flags = up
-lxc.network.hwaddr = 00:16:3e:xx:xx:xx
index e2ffe28ada32821e577a2e07cbc1340d53b75f8c..1a9c7b280961079f82961cd74cfff4adf12376ed 100644 (file)
@@ -1 +1 @@
-SUBDIRS = systemd sysvinit upstart
+SUBDIRS = common systemd sysvinit upstart
diff --git a/config/init/common/Makefile.am b/config/init/common/Makefile.am
new file mode 100644 (file)
index 0000000..8c0134c
--- /dev/null
@@ -0,0 +1,2 @@
+EXTRA_DIST = lxc-containers.in lxc-net.in
+pkglibexec_SCRIPTS = lxc-containers lxc-net
diff --git a/config/init/common/lxc-containers.in b/config/init/common/lxc-containers.in
new file mode 100644 (file)
index 0000000..9d1d604
--- /dev/null
@@ -0,0 +1,136 @@
+#!/bin/sh
+
+sysconfdir="@SYSCONFDIR@"
+distrosysconfdir="@LXC_DISTRO_SYSCONF@"
+bindir="@BINDIR@"
+localstatedir="@LOCALSTATEDIR@"
+
+# These can be overridden in @LXC_DISTRO_SYSCONF@/lxc
+
+# Autostart containers?
+LXC_AUTO="true"
+
+# BOOTGROUPS - What groups should start on bootup?
+#      Comma separated list of groups.
+#      Leading comma, trailing comma or embedded double
+#      comma indicates when the NULL group should be run.
+# Example (default): boot the onboot group first then the NULL group
+BOOTGROUPS="onboot,"
+
+# SHUTDOWNDELAY - Wait time for a container to shut down.
+#      Container shutdown can result in lengthy system
+#      shutdown times.  Even 5 seconds per container can be
+#      too long.
+SHUTDOWNDELAY=5
+
+# OPTIONS can be used for anything else.
+#      If you want to boot everything then
+#      options can be "-a" or "-a -A".
+OPTIONS=
+
+# STOPOPTS are stop options.  The can be used for anything else to stop.
+#      If you want to kill containers fast, use -k
+STOPOPTS="-a -A -s"
+
+# Source function library.
+test ! -r "$sysconfdir"/rc.d/init.d/functions ||
+        . "$sysconfdir"/rc.d/init.d/functions
+
+# provide action() fallback
+if ! type action >/dev/null 2>&1; then
+    # Real basic fallback for sysvinit "action" verbage.
+    action() {
+        echo -n "$1    "
+       "$@" && echo "OK" || echo "Failed"
+    }
+fi
+
+if [ -d "$localstatedir"/lock/subsys ]
+then
+       lockdir="$localstatedir"/lock/subsys
+else
+       lockdir="$localstatedir"/lock
+fi
+
+# Source any configurable options
+[ ! -f "$distrosysconfdir"/lxc ] || . "$distrosysconfdir"/lxc
+
+# 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)
+        [ "x$LXC_AUTO" = "xtrue" ] || { exit 0; }
+
+        [ ! -f "$lockdir"/lxc ] || { exit 0; }
+
+        if [ -n "$BOOTGROUPS" ]; then
+            BOOTGROUPS="-g $BOOTGROUPS"
+        fi
+
+        # Start containers
+        wait_for_bridge
+
+        # Start autoboot containers first then the NULL group "onboot,".
+        action $"Starting LXC autoboot containers: " "$bindir"/lxc-autostart $OPTIONS $BOOTGROUPS
+        touch "$lockdir"/lxc
+    ;;
+
+    stop)
+        if [ -n "$SHUTDOWNDELAY" ]; then
+            SHUTDOWNDELAY="-t $SHUTDOWNDELAY"
+        fi
+
+        # The stop is serialized and can take excessive time.  We need to avoid
+        # delaying the system shutdown / reboot as much as we can since it's not
+        # parallelized...  Even 5 second timout may be too long.
+        action $"Stopping LXC containers: " "$bindir"/lxc-autostart $STOPOPTS $SHUTDOWNDELAY
+        rm -f "$lockdir"/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/common/lxc-net.in b/config/init/common/lxc-net.in
new file mode 100644 (file)
index 0000000..c921ab7
--- /dev/null
@@ -0,0 +1,123 @@
+#!/bin/sh -
+
+distrosysconfdir="@LXC_DISTRO_SYSCONF@"
+localstatedir="@LOCALSTATEDIR@"
+varrun="@RUNTIME_PATH@/lxc"
+
+# These can be overridden in @LXC_DISTRO_SYSCONF@/lxc
+#   or in @LXC_DISTRO_SYSCONF@/lxc-net
+
+USE_LXC_BRIDGE="true"
+LXC_BRIDGE="lxcbr0"
+LXC_ADDR="10.0.3.1"
+LXC_NETMASK="255.255.255.0"
+LXC_NETWORK="10.0.3.0/24"
+LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
+LXC_DHCP_MAX="253"
+LXC_DHCP_CONFILE=""
+LXC_DOMAIN=""
+
+[ ! -f $distrosysconfdir/lxc ] || . $distrosysconfdir/lxc
+
+if [ -d "$localstatedir"/lock/subsys ]; then
+    lockdir="$localstatedir"/lock/subsys
+else
+    lockdir="$localstatedir"/lock
+fi
+
+start() {
+    [ ! -f "${lockdir}"/lxc-net ] || { exit 0; }
+
+    [ "x$USE_LXC_BRIDGE" = "xtrue" ] || { exit 0; }
+
+    use_iptables_lock="-w"
+    iptables -w -L -n > /dev/null 2>&1 || use_iptables_lock=""
+    cleanup() {
+        # dnsmasq failed to start, clean up the bridge
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 53 -j ACCEPT
+        iptables $use_iptables_lock -D FORWARD -i ${LXC_BRIDGE} -j ACCEPT
+        iptables $use_iptables_lock -D FORWARD -o ${LXC_BRIDGE} -j ACCEPT
+        iptables $use_iptables_lock -t nat -D POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE || true
+        iptables $use_iptables_lock -t mangle -D POSTROUTING -o ${LXC_BRIDGE} -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
+        ifconfig ${LXC_BRIDGE} down || true
+        brctl delbr ${LXC_BRIDGE} || true
+    }
+
+    if [ -d /sys/class/net/${LXC_BRIDGE} ]; then
+        exit 0;
+    fi
+
+    # set up the lxc network
+    brctl addbr ${LXC_BRIDGE} || { echo "Missing bridge support in kernel"; stop; exit 0; }
+    echo 1 > /proc/sys/net/ipv4/ip_forward
+    mkdir -p "${varrun}"
+    ifconfig ${LXC_BRIDGE} ${LXC_ADDR} netmask ${LXC_NETMASK} up
+    iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
+    iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
+    iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
+    iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p tcp --dport 53 -j ACCEPT
+    iptables $use_iptables_lock -I FORWARD -i ${LXC_BRIDGE} -j ACCEPT
+    iptables $use_iptables_lock -I FORWARD -o ${LXC_BRIDGE} -j ACCEPT
+    iptables $use_iptables_lock -t nat -A POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE
+    iptables $use_iptables_lock -t mangle -A POSTROUTING -o ${LXC_BRIDGE} -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
+
+    LXC_DOMAIN_ARG=""
+    if [ -n "$LXC_DOMAIN" ]; then
+        LXC_DOMAIN_ARG="-s $LXC_DOMAIN -S /$LXC_DOMAIN/"
+    fi
+    dnsmasq $LXC_DOMAIN_ARG -u lxc-dnsmasq --strict-order --bind-interfaces --pid-file="${varrun}"/dnsmasq.pid --conf-file=${LXC_DHCP_CONFILE} --listen-address ${LXC_ADDR} --dhcp-range ${LXC_DHCP_RANGE} --dhcp-lease-max=${LXC_DHCP_MAX} --dhcp-no-override --except-interface=lo --interface=${LXC_BRIDGE} --dhcp-leasefile=/var/lib/misc/dnsmasq.${LXC_BRIDGE}.leases --dhcp-authoritative || cleanup
+    touch "${varrun}"/network_up
+    touch "${lockdir}"/lxc-net
+}
+
+stop() {
+    [ "x$USE_LXC_BRIDGE" = "xtrue" ] || { exit 0; }
+
+    [ -f "${varrun}/network_up" ] || { exit 0; }
+    # if $LXC_BRIDGE has attached interfaces, don't shut it down
+    ls /sys/class/net/${LXC_BRIDGE}/brif/* > /dev/null 2>&1 && exit 0;
+
+    if [ -d /sys/class/net/${LXC_BRIDGE} ]; then
+        use_iptables_lock="-w"
+        iptables -w -L -n > /dev/null 2>&1 || use_iptables_lock=""
+        ifconfig ${LXC_BRIDGE} down
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
+        iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 53 -j ACCEPT
+        iptables $use_iptables_lock -D FORWARD -i ${LXC_BRIDGE} -j ACCEPT
+        iptables $use_iptables_lock -D FORWARD -o ${LXC_BRIDGE} -j ACCEPT
+        iptables $use_iptables_lock -t nat -D POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE || true
+        iptables $use_iptables_lock -t mangle -D POSTROUTING -o ${LXC_BRIDGE} -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
+        pid=`cat "${varrun}"/dnsmasq.pid 2>/dev/null` && kill -9 $pid || true
+        rm -f "${varrun}"/dnsmasq.pid
+        brctl delbr ${LXC_BRIDGE}
+    fi
+    rm -f "${varrun}"/network_up
+    rm -f "${lockdir}"/lxc-net
+}
+
+# See how we were called.
+case "$1" in
+    start)
+        start
+    ;;
+
+    stop)
+        stop
+    ;;
+
+    restart|reload|force-reload)
+        $0 stop
+        $0 start
+    ;;
+
+    *)
+        echo "Usage: $0 {start|stop|restart|reload|force-reload}"
+        exit 2
+esac
+
+exit $?
index 5959cd85aee858fa2c28ef085b25fbe9888dbc5c..4201d98a73416e0b28ed1b2bf203c57d2203effa 100644 (file)
@@ -2,21 +2,12 @@ EXTRA_DIST = \
        lxc-devsetup \
        lxc-apparmor-load \
        lxc.service.in \
-       lxc-net.service.in \
-       $(NULL)
+       lxc-net.service.in
 
 if INIT_SCRIPT_SYSTEMD
-lxc-autostart-helper: ../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-helper lxc.service lxc-net.service
+BUILT_SOURCES = lxc.service lxc-net.service
 
-install-systemd: lxc.service lxc-net.service lxc-devsetup lxc-apparmor-load lxc-autostart-helper
+install-systemd: lxc.service lxc-net.service lxc-devsetup lxc-apparmor-load
        $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR)
        $(INSTALL_DATA) lxc.service lxc-net.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/
 
@@ -25,7 +16,7 @@ uninstall-systemd:
        rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/lxc-net.service
        rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR) || :
 
-pkglibexec_SCRIPTS = lxc-devsetup lxc-apparmor-load lxc-autostart-helper
+pkglibexec_SCRIPTS = lxc-devsetup lxc-apparmor-load
 
 install-data-local: install-systemd
 uninstall-local: uninstall-systemd
index 37d1d69413aedc2676b02c7782b7ca61231478e0..c05470255adce5e06a6b4c3f291666c8785c87ca 100644 (file)
@@ -6,5 +6,5 @@ Before=lxc.service
 [Service]
 Type=oneshot
 RemainAfterExit=yes
-ExecStart=@DATADIR@/lxc/lxc.net start
-ExecStop=@DATADIR@/lxc/lxc.net stop
+ExecStart=@LIBEXECDIR@/lxc/lxc-net start
+ExecStop=@LIBEXECDIR@/lxc/lxc-net stop
index f64610f7cc5accd2d0858a13873a7891ec3ba90c..33da987685c737a23c0a964fe9f3263251fb39ce 100644 (file)
@@ -8,8 +8,8 @@ Type=oneshot
 RemainAfterExit=yes
 ExecStartPre=@LIBEXECDIR@/lxc/lxc-devsetup
 ExecStartPre=@LIBEXECDIR@/lxc/lxc-apparmor-load
-ExecStart=@LIBEXECDIR@/lxc/lxc-autostart-helper start
-ExecStop=@LIBEXECDIR@/lxc/lxc-autostart-helper stop
+ExecStart=@LIBEXECDIR@/lxc/lxc-containers start
+ExecStop=@LIBEXECDIR@/lxc/lxc-containers stop
 # Environment=BOOTUP=serial
 # Environment=CONSOLETYPE=serial
 StandardOutput=syslog
index 66c190d0822872b0afd5a5734da82b996907a0c1..e8b9f4f3d5790e26a6f19c1187716950cb9e261c 100644 (file)
@@ -1,13 +1,24 @@
-EXTRA_DIST = lxc
+EXTRA_DIST = lxc-containers.in lxc-net.in
 
 if INIT_SCRIPT_SYSV
-install-sysvinit: lxc
-       $(MKDIR_P) $(DESTDIR)$(sysconfdir)/rc.d/init.d
-       $(INSTALL_SCRIPT) lxc $(DESTDIR)$(sysconfdir)/rc.d/init.d/lxc
+# If we're installing for sysv init, install the helper scripts
+# directly to the rc directory under the appropriate name.
+
+if HAVE_DEBIAN
+initdir = "init.d"
+else
+initdir = "rc.d/init.d"
+endif
+
+install-sysvinit: lxc-containers lxc-net
+       $(MKDIR_P) $(DESTDIR)$(sysconfdir)/$(initdir)
+       $(INSTALL_SCRIPT) lxc-containers $(DESTDIR)$(sysconfdir)/$(initdir)/lxc
+       $(INSTALL_SCRIPT) lxc-net $(DESTDIR)$(sysconfdir)/$(initdir)/lxc-net
 
 uninstall-sysvinit:
-       rm -f $(DESTDIR)$(sysconfdir)/rc.d/init.d/lxc
-       rmdir $(DESTDIR)$(sysconfdir)/rc.d/init.d || :
+       rm -f $(DESTDIR)$(sysconfdir)/$(initdir)/lxc
+       rm -f $(DESTDIR)$(sysconfdir)/$(initdir)/lxc-net
+       rmdir $(DESTDIR)$(sysconfdir)/$(initdir) || :
 
 install-data-local: install-sysvinit
 uninstall-local: uninstall-sysvinit
diff --git a/config/init/sysvinit/lxc-containers.in b/config/init/sysvinit/lxc-containers.in
new file mode 100644 (file)
index 0000000..9d92115
--- /dev/null
@@ -0,0 +1,45 @@
+#!/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: 2 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
+
+start() {
+    @LIBEXECDIR@/lxc/lxc-containers start
+}
+
+stop() {
+    @LIBEXECDIR@/lxc/lxc-containers stop
+}
+
+# See how we were called.
+case "$1" in
+    start)
+        start
+    ;;
+
+    stop)
+        stop
+    ;;
+
+    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-net.in b/config/init/sysvinit/lxc-net.in
new file mode 100644 (file)
index 0000000..6e22505
--- /dev/null
@@ -0,0 +1,45 @@
+#!/bin/sh -
+#
+# lxc-net Start/Stop LXC Networking
+#
+# chkconfig: 345 99 01
+# description: Starts/Stops LXC Network Bridge
+#
+### BEGIN INIT INFO
+# Provides: lxc-net
+# Default-Start: 2 3 4 5
+# Default-Stop: 1
+# Short-Description: Bring up/down LXC Network Bridge
+# Description: Bring up/down LXC Network Bridge
+### END INIT INFO
+
+start() {
+    @LIBEXECDIR@/lxc/lxc-net start
+}
+
+stop() {
+    @LIBEXECDIR@/lxc/lxc-net stop
+}
+
+# See how we were called.
+case "$1" in
+    start)
+        start
+    ;;
+
+    stop)
+        stop
+    ;;
+
+    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
deleted file mode 100644 (file)
index 7cad8c8..0000000
+++ /dev/null
@@ -1,131 +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
-
-sysconfdir="@SYSCONFDIR@"
-bindir="@BINDIR@"
-localstatedir="@LOCALSTATEDIR@"
-
-# These can be overridden in @SYSCONFDIR@/sysconfig/lxc
-
-# BOOTGROUPS - What groups should start on bootup?
-#      Comma separated list of groups.
-#      Leading comma, trailing comma or embedded double
-#      comma indicates when the NULL group should be run.
-# Example (default): boot the onboot group first then the NULL group
-BOOTGROUPS="onboot,"
-
-# SHUTDOWNDELAY - Wait time for a container to shut down.
-#      ner shutdown can result in lengthy system
-#      shutdown times.  Even 5 seconds per container can be
-#      too long.
-SHUTDOWNDELAY=5
-
-# OPTIONS can be used for anything else.
-#      If you want to boot everything then
-#      options can be "-a" or "-a -A".
-OPTIONS=
-
-# STOPOPTS are stop options.  The can be used for anything else to stop.
-#      If you want to kill containers fast, use -k
-STOPOPTS="-a -A -s"
-
-# Source function library.
-test ! -r "$sysconfdir"/rc.d/init.d/functions ||
-        . "$sysconfdir"/rc.d/init.d/functions
-
-# provide action() fallback
-if ! type action >/dev/null 2>&1; then
-    action() {
-        echo "$@"
-    }
-fi
-
-# Source any configurable options
-test ! -r "$sysconfdir"/sysconfig/lxc ||
-        . "$sysconfdir"/sysconfig/lxc
-
-# 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; }
-
-       if [ -n "$BOOTGROUPS" ]
-       then
-               BOOTGROUPS="-g $BOOTGROUPS"
-       fi
-
-       # Start containers
-       wait_for_bridge
-       # Start autoboot containers first then the NULL group "onboot,".
-       action $"Starting LXC autoboot containers: " "$bindir"/lxc-autostart $OPTIONS $BOOTGROUPS
-       touch "$localstatedir"/lock/subsys/lxc
-       ;;
-  stop)
-       if [ -n "$SHUTDOWNDELAY" ]
-       then
-               SHUTDOWNDELAY="-t $SHUTDOWNDELAY"
-       fi
-
-       # The stop is serialized and can take excessive time.  We need to avoid
-       # delaying the system shutdown / reboot as much as we can since it's not
-       # parallelized...  Even 5 second timout may be too long.
-       action $"Stopping LXC containers: " "$bindir"/lxc-autostart $STOPOPTS $SHUTDOWNDELAY
-       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 $?
index 32b90b918cb98436d5df4f326823fe97eb2424e5..916b850764f6952492624269d72caf6445d2b6f4 100644 (file)
@@ -1,4 +1,4 @@
-EXTRA_DIST = lxc.conf lxc-instance.conf lxc-net.conf
+EXTRA_DIST = lxc.conf lxc-instance.conf lxc-net.conf.in
 
 if INIT_SCRIPT_UPSTART
 install-upstart: lxc.conf lxc-instance.conf lxc-net.conf
diff --git a/config/init/upstart/lxc-net.conf b/config/init/upstart/lxc-net.conf
deleted file mode 100644 (file)
index 38f6ea3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-description "lxc network"
-author "Serge Hallyn <serge.hallyn@canonical.com>"
-
-start on starting lxc
-stop on stopped lxc
-
-pre-start exec /usr/share/lxc/lxc.net start
-post-stop exec /usr/share/lxc/lxc.net stop
diff --git a/config/init/upstart/lxc-net.conf.in b/config/init/upstart/lxc-net.conf.in
new file mode 100644 (file)
index 0000000..71c5499
--- /dev/null
@@ -0,0 +1,8 @@
+description "lxc network"
+author "Serge Hallyn <serge.hallyn@canonical.com>"
+
+start on starting lxc
+stop on stopped lxc
+
+pre-start exec @LIBEXECDIR@/lxc/lxc-net start
+post-stop exec @LIBEXECDIR@/lxc/lxc-net stop
diff --git a/config/sysconfig/Makefile.am b/config/sysconfig/Makefile.am
new file mode 100644 (file)
index 0000000..3829a01
--- /dev/null
@@ -0,0 +1,6 @@
+sysconfigdir="@LXC_DISTRO_SYSCONF@"
+
+sysconfig_DATA = \
+       lxc
+
+EXTRA_DIST = $(sysconfig_DATA)
diff --git a/config/sysconfig/lxc.in b/config/sysconfig/lxc.in
new file mode 100644 (file)
index 0000000..c5b9aca
--- /dev/null
@@ -0,0 +1,29 @@
+# LXC_AUTO - whether or not to start containers at boot
+LXC_AUTO="true"
+
+# BOOTGROUPS - What groups should start on bootup?
+#      Comma separated list of groups.
+#      Leading comma, trailing comma or embedded double
+#      comma indicates when the NULL group should be run.
+# Example (default): boot the onboot group first then the NULL group
+BOOTGROUPS="onboot,"
+
+# SHUTDOWNDELAY - Wait time for a container to shut down.
+#      Container shutdown can result in lengthy system
+#      shutdown times.  Even 5 seconds per container can be
+#      too long.
+SHUTDOWNDELAY=5
+
+# OPTIONS can be used for anything else.
+#      If you want to boot everything then
+#      options can be "-a" or "-a -A".
+OPTIONS=
+
+# STOPOPTS are stop options.  The can be used for anything else to stop.
+#      If you want to kill containers fast, use -k
+STOPOPTS="-a -A -s"
+
+USE_LXC_BRIDGE="false"  # overridden in lxc-net
+
+[ -f @LXC_DISTRO_SYSCONF@/lxc-net ] && . @LXC_DISTRO_SYSCONF@/lxc-net
+
index 3e73d494625bbce8b08f180897f8685f99c08659..7b5458766377312deaab1bf419b71888c1e2336c 100644 (file)
@@ -60,13 +60,16 @@ if test "z$with_distro" = "z"; then
 fi
 case $with_distro in
        ubuntu|raspbian)
-               distroconf=default.conf.ubuntu
+               distroconf=default.conf.lxcbr
+               distrosysconf="$sysconfdir/default"
                ;;
-       redhat|centos|fedora|oracle|oracleserver)
-               distroconf=default.conf.libvirt
+       redhat|centos|fedora|oracle|oracleserver|suse|opensuse*)
+               distroconf=default.conf.lxcbr
+               distrosysconf="$sysconfdir/sysconfig"
                ;;
        *)
                distroconf=default.conf.unknown
+               distrosysconf="$sysconfdir/default"
                ;;
 esac
 AC_MSG_RESULT([$with_distro])
@@ -84,7 +87,7 @@ AC_ARG_WITH([init-script],
 case "$with_init_script" in
        distro)
                case $with_distro in
-                       fedora)
+                       fedora|opensuse*)
                                init_script=systemd
                                ;;
                        redhat|centos|oracle|oracleserver)
@@ -520,6 +523,7 @@ AS_AC_EXPAND(LXCPATH, "$with_config_path")
 AS_AC_EXPAND(LXC_GLOBAL_CONF, "$with_global_conf")
 AS_AC_EXPAND(LXC_USERNIC_CONF, "$with_usernic_conf")
 AS_AC_EXPAND(LXC_USERNIC_DB, "$with_usernic_db")
+AS_AC_EXPAND(LXC_DISTRO_SYSCONF, "$distrosysconf")
 AS_AC_EXPAND(LXCROOTFSMOUNT, "$with_rootfs_path")
 AS_AC_EXPAND(LXCTEMPLATEDIR, "$datadir/lxc/templates")
 AS_AC_EXPAND(LXCTEMPLATECONFIG, "$datadir/lxc/config")
@@ -602,11 +606,16 @@ AC_CONFIG_FILES([
        config/bash/Makefile
        config/bash/lxc
        config/init/Makefile
-       config/init/sysvinit/Makefile
-       config/init/sysvinit/lxc
+       config/init/common/Makefile
+       config/init/common/lxc-containers
+       config/init/common/lxc-net
        config/init/systemd/Makefile
        config/init/systemd/lxc.service
        config/init/systemd/lxc-net.service
+       config/init/sysvinit/Makefile
+       config/init/sysvinit/lxc-containers
+       config/init/sysvinit/lxc-net
+       config/init/upstart/lxc-net.conf
        config/init/upstart/Makefile
        config/etc/Makefile
        config/templates/Makefile
@@ -636,6 +645,8 @@ AC_CONFIG_FILES([
        config/templates/ubuntu.userns.conf
        config/templates/userns.conf
        config/yum/Makefile
+       config/sysconfig/Makefile
+       config/sysconfig/lxc
 
        doc/Makefile
        doc/api/Makefile
index 57912a1fe432e9f805e30d598e864e38669a133c..52b63268be30e69d7e85102af93d969de8df3c24 100644 (file)
 %if 0%{?fedora} >= 14 || 0%{?rhel} >= 7 || 0%{?suse_version} >= 1210
 %global with_systemd 1
 %define init_script systemd
+#
+# BuildRequires systemd-units on fedora and rhel
+%if 0%{?fedora} >= 14 || 0%{?rhel} >= 7
 BuildRequires: systemd-units
+#
+# BuildRequires systemd on openSUSE and SUSE
+%endif
+%if 0%{?suse_version} >= 1210
+BuildRequires: systemd
+%endif
 %else
 %global with_systemd 0
 %define init_script sysvinit
@@ -53,8 +62,25 @@ Summary: Linux Containers userspace tools
 Group: Applications/System
 License: LGPLv2+
 BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Requires: openssl rsync
-BuildRequires: libcap libcap-devel docbook2X graphviz
+Requires: openssl rsync dnsmasq
+# Note for Suse.  The "docbook2X" BuildRequires does properly
+# match docbook2x on Suse in a case insensitive manner
+BuildRequires: libcap libcap-devel docbook2X graphviz libxslt pkgconfig
+
+#
+# Additional packages for openSUSE and SUSE
+#
+%if 0%{?suse_version} >= 1210
+PreReq:   permissions
+BuildRequires:  libapparmor-devel linux-glibc-devel lsb-release docbook-utils
+
+#
+# libseccomp-devel only needed on i386/i586/i686 and X86_64
+#
+%ifarch %ix86 x86_64
+BuildRequires:  libseccomp-devel
+%endif
+%endif
 
 %if %{with_python}
 Requires: python3
@@ -104,6 +130,9 @@ PATH=$PATH:/usr/sbin:/sbin %configure $args \
 %endif
 %if %{with_python}
   --enable-python \
+%endif
+%if "x%{_unitdir}" != "x"
+  --with-systemdsystemunitdir=%{_unitdir} \
 %endif
   --disable-rpath \
   --with-init-script=%{init_script}
@@ -117,28 +146,102 @@ find %{buildroot} -type f -name '*.la' -exec rm -f {} ';'
 %clean
 rm -rf %{buildroot}
 
+%pre
+# Ensure that lxcdnsmasq uid & gid gets correctly allocated
+if getent passwd lxc-dnsmasq >/dev/null 2>&1 ; then : ; else \
+ /usr/sbin/useradd -M -r -s /sbin/nologin \
+ -c "LXC Networking Service" -d %_localstatedir/%name lxc-dnsmasq 2> /dev/null \
+ || exit 1
+fi
+
 %post
+# This test should trigger a network configure on a new install.
+if [ ! -f %{_sysconfdir}/sysconfig/lxc-net ] || ! grep -q 'USE_LXC_BRIDGE=' %{_sysconfdir}/sysconfig/lxc-net
+then
+       # Grab a random 10net subnet.  Need to add test logic...
+       while [ true ]
+       do
+               SUBNET=10.$(($RANDOM % 256)).$(($RANDOM % 256))
+               if ! ip -4 route ls | grep -q "^$SUBNET"
+               then
+                       break
+               fi
+       done
+
+       cat >  %{_sysconfdir}/sysconfig/lxc-net <<EOF
+# Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
+# containers.  Set to "false" if you'll use virbr0 or another existing
+# bridge, or mavlan to your host's NIC.
+USE_LXC_BRIDGE="true"
+
+# If you change the LXC_BRIDGE to something other than lxcbr0, then
+# you will also need to update your /etc/lxc/default.conf as well as the
+# configuration (/var/lib/lxc/<container>/config) for any containers
+# already created using the default config to reflect the new bridge
+# name.
+# If you have the dnsmasq daemon installed, you'll also have to update
+# /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
+LXC_BRIDGE="lxcbr0"
+LXC_ADDR="$SUBNET.1"
+LXC_NETMASK="255.255.255.0"
+LXC_NETWORK="$SUBNET.0/24"
+LXC_DHCP_RANGE="$SUBNET.2,$SUBNET.254"
+LXC_DHCP_MAX="253"
+# Uncomment the next line if you'd like to use a conf-file for the lxcbr0
+# dnsmasq.  For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have
+# container 'mail1' always get ip address 10.0.3.100.
+#LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
+
+# Uncomment the next line if you want lxcbr0's dnsmasq to resolve the .lxc
+# domain.  You can then add "server=/lxc/10.0.3.1' (or your actual $LXC_ADDR)
+# to /etc/dnsmasq.conf, after which 'container1.lxc' will resolve on your
+# host.
+#LXC_DOMAIN="lxc"
+EOF
+fi
+
 %post   libs -p /sbin/ldconfig
 %postun libs -p /sbin/ldconfig
 
 %files
 %defattr(-,root,root)
 %{_bindir}/*
+# openSUSE/SUSE
+%if 0%{?suse_version} >= 1210
+%dir  %{_sysconfdir}/apparmor.d
+%dir  %{_sysconfdir}/apparmor.d/abstractions
+%dir  %{_sysconfdir}/apparmor.d/abstractions/%{name}
+%config %{_sysconfdir}/apparmor.d/abstractions/%{name}/container-base
+%config %{_sysconfdir}/apparmor.d/abstractions/%{name}/start-container
+%config %{_sysconfdir}/apparmor.d/%{name}-containers
+%dir  %{_sysconfdir}/apparmor.d/%{name}
+%config %{_sysconfdir}/apparmor.d/%{name}/%{name}-default
+%config %{_sysconfdir}/apparmor.d/%{name}/%{name}-default-with-mounting
+%config %{_sysconfdir}/apparmor.d/%{name}/%{name}-default-with-nesting
+%config %{_sysconfdir}/apparmor.d/usr.bin.%{name}-start
+%endif
 %{_mandir}/man1/lxc*
 %{_mandir}/man5/lxc*
 %{_mandir}/man7/lxc*
+# not openSUSE/SUSE
+%if %{undefined suse_version}
 %{_mandir}/ja/man1/lxc*
 %{_mandir}/ja/man5/lxc*
 %{_mandir}/ja/man7/lxc*
+%endif
 %{_datadir}/doc/*
 %{_datadir}/lxc/*
 %{_sysconfdir}/bash_completion.d
+%{_sysconfdir}/sysconfig/*
 %config(noreplace) %{_sysconfdir}/lxc/*
+%config(noreplace) %{_sysconfdir}/sysconfig/*
 
 %if %{with_systemd}
+%{_unitdir}/lxc-net.service
 %{_unitdir}/lxc.service
 %else
 %{_sysconfdir}/rc.d/init.d/lxc
+%{_sysconfdir}/rc.d/init.d/lxc-net
 %endif
 
 %files libs
@@ -154,7 +257,8 @@ 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-helper
+%attr(555,root,root) %{_libexecdir}/%{name}/lxc-net
+%attr(555,root,root) %{_libexecdir}/%{name}/lxc-containers
 %endif
 
 %if %{with_python}
index c65a15db9a332cf70b02e66c8b369286b8319dcf..da3f78e1f64f9d44446f2f35f00ceb8a0820505d 100644 (file)
@@ -165,9 +165,8 @@ bin_SCRIPTS = lxc-checkconfig
 EXTRA_DIST = \
        lxc-device \
        lxc-ls \
-       lxc-top.lua \
-       lxc.net \
-       lxc-restore-net
+       lxc-restore-net \
+       lxc-top.lua
 
 if ENABLE_PYTHON
 bin_SCRIPTS += lxc-device
@@ -256,7 +255,6 @@ endif
 install-exec-local: install-soPROGRAMS
        mkdir -p $(DESTDIR)$(datadir)/lxc
        install -c -m 644 lxc.functions $(DESTDIR)$(datadir)/lxc
-       install -c -m 755 lxc.net $(DESTDIR)$(datadir)/lxc
        mv $(DESTDIR)$(libdir)/liblxc.so $(DESTDIR)$(libdir)/liblxc.so.$(VERSION)
        cd $(DESTDIR)$(libdir); \
        ln -sf liblxc.so.$(VERSION) liblxc.so.$(firstword $(subst ., ,$(VERSION))); \
diff --git a/src/lxc/lxc.net b/src/lxc/lxc.net
deleted file mode 100755 (executable)
index 9ec9695..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/sh
-set -eu
-
-USE_LXC_BRIDGE="true"
-LXC_BRIDGE="lxcbr0"
-LXC_ADDR="10.0.3.1"
-LXC_NETMASK="255.255.255.0"
-LXC_NETWORK="10.0.3.0/24"
-LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
-LXC_DHCP_MAX="253"
-LXC_DHCP_CONFILE=""
-varrun="/run/lxc"
-LXC_DOMAIN=""
-
-start() {
-       [ -f /etc/default/lxc ] && . /etc/default/lxc
-
-       [ "x$USE_LXC_BRIDGE" = "xtrue" ] || { stop; exit 0; }
-
-       use_iptables_lock="-w"
-       iptables -w -L -n > /dev/null 2>&1 || use_iptables_lock=""
-       cleanup() {
-               # dnsmasq failed to start, clean up the bridge
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 53 -j ACCEPT
-               iptables $use_iptables_lock -D FORWARD -i ${LXC_BRIDGE} -j ACCEPT
-               iptables $use_iptables_lock -D FORWARD -o ${LXC_BRIDGE} -j ACCEPT
-               iptables $use_iptables_lock -t nat -D POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE || true
-               iptables $use_iptables_lock -t mangle -D POSTROUTING -o ${LXC_BRIDGE} -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
-               ifconfig ${LXC_BRIDGE} down || true
-               brctl delbr ${LXC_BRIDGE} || true
-       }
-
-       if [ -d /sys/class/net/${LXC_BRIDGE} ]; then
-               if [ ! -f ${varrun}/network_up ]; then
-                       # bridge exists, but we didn't start it
-                       stop;
-               fi
-               exit 0;
-       fi
-
-       # set up the lxc network
-       brctl addbr ${LXC_BRIDGE} || { echo "Missing bridge support in kernel"; stop; exit 0; }
-       echo 1 > /proc/sys/net/ipv4/ip_forward
-       mkdir -p ${varrun}
-       ifconfig ${LXC_BRIDGE} ${LXC_ADDR} netmask ${LXC_NETMASK} up
-       iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
-       iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
-       iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
-       iptables $use_iptables_lock -I INPUT -i ${LXC_BRIDGE} -p tcp --dport 53 -j ACCEPT
-       iptables $use_iptables_lock -I FORWARD -i ${LXC_BRIDGE} -j ACCEPT
-       iptables $use_iptables_lock -I FORWARD -o ${LXC_BRIDGE} -j ACCEPT
-       iptables $use_iptables_lock -t nat -A POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE
-       iptables $use_iptables_lock -t mangle -A POSTROUTING -o ${LXC_BRIDGE} -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
-
-       LXC_DOMAIN_ARG=""
-       if [ -n "$LXC_DOMAIN" ]; then
-               LXC_DOMAIN_ARG="-s $LXC_DOMAIN -S /$LXC_DOMAIN/"
-       fi
-       DNSMASQ_USER="lxc-dnsmasq"
-       if ! getent passwd ${DNSMASQ_USER} >/dev/null; then
-               DNSMASQ_USER="dnsmasq"
-       fi
-       dnsmasq $LXC_DOMAIN_ARG -u ${DNSMASQ_USER} --strict-order --bind-interfaces --pid-file=${varrun}/dnsmasq.pid --conf-file=${LXC_DHCP_CONFILE} --listen-address ${LXC_ADDR} --dhcp-range ${LXC_DHCP_RANGE} --dhcp-lease-max=${LXC_DHCP_MAX} --dhcp-no-override --except-interface=lo --interface=${LXC_BRIDGE} --dhcp-leasefile=/var/lib/misc/dnsmasq.${LXC_BRIDGE}.leases --dhcp-authoritative || cleanup
-       touch ${varrun}/network_up
-}
-
-stop() {
-       [ -f /etc/default/lxc ] && . /etc/default/lxc
-       [ -f "${varrun}/network_up" ] || exit 0;
-       # if $LXC_BRIDGE has attached interfaces, don't shut it down
-       ls /sys/class/net/${LXC_BRIDGE}/brif/* > /dev/null 2>&1 && exit 0;
-
-       if [ -d /sys/class/net/${LXC_BRIDGE} ]; then
-               use_iptables_lock="-w"
-               iptables -w -L -n > /dev/null 2>&1 || use_iptables_lock=""
-               ifconfig ${LXC_BRIDGE} down
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 67 -j ACCEPT
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 67 -j ACCEPT
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p udp --dport 53 -j ACCEPT
-               iptables $use_iptables_lock -D INPUT -i ${LXC_BRIDGE} -p tcp --dport 53 -j ACCEPT
-               iptables $use_iptables_lock -D FORWARD -i ${LXC_BRIDGE} -j ACCEPT
-               iptables $use_iptables_lock -D FORWARD -o ${LXC_BRIDGE} -j ACCEPT
-               iptables $use_iptables_lock -t nat -D POSTROUTING -s ${LXC_NETWORK} ! -d ${LXC_NETWORK} -j MASQUERADE || true
-               iptables $use_iptables_lock -t mangle -D POSTROUTING -o ${LXC_BRIDGE} -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
-               pid=`cat ${varrun}/dnsmasq.pid 2>/dev/null` && kill -9 $pid || true
-               rm -f ${varrun}/dnsmasq.pid
-               brctl delbr ${LXC_BRIDGE}
-       fi
-       rm -f ${varrun}/network_up
-}
-
-if [ "$1" = start ]; then
-       start
-elif [ "$1" = stop ]; then
-       stop
-else
-       echo "Usage: $0 start|stop" >&2
-       exit 1
-fi
-