From b90ddebe1d1cb49c30c3a9d99119e3b0d14995fd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 18 May 2016 20:28:46 +0200 Subject: Merging upstream version 20160515. Signed-off-by: Daniel Baumann --- share/config/container.conf.in | 6 +- share/doc/examples/cairon-backports.cfg | 1 + share/doc/examples/jessie.cfg | 2 +- share/man/container-auto.1.txt | 78 ++++++++++++++++++++++++++ share/scripts/debconf | 44 ++++++++++++--- share/scripts/debconf.d/0003-debconf | 21 +++++++ share/scripts/debconf.d/0003-debconf.templates | 6 ++ share/scripts/debootstrap | 2 +- share/systemd/container-auto.service | 15 +++++ share/systemd/container-autostart.service | 15 ----- share/systemd/container@.service | 12 ++++ 11 files changed, 174 insertions(+), 28 deletions(-) create mode 100644 share/man/container-auto.1.txt create mode 100644 share/systemd/container-auto.service delete mode 100644 share/systemd/container-autostart.service create mode 100644 share/systemd/container@.service (limited to 'share') 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 +// +// 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 . + +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 . 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-auto.service b/share/systemd/container-auto.service new file mode 100644 index 0000000..e9addd7 --- /dev/null +++ b/share/systemd/container-auto.service @@ -0,0 +1,15 @@ +[Unit] +Description=container-tools automatic start +After=network.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/bin/container auto --start +ExecStop=/usr/bin/container auto --stop +Delegate=yes +StandardOutput=syslog +StandardError=syslog + +[Install] +WantedBy=multi-user.target diff --git a/share/systemd/container-autostart.service b/share/systemd/container-autostart.service deleted file mode 100644 index 076aa41..0000000 --- a/share/systemd/container-autostart.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=container-tools automatic start -After=network.target - -[Service] -Type=oneshot -RemainAfterExit=yes -ExecStart=/usr/bin/container-autostart -#ExecStop= -Delegate=yes -StandardOutput=syslog -StandardError=syslog - -[Install] -WantedBy=multi-user.target 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 -- cgit v1.2.3