diff options
Diffstat (limited to '')
-rw-r--r-- | share/config/container.conf.in | 6 | ||||
-rw-r--r-- | share/doc/examples/cairon-backports.cfg | 1 | ||||
-rw-r--r-- | share/doc/examples/jessie.cfg | 2 | ||||
-rw-r--r-- | share/man/container-auto.1.txt | 78 | ||||
-rwxr-xr-x | share/scripts/debconf | 44 | ||||
-rwxr-xr-x | share/scripts/debconf.d/0003-debconf | 21 | ||||
-rw-r--r-- | share/scripts/debconf.d/0003-debconf.templates | 6 | ||||
-rwxr-xr-x | share/scripts/debootstrap | 2 | ||||
-rw-r--r-- | share/systemd/container-auto.service (renamed from share/systemd/container-autostart.service) | 4 | ||||
-rw-r--r-- | share/systemd/container@.service | 12 |
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 |