summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--share/config/container.conf.in6
-rw-r--r--share/doc/examples/cairon-backports.cfg1
-rw-r--r--share/doc/examples/jessie.cfg2
-rw-r--r--share/man/container-auto.1.txt78
-rwxr-xr-xshare/scripts/debconf44
-rwxr-xr-xshare/scripts/debconf.d/0003-debconf21
-rw-r--r--share/scripts/debconf.d/0003-debconf.templates6
-rwxr-xr-xshare/scripts/debootstrap2
-rw-r--r--share/systemd/container-auto.service (renamed from share/systemd/container-autostart.service)4
-rw-r--r--share/systemd/container@.service12
10 files changed, 161 insertions, 15 deletions
diff --git a/share/config/container.conf.in b/share/config/container.conf.in
index fbf8078..dd52adb 100644
--- a/share/config/container.conf.in
+++ b/share/config/container.conf.in
@@ -1,15 +1,15 @@
# container-tools: @NAME@
[start]
-cnt.autostart=@CNT_AUTOSTART@
+cnt.auto=@CNT_AUTO@
+cnt.network-bridge=@CNT_NETWORK_BRIDGE@
bind=@BIND@
boot=@BOOT@
capability=@CAPABILITY@
directory=@DIRECTORY@
drop-capability=@DROP_CAPABILITY@
machine=@MACHINE@
-network-veth=@NETWORK_VETH@
-network-bridge=@NETWORK_BRIDGE@
+network-veth-extra=@NETWORK_VETH_EXTRA@
link-journal=@LINK_JOURNAL@
register=@REGISTER@
diff --git a/share/doc/examples/cairon-backports.cfg b/share/doc/examples/cairon-backports.cfg
index 2fca922..dd459f2 100644
--- a/share/doc/examples/cairon-backports.cfg
+++ b/share/doc/examples/cairon-backports.cfg
@@ -30,6 +30,7 @@ container-tools cnt-debconf/root-password string progress
# Network IP configuration
container-tools cnt-debconf/network0/bridge string br0
+container-tools cnt-debconf/network0/veth string veth0
container-tools cnt-debconf/network0/ipv4-method select static
container-tools cnt-debconf/network0/ipv4-comment string Primary network interfaces
container-tools cnt-debconf/network0/ipv4-address string 192.168.0.2
diff --git a/share/doc/examples/jessie.cfg b/share/doc/examples/jessie.cfg
index e9f9d46..0ec33e6 100644
--- a/share/doc/examples/jessie.cfg
+++ b/share/doc/examples/jessie.cfg
@@ -28,5 +28,5 @@ container-tools cnt-debconf/packages string openssh-server
container-tools cnt-debconf/root-password string debian
#container-tools cnt-debconf/root-password-crypted string
-container-tools cnt-debconf/network-bridge string br0
+container-tools cnt-debconf/network0/bridge string br0
#container-tools cnt-debconf/network-mac string
diff --git a/share/man/container-auto.1.txt b/share/man/container-auto.1.txt
new file mode 100644
index 0000000..af2d3c7
--- /dev/null
+++ b/share/man/container-auto.1.txt
@@ -0,0 +1,78 @@
+// container-tools - Manage systemd-nspawn containers
+// Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+CONTAINER-START(1)
+==================
+:doctype: manpage
+:man manual: Open Infrastructure
+:man source: container-tools
+:man version: {revnumber}
+
+
+NAME
+----
+container-auto - Start/stop all container automatically at boot/shutdown
+
+
+SYNOPSIS
+--------
+*container auto* ['OPTIONS']
+
+
+DESCRIPTION
+-----------
+The container auto command starts or stops all container on the host system.
+
+
+OPTIONS
+-------
+The following container options are available:
+
+*-s, --start*::
+ Start all container on the host system.
+
+*-t, --stop*::
+ Stop all container on the host system.
+
+
+EXAMPLES
+--------
+*Start all container on the host system:*::
+ sudo container auto --start
+
+*Stop all container on the host system:*::
+ sudo container auto --stop
+
+
+SEE ALSO
+--------
+container-tools(7),
+container(1).
+
+
+HOMEPAGE
+--------
+More information about container-tools and the Open Infrastructure project can be found on the homepage at http://open-infrastructure.net.
+
+
+BUGS
+----
+Bugs can be reported by opening an issue in the GitHub repository at http://github.com/open-infrastructure/container-tools.
+
+
+AUTHORS
+-------
+container-tools was written by Daniel Baumann <daniel.baumann@open-infrastructure.net>.
diff --git a/share/scripts/debconf b/share/scripts/debconf
index cbde345..55c2b8b 100755
--- a/share/scripts/debconf
+++ b/share/scripts/debconf
@@ -46,7 +46,7 @@ Parameters ()
shift 2
;;
- --cnt.autostart)
+ --cnt.auto)
# ignore
shift 2
;;
@@ -702,7 +702,7 @@ EOF
then
echo "${CONTAINER_COMMAND}" > "${DIRECTORY}/.container-command"
- chmod 0755 "sh /.container-command"
+ chmod 0755 "${DIRECTORY}/.container-command"
Chroot "${DIRECTORY}" "sh /.container-command"
rm -f "${DIRECTORY}/.container-command"
@@ -749,7 +749,7 @@ EOF
none)
cat >> "${DIRECTORY}/etc/network/interfaces.tmp" << EOF
-iface host${NUMBER} inet manual
+iface eth${NUMBER} inet manual
EOF
;;
@@ -757,8 +757,8 @@ EOF
dhcp)
cat >> "${DIRECTORY}/etc/network/interfaces.tmp" << EOF
-auto host${NUMBER}
-iface host${NUMBER} inet dhcp
+auto eth${NUMBER}
+iface eth${NUMBER} inet dhcp
EOF
;;
@@ -766,8 +766,8 @@ EOF
static)
cat >> "${DIRECTORY}/etc/network/interfaces.tmp" << EOF
-auto host${NUMBER}
-iface host${NUMBER} inet static
+auto eth${NUMBER}
+iface eth${NUMBER} inet static
address ${IPV4_ADDRESS}
EOF
@@ -902,7 +902,33 @@ Commands ()
fi
# config (FIXME)
- sed -i -e "s|^network-bridge=.*|network-bridge=${NETWORK0_BRIDGE}|" "${CONFIG}/${NAME}.conf"
+
+ # maximum of 15 characters, prefix is 'veth-'
+ HOSTNAME_SHORT="$(echo ${NAME} | cut -c-8)"
+ HOST_INTERFACE_NAME="$(echo ${NETWORK0_VETH:-veth-${HOSTNAME_SHORT}-0})"
+
+ sed -i -e "s|^cnt.network-bridge=.*|cnt.network-bridge=${HOST_INTERFACE_NAME}:${NETWORK0_BRIDGE:-br0}|g" "${CONFIG}/${NAME}.conf"
+ sed -i -e "s|^network-veth-extra=.*|network-veth-extra=${HOST_INTERFACE_NAME}:eth0|g" "${CONFIG}/${NAME}.conf"
+
+ for NUMBER in $(seq 1 ${NETWORK_NUMBER})
+ do
+ eval IPV4_METHOD="$`echo NETWORK${NUMBER}_IPV4_METHOD`"
+
+ if [ -z "${IPV4_METHOD}" ]
+ then
+ continue
+ fi
+
+ eval HOST_INTERFACE_NAME="$`echo NETWORK${NUMBER}_VETH`"
+
+ HOST_INTERFACE_NAME="$(echo ${HOST_INTERFACE_NAME:-veth-${HOSTNAME_SHORT}-${NUMBER}})"
+ CONTAINER_INTERFACE_NAME="eth${NUMBER}"
+
+ sed -i -e "/^register=.*/ a network-veth-extra=${HOST_INTERFACE_NAME}:${CONTAINER_INTERFACE_NAME}" "${CONFIG}/${NAME}.conf"
+
+ eval BRIDGE="$`echo NETWORK${NUMBER}_BRIDGE`"
+ sed -i -e "/^register=.*/ a cnt.network-bridge=${HOST_INTERFACE_NAME}:${BRIDGE:-br${NUMBER}}" "${CONFIG}/${NAME}.conf"
+ done
# Setting root password
echo root:${ROOT_PASSWORD} | chroot "${DIRECTORY}" chpasswd
@@ -932,6 +958,8 @@ SYSTEM="${MACHINES}/${NAME}"
Debconf
+export NAME
+
# Run debconf parts
for SCRIPT in /usr/share/container-tools/scripts/debconf.d/*
do
diff --git a/share/scripts/debconf.d/0003-debconf b/share/scripts/debconf.d/0003-debconf
index 03db192..df14ef0 100755
--- a/share/scripts/debconf.d/0003-debconf
+++ b/share/scripts/debconf.d/0003-debconf
@@ -673,6 +673,10 @@ Network_defaults ()
# * respect pre-existing interfaces (or interfaces.d)
# * add support for bridges (make interface configuration more generic?)
+ HOSTNAME_SHORT="$(echo veth-$(echo ${NAME} | cut -c-8)-0)"
+ VETH_NAME="$(echo ${HOSTNAME_SHORT:-veth0})"
+
+ NETWORK0_VETH="${NETWORK0_VETH:-$VETH_NAME}"
NETWORK0_BRIDGE="${NETWORK0_BRIDGE:-br0}"
NETWORK0_IPV4_METHOD="${NETWORK0_IPV4_METHOD:-dhcp}"
NETWORK0_IPV4_ADDRESS="${NETWORK0_IPV4_ADDRESS:-192.168.1.2}"
@@ -695,6 +699,9 @@ Network ()
db_get cnt-debconf/network0/bridge
NETWORK0_BRIDGE="${RET}" # string (w/o empty)
+ db_get cnt-debconf/network0/veth
+ NETWORK0_VETH="${RET}" # string (w/o empty)
+
db_get cnt-debconf/network0/ipv4-method
NETWORK0_IPV4_METHOD="${RET}" # select
@@ -739,6 +746,9 @@ Network ()
db_set cnt-debconf/network0/bridge "${NETWORK0_BRIDGE}"
db_fset cnt-debconf/network0/bridge seen false
+ db_set cnt-debconf/network0/veth "${NETWORK0_VETH}"
+ db_fset cnt-debconf/network0/veth seen false
+
db_set cnt-debconf/network0/ipv4-method "${NETWORK0_IPV4_METHOD}"
db_fset cnt-debconf/network0/ipv4-method seen false
@@ -785,6 +795,9 @@ Network ()
db_get cnt-debconf/network0/bridge
NETWORK0_BRIDGE="${RET}" # select
+ db_get cnt-debconf/network0/veth
+ NETWORK0_VETH="${RET}" # select
+
db_get cnt-debconf/network0/ipv4-method
NETWORK0_IPV4_METHOD="${RET}" # select
@@ -840,6 +853,11 @@ Network ()
eval NETWORK${NUMBER}_BRIDGE="\"${RET}\"" # string (w/o empty)
fi
+ if db_get cnt-debconf/network${NUMBER}/veth
+ then
+ eval NETWORK${NUMBER}_VETH="\"${RET}\"" # string (w/o empty)
+ fi
+
if db_get cnt-debconf/network${NUMBER}/ipv4-comment
then
eval NETWORK${NUMBER}_IPV4_COMMENT="\"${RET}\"" # string (w/ empty)
@@ -911,6 +929,9 @@ Network ()
eval BRIDGE="$`echo NETWORK${NUMBER}_BRIDGE`"
echo "NETWORK${NUMBER}_BRIDGE=\"${BRIDGE}\"" >> "${DEBCONF_TMPDIR}/debconf.default"
+ eval VETH="$`echo NETWORK${NUMBER}_VETH`"
+ echo "NETWORK${NUMBER}_VETH=\"${VETH}\"" >> "${DEBCONF_TMPDIR}/debconf.default"
+
eval COMMENT="$`echo NETWORK${NUMBER}_IPV4_COMMENT`"
echo "NETWORK${NUMBER}_IPV4_COMMENT=\"${COMMENT}\"" >> "${DEBCONF_TMPDIR}/debconf.default"
diff --git a/share/scripts/debconf.d/0003-debconf.templates b/share/scripts/debconf.d/0003-debconf.templates
index c568d72..82a7ca1 100644
--- a/share/scripts/debconf.d/0003-debconf.templates
+++ b/share/scripts/debconf.d/0003-debconf.templates
@@ -98,6 +98,12 @@ Default:
Description: Bridge
Bridge.
+Template: cnt-debconf/network0/veth
+Type: string
+Default:
+Description: Veth name
+ Veth name.
+
Template: cnt-debconf/network0/ipv4-method
Type: select
Choices: dhcp, static, none
diff --git a/share/scripts/debootstrap b/share/scripts/debootstrap
index 208e050..0a9e733 100755
--- a/share/scripts/debootstrap
+++ b/share/scripts/debootstrap
@@ -45,7 +45,7 @@ Parameters ()
shift 2
;;
- --cnt.autostart)
+ --cnt.auto)
# ignore
shift 2
;;
diff --git a/share/systemd/container-autostart.service b/share/systemd/container-auto.service
index 076aa41..e9addd7 100644
--- a/share/systemd/container-autostart.service
+++ b/share/systemd/container-auto.service
@@ -5,8 +5,8 @@ After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
-ExecStart=/usr/bin/container-autostart
-#ExecStop=
+ExecStart=/usr/bin/container auto --start
+ExecStop=/usr/bin/container auto --stop
Delegate=yes
StandardOutput=syslog
StandardError=syslog
diff --git a/share/systemd/container@.service b/share/systemd/container@.service
new file mode 100644
index 0000000..0bd6766
--- /dev/null
+++ b/share/systemd/container@.service
@@ -0,0 +1,12 @@
+[Unit]
+Description="Container: %i"
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/container start --name %i --nspawn
+ExecStartPost=/usr/bin/container start --name %i --start
+ExecStopPost=/usr/bin/container stop -n %i --clean
+KillMode=mixed
+
+[Install]
+WantedBy=multi-user.target