summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-02-09 16:18:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-02-09 16:18:22 +0000
commitc011654fff348560957804ce4db060b8f1b40f89 (patch)
tree9065f9029812e692f8ed9c6d6696e58a624ff29c
parentAdding upstream version 20201030. (diff)
downloadopen-infrastructure-compute-tools-82fd6099b0927dfbd8011b3ee84269bc3a67150a.tar.xz
open-infrastructure-compute-tools-82fd6099b0927dfbd8011b3ee84269bc3a67150a.zip
Adding upstream version 20210101.upstream/20210101
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--CHANGELOG.txt12
-rw-r--r--Makefile2
-rw-r--r--VERSION.txt2
-rwxr-xr-xbin/container2
-rwxr-xr-xbin/container-shell2
-rwxr-xr-xlib/container/auto2
-rwxr-xr-xlib/container/console2
-rwxr-xr-xlib/container/create2
-rwxr-xr-xlib/container/enter2
-rwxr-xr-xlib/container/key2
-rwxr-xr-xlib/container/limit2
-rwxr-xr-xlib/container/list2
-rwxr-xr-xlib/container/log2
-rwxr-xr-xlib/container/move2
-rwxr-xr-xlib/container/remove20
-rwxr-xr-xlib/container/restart35
-rwxr-xr-xlib/container/run127
-rwxr-xr-xlib/container/start24
-rwxr-xr-xlib/container/stop33
-rwxr-xr-xlib/container/top2
-rwxr-xr-xlib/container/version2
-rw-r--r--share/bash-completion/container2
-rw-r--r--share/doc/HOST-SETUP.txt20
-rwxr-xr-xshare/doc/examples/container-images.sh2
-rw-r--r--share/doc/examples/engywuck-backports.cfg4
-rwxr-xr-xshare/hooks/post-start.chown-nvidia.sh2
-rwxr-xr-xshare/hooks/pre-create.git-pull.sh2
-rwxr-xr-xshare/hooks/pre-start.unlink-console.sh2
-rw-r--r--share/man/Makefile2
-rw-r--r--share/man/compute-tools.7.txt2
-rw-r--r--share/man/container-auto.1.txt2
-rw-r--r--share/man/container-console.1.txt2
-rw-r--r--share/man/container-create-curl.1.txt2
-rw-r--r--share/man/container-create-debconf.1.txt2
-rw-r--r--share/man/container-create-debootstrap.1.txt2
-rw-r--r--share/man/container-create.1.txt2
-rw-r--r--share/man/container-enter.1.txt2
-rw-r--r--share/man/container-key.1.txt2
-rw-r--r--share/man/container-limit.1.txt2
-rw-r--r--share/man/container-list.1.txt2
-rw-r--r--share/man/container-log.1.txt2
-rw-r--r--share/man/container-move.1.txt2
-rw-r--r--share/man/container-remove.1.txt2
-rw-r--r--share/man/container-restart.1.txt5
-rw-r--r--share/man/container-run.1.txt80
-rw-r--r--share/man/container-shell.1.txt2
-rw-r--r--share/man/container-start.1.txt2
-rw-r--r--share/man/container-stop.1.txt5
-rw-r--r--share/man/container-top.1.txt2
-rw-r--r--share/man/container-version.1.txt2
-rw-r--r--share/man/container.1.txt5
-rwxr-xr-xshare/scripts/curl2
-rwxr-xr-xshare/scripts/curl.d/0001-debconf2
-rwxr-xr-xshare/scripts/debconf2
-rwxr-xr-xshare/scripts/debconf.d/0001-preseed-file2
-rwxr-xr-xshare/scripts/debconf.d/0002-preseed-debconf2
-rwxr-xr-xshare/scripts/debconf.d/0003-debconf6
-rwxr-xr-xshare/scripts/debootstrap2
58 files changed, 378 insertions, 88 deletions
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index cf94106..171ca3c 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,15 @@
+2021-01-01 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+
+ * Releasing version 20210101.
+
+ [ Daniel Baumann ]
+
+ * Adding container run command to execute programs within containers.
+ * Cleaning up and harmonizing verbose output for container remove, restart, start, and stop commands.
+ * Expanding host-setup documentation about ipv4/ipv6 dual-stack bridge configuration.
+ * Switching redirector address for progress-linux.
+ * Updating copyright notices for 2021.
+
2020-10-30 Daniel Baumann <daniel.baumann@open-infrastructure.net>
* Releasing version 20201030.
diff --git a/Makefile b/Makefile
index 13a4661..2b1fb37 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/VERSION.txt b/VERSION.txt
index d724ea4..71bc3f4 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-20201030
+20210101
diff --git a/bin/container b/bin/container
index 3ab1a69..4570dc3 100755
--- a/bin/container
+++ b/bin/container
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/bin/container-shell b/bin/container-shell
index 27bc5a2..016724f 100755
--- a/bin/container-shell
+++ b/bin/container-shell
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/auto b/lib/container/auto
index 16c2933..6c1d47b 100755
--- a/lib/container/auto
+++ b/lib/container/auto
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/console b/lib/container/console
index 2a41bf5..2dc6546 100755
--- a/lib/container/console
+++ b/lib/container/console
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/create b/lib/container/create
index 519a815..bdf9fb4 100755
--- a/lib/container/create
+++ b/lib/container/create
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/enter b/lib/container/enter
index 144a06a..fed1193 100755
--- a/lib/container/enter
+++ b/lib/container/enter
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/key b/lib/container/key
index f4e337c..4cbdaa0 100755
--- a/lib/container/key
+++ b/lib/container/key
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/limit b/lib/container/limit
index 233459a..99ef03a 100755
--- a/lib/container/limit
+++ b/lib/container/limit
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/list b/lib/container/list
index cf7b148..ba794ab 100755
--- a/lib/container/list
+++ b/lib/container/list
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/log b/lib/container/log
index 2740213..a18c421 100755
--- a/lib/container/log
+++ b/lib/container/log
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/move b/lib/container/move
index f87e5a8..e20d8a8 100755
--- a/lib/container/move
+++ b/lib/container/move
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/remove b/lib/container/remove
index 820e45e..75ebd60 100755
--- a/lib/container/remove
+++ b/lib/container/remove
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
@@ -126,12 +126,6 @@ case "${NAME}" in
for NAME in ${NAMES}
do
- case "${VERBOSE}" in
- true)
- echo "Removing container ${NAME}..."
- ;;
- esac
-
${PROGRAM} remove --name ${NAME} ${OPTIONS_ALL} || true
done
@@ -238,9 +232,21 @@ then
fi
# Run
+case "${VERBOSE}" in
+ true)
+ echo -n "Removing container ${NAME}..."
+ ;;
+esac
+
rm --preserve-root --one-file-system -rf ${RM_OPTIONS} "${MACHINES}/${NAME}"
rm -f ${RM_OPTIONS} "${CONFIG}/${NAME}.conf"
+case "${VERBOSE}" in
+ true)
+ echo " done."
+ ;;
+esac
+
# Post hooks
for FILE in "${HOOKS}/post-${COMMAND}".* "${HOOKS}/${NAME}.post-${COMMAND}"
do
diff --git a/lib/container/restart b/lib/container/restart
index f78cfff..3c84f4d 100755
--- a/lib/container/restart
+++ b/lib/container/restart
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
@@ -30,8 +30,8 @@ Parameters ()
{
OPTIONS_ALL=""
- GETOPT_LONGOPTIONS="name:,"
- GETOPT_OPTIONS="n:,"
+ GETOPT_LONGOPTIONS="name:,verbose,"
+ GETOPT_OPTIONS="n:,v,"
PARAMETERS="$(getopt --longoptions ${GETOPT_LONGOPTIONS} --name=${COMMAND} --options ${GETOPT_OPTIONS} --shell sh -- ${@})"
@@ -51,6 +51,13 @@ Parameters ()
shift 2
;;
+ -v|--verbose)
+ VERBOSE="true"
+ shift 1
+
+ OPTIONS_ALL="${OPTIONS_ALL} --verbose"
+ ;;
+
--)
shift 1
break
@@ -66,7 +73,7 @@ Parameters ()
Usage ()
{
- echo "Usage: ${PROGRAM} ${COMMAND} -n|--name NAME" >&2
+ echo "Usage: ${PROGRAM} ${COMMAND} -n|--name NAME [-v|--verbose]" >&2
exit 1
}
@@ -83,13 +90,7 @@ case "${NAME}" in
for NAME in ${NAMES}
do
- case "${VERBOSE}" in
- true)
- echo "Restarting container ${NAME}..."
- ;;
- esac
-
- ${PROGRAM} restart --name ${NAME} || true
+ ${PROGRAM} restart --name ${NAME} ${OPTIONS_ALL} || true
done
exit 0
@@ -112,8 +113,20 @@ do
done
# Run
+case "${VERBOSE}" in
+ true)
+ echo -n "Restarting container ${NAME}..."
+ ;;
+esac
+
machinectl reboot ${NAME}
+case "${VERBOSE}" in
+ true)
+ echo " done."
+ ;;
+esac
+
# Post hooks
for FILE in "${HOOKS}/post-${COMMAND}".* "${HOOKS}/${NAME}.post-${COMMAND}"
do
diff --git a/lib/container/run b/lib/container/run
new file mode 100755
index 0000000..f6323c0
--- /dev/null
+++ b/lib/container/run
@@ -0,0 +1,127 @@
+#!/bin/sh
+
+# Copyright (C) 2014-2019 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# SPDX-License-Identifier: GPL-3.0+
+#
+# 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/>.
+
+set -e
+
+PROJECT="open-infrastructure"
+PROGRAM="container"
+COMMAND="$(basename ${0})"
+
+HOOKS="/etc/${PROJECT}/${PROGRAM}/hooks"
+MACHINES="/var/lib/machines"
+
+Parameters ()
+{
+ GETOPT_LONGOPTIONS="name:,"
+ GETOPT_OPTIONS="n:,"
+
+ PARAMETERS="$(getopt --longoptions ${GETOPT_LONGOPTIONS} --name=${COMMAND} --options ${GETOPT_OPTIONS} --shell sh -- ${@})"
+
+ if [ "${?}" != "0" ]
+ then
+ echo "'${COMMAND}': getopt exit" >&2
+ exit 1
+ fi
+
+ eval set -- "${PARAMETERS}"
+
+ while true
+ do
+ case "${1}" in
+ -n|--name)
+ NAME="${2}"
+ shift 2
+ ;;
+
+ --)
+ shift 1
+ break
+ ;;
+
+ *)
+ echo "'${COMMAND}': getopt error" >&2
+ exit 1
+ ;;
+ esac
+ done
+}
+
+Usage ()
+{
+ echo "Usage: ${PROGRAM} ${COMMAND} -n|--name NAME -- COMMAND" >&2
+ exit 1
+}
+
+Parameters "${@}"
+
+if [ -z "${NAME}" ]
+then
+ Usage
+fi
+
+if [ ! -e "${MACHINES}/${NAME}" ]
+then
+ echo "'${NAME}': no such container" >&2
+ exit 1
+fi
+
+STATE="$(machinectl show ${NAME} 2>&1 | awk -F= '/^State=/ { print $2 }')"
+
+case "${STATE}" in
+ running)
+ ;;
+
+ *)
+ echo "'${NAME}': container is not running" >&2
+ exit 1
+ ;;
+esac
+
+LEADER="$(machinectl status ${NAME} | awk '/Leader: / { print $2 }')"
+
+# Pre hooks
+for FILE in "${HOOKS}/pre-${COMMAND}".* "${HOOKS}/${NAME}.pre-${COMMAND}"
+do
+ if [ -x "${FILE}" ]
+ then
+ "${FILE}"
+ fi
+done
+
+SSH_CLIENT="${SSH_CLIENT:-127.0.0.1 0 0}"
+
+RUN="$(echo ${@} | awk -F-- '{ print $2}')"
+
+# Run
+nsenter --all --target "${LEADER}" --wd="${MACHINES}/${NAME}/root" /usr/bin/script -c "LC_ALL=C.UTF-8 /bin/bash -l -c \"${RUN}\"" -q /dev/null
+
+case "${SSH_CLIENT}" in
+ 127.0.0.1*)
+ unset SSH_CLIENT
+ ;;
+esac
+
+# Post hooks
+for FILE in "${HOOKS}/post-${COMMAND}".* "${HOOKS}/${NAME}.post-${COMMAND}"
+do
+ if [ -x "${FILE}" ]
+ then
+ "${FILE}"
+ fi
+done
diff --git a/lib/container/start b/lib/container/start
index 6309fb1..30aee53 100755
--- a/lib/container/start
+++ b/lib/container/start
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
@@ -77,6 +77,9 @@ Parameters ()
-v|--verbose)
VERBOSE="true"
+ shift 1
+
+ OPTIONS_ALL="${OPTIONS_ALL} --verbose"
;;
--)
@@ -114,12 +117,6 @@ case "${NAME}" in
for NAME in ${NAMES}
do
- case "${VERBOSE}" in
- true)
- echo "Starting container ${NAME}..."
- ;;
- esac
-
${PROGRAM} start --name ${NAME} ${OPTIONS_ALL} || true
done
@@ -516,6 +513,19 @@ case "${START}" in
*)
# Run
+
+ case "${VERBOSE}" in
+ true)
+ echo -n "Starting container ${NAME}..."
+ ;;
+ esac
+
${SETARCH} systemd-nspawn --keep-unit ${BIND} ${BIND_RO} ${BOOT} ${CAPABILITY} ${DIRECTORY} ${DROP_CAPABILITY} ${MACHINE} ${NETWORK_VETH_EXTRA} ${LINK_JOURNAL} ${REGISTER}
+
+ case "${VERBOSE}" in
+ true)
+ echo " done."
+ ;;
+ esac
;;
esac
diff --git a/lib/container/stop b/lib/container/stop
index a299cb1..6b8caee 100755
--- a/lib/container/stop
+++ b/lib/container/stop
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
@@ -33,8 +33,8 @@ Parameters ()
{
OPTIONS_ALL=""
- GETOPT_LONGOPTIONS="name:,force,clean,"
- GETOPT_OPTIONS="n:,f,"
+ GETOPT_LONGOPTIONS="name:,force,clean,verbose,"
+ GETOPT_OPTIONS="n:,f,v,"
PARAMETERS="$(getopt --longoptions ${GETOPT_LONGOPTIONS} --name=${COMMAND} --options ${GETOPT_OPTIONS} --shell sh -- ${@})"
@@ -69,6 +69,13 @@ Parameters ()
OPTONS_ALL="${OPTIONS_ALL} --clean"
;;
+ -v|--verbose)
+ VERBOSE="true"
+ shift 1
+
+ OPTIONS_ALL="${OPTIONS_ALL} --verbose"
+ ;;
+
--)
shift 1
break
@@ -84,7 +91,7 @@ Parameters ()
Usage ()
{
- echo "Usage: ${PROGRAM} ${COMMAND} -n|--name NAME [-f|--force]" >&2
+ echo "Usage: ${PROGRAM} ${COMMAND} -n|--name NAME [-f|--force] [-v|--verbose]" >&2
exit 1
}
@@ -122,12 +129,6 @@ case "${NAME}" in
for NAME in ${NAMES}
do
- case "${VERBOSE}" in
- true)
- echo "Stopping container ${NAME}..."
- ;;
- esac
-
${PROGRAM} stop --name ${NAME} ${OPTIONS_ALL} || true
done
@@ -253,6 +254,12 @@ case "${FORCE}" in
esac
# Run
+case "${VERBOSE}" in
+ true)
+ echo -n "Stopping container ${NAME}..."
+ ;;
+esac
+
machinectl ${MODE} ${NAME}
case "${FORCE}" in
@@ -266,6 +273,12 @@ case "${FORCE}" in
;;
esac
+case "${VERBOSE}" in
+ true)
+ echo " done."
+ ;;
+esac
+
# Post hooks
for FILE in "${HOOKS}/post-${COMMAND}".* "${HOOKS}/${NAME}.post-${COMMAND}"
do
diff --git a/lib/container/top b/lib/container/top
index 81c7436..d9baa1c 100755
--- a/lib/container/top
+++ b/lib/container/top
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/lib/container/version b/lib/container/version
index 8d7f052..c2b7716 100755
--- a/lib/container/version
+++ b/lib/container/version
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/bash-completion/container b/share/bash-completion/container
index 95199b1..4e49cec 100644
--- a/share/bash-completion/container
+++ b/share/bash-completion/container
@@ -1,7 +1,7 @@
# bash-completion
#
# Copyright (C) 2016 Andreas Kreuzer <andreas.kreuzer@open-infrastructure.net>
-# Copyright (C) 2016-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2016-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/doc/HOST-SETUP.txt b/share/doc/HOST-SETUP.txt
index d0a2395..6b368f0 100644
--- a/share/doc/HOST-SETUP.txt
+++ b/share/doc/HOST-SETUP.txt
@@ -216,3 +216,23 @@ IPv6 addresses and netmasks.
In order to use dual-stack, bridges must have a IPv4 address assigned
(can be a dummy one from a privacy range or 127.0.0.0/8).
+
+Let me repeat: dual-stack only works when you assign a primary IPv6 address
+(private or public, doesn't matter) *and* add an additional IPv4 address.
+Yes, the IPv4 address can be a private address, the containers can still
+have a public IPv4 address.
+
+A complete example looks like this:
+
+auto bridge0
+iface bridge0 inet6 static
+ address 2a07:6b47:4::4:1
+ netmask 48
+
+ up ip addr add 127.4.4.1 dev $IFACE
+ down ip addr del 127.4.4.1 dev $IFACE
+
+ bridge_fd 0
+ bridge_maxwait 0
+ bridge_stp 0
+ bridge-mcquerier 1
diff --git a/share/doc/examples/container-images.sh b/share/doc/examples/container-images.sh
index 8f1a2a3..7bb40b4 100755
--- a/share/doc/examples/container-images.sh
+++ b/share/doc/examples/container-images.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/doc/examples/engywuck-backports.cfg b/share/doc/examples/engywuck-backports.cfg
index 392c40d..9ca0288 100644
--- a/share/doc/examples/engywuck-backports.cfg
+++ b/share/doc/examples/engywuck-backports.cfg
@@ -17,8 +17,8 @@ compute-tools container/architecture select auto
compute-tools container/archives multiselect engywuck-security, engywuck-updates, engywuck-extras, engywuck-backports, engywuck-backports-extras
#compute-tools container/parent-archives multiselect
-compute-tools container/mirror string https://cdn.deb.progress-linux.org/packages
-compute-tools container/mirror-security string https://cdn.deb.progress-linux.org/packages
+compute-tools container/mirror string https://deb.progress-linux.org/packages
+compute-tools container/mirror-security string https://deb.progress-linux.org/packages
compute-tools container/parent-mirror string https://deb.debian.org/debian
compute-tools container/parent-mirror-security string http://security.debian.org
diff --git a/share/hooks/post-start.chown-nvidia.sh b/share/hooks/post-start.chown-nvidia.sh
index 4dbc247..e1ab35b 100755
--- a/share/hooks/post-start.chown-nvidia.sh
+++ b/share/hooks/post-start.chown-nvidia.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/hooks/pre-create.git-pull.sh b/share/hooks/pre-create.git-pull.sh
index 582479e..823440f 100755
--- a/share/hooks/pre-create.git-pull.sh
+++ b/share/hooks/pre-create.git-pull.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/hooks/pre-start.unlink-console.sh b/share/hooks/pre-start.unlink-console.sh
index 566a4de..3133a19 100755
--- a/share/hooks/pre-start.unlink-console.sh
+++ b/share/hooks/pre-start.unlink-console.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/man/Makefile b/share/man/Makefile
index 535b2b1..1500b15 100644
--- a/share/man/Makefile
+++ b/share/man/Makefile
@@ -1,6 +1,6 @@
# Makefile
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/man/compute-tools.7.txt b/share/man/compute-tools.7.txt
index bcd234f..f8d9c76 100644
--- a/share/man/compute-tools.7.txt
+++ b/share/man/compute-tools.7.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-auto.1.txt b/share/man/container-auto.1.txt
index b1aa550..3ed4c56 100644
--- a/share/man/container-auto.1.txt
+++ b/share/man/container-auto.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-console.1.txt b/share/man/container-console.1.txt
index 7f4fb03..8f35a8d 100644
--- a/share/man/container-console.1.txt
+++ b/share/man/container-console.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-create-curl.1.txt b/share/man/container-create-curl.1.txt
index c15ee4e..1095103 100644
--- a/share/man/container-create-curl.1.txt
+++ b/share/man/container-create-curl.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-create-debconf.1.txt b/share/man/container-create-debconf.1.txt
index 0381cae..f4092a0 100644
--- a/share/man/container-create-debconf.1.txt
+++ b/share/man/container-create-debconf.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-create-debootstrap.1.txt b/share/man/container-create-debootstrap.1.txt
index 6acdbeb..60f0a22 100644
--- a/share/man/container-create-debootstrap.1.txt
+++ b/share/man/container-create-debootstrap.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-create.1.txt b/share/man/container-create.1.txt
index 2ba95de..dcb0df4 100644
--- a/share/man/container-create.1.txt
+++ b/share/man/container-create.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-enter.1.txt b/share/man/container-enter.1.txt
index 162d510..c8d7f3c 100644
--- a/share/man/container-enter.1.txt
+++ b/share/man/container-enter.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-key.1.txt b/share/man/container-key.1.txt
index 9463141..2b54d78 100644
--- a/share/man/container-key.1.txt
+++ b/share/man/container-key.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-limit.1.txt b/share/man/container-limit.1.txt
index c5c2408..5f1ca30 100644
--- a/share/man/container-limit.1.txt
+++ b/share/man/container-limit.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-list.1.txt b/share/man/container-list.1.txt
index 15a54c2..4016b87 100644
--- a/share/man/container-list.1.txt
+++ b/share/man/container-list.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-log.1.txt b/share/man/container-log.1.txt
index fa9fe71..c30b37a 100644
--- a/share/man/container-log.1.txt
+++ b/share/man/container-log.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-move.1.txt b/share/man/container-move.1.txt
index fd6b83d..fef0bce 100644
--- a/share/man/container-move.1.txt
+++ b/share/man/container-move.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-remove.1.txt b/share/man/container-remove.1.txt
index afe8d03..0975168 100644
--- a/share/man/container-remove.1.txt
+++ b/share/man/container-remove.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-restart.1.txt b/share/man/container-restart.1.txt
index b0d66e2..2a4dfa8 100644
--- a/share/man/container-restart.1.txt
+++ b/share/man/container-restart.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
@@ -46,6 +46,9 @@ The following container options are available:
*-n, --name='NAME'*::
Specify container name. Specifying 'ALL' will restart all started container.
+*-v, --verbose*::
+ Explain what is being done.
+
EXAMPLES
--------
diff --git a/share/man/container-run.1.txt b/share/man/container-run.1.txt
new file mode 100644
index 0000000..b46ebf8
--- /dev/null
+++ b/share/man/container-run.1.txt
@@ -0,0 +1,80 @@
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+//
+// SPDX-License-Identifier: GPL-3.0+
+//
+// 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-RUN(1)
+================
+:doctype: manpage
+:man manual: Open Infrastructure
+:man source: compute-tools
+:man version: {revnumber}
+
+
+NAME
+----
+container-run - Execute commands in a container namespace
+
+
+SYNOPSIS
+--------
+*container run* ['OPTIONS'] -- COMMAND
+*cnt r* ['OPTIONS'] -- COMMAND
+
+
+DESCRIPTION
+-----------
+The container run command executes arbitrary commands as root in a container namespace.
+
+
+OPTIONS
+-------
+The following container options are available:
+
+*-n, --name='NAME'*::
+ Specify container name. Specifying 'ALL' will start all stopped container.
+
+
+EXAMPLES
+--------
+*Run 'hostname' in example.net container:*::
+ sudo container run -n example.net -- hostname
+
+*Create and delete a file in example.net container:*::
+ sudo container run -n example.net -- 'touch /tmp/foo && rm -f /tmp/foo'
+
+
+SEE ALSO
+--------
+compute-tools(7),
+container(1).
+
+
+HOMEPAGE
+--------
+More information about compute-tools and the Open Infrastructure project can be found on the homepage at https://open-infrastructure.net.
+
+
+CONTACT
+-------
+Bug reports, feature requests, help, patches, support and everything else
+are welcome on the Open Infrastructure Software Mailing List <software@lists.open-infrastructure.net>.
+
+Debian specific bugs can also be reported in the Debian Bug Tracking System at https://bugs.debian.org.
+
+
+AUTHORS
+-------
+compute-tools were written by Daniel Baumann <daniel.baumann@open-infrastructure.net> and others.
diff --git a/share/man/container-shell.1.txt b/share/man/container-shell.1.txt
index cd19c69..03f2185 100644
--- a/share/man/container-shell.1.txt
+++ b/share/man/container-shell.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-start.1.txt b/share/man/container-start.1.txt
index e6c874e..2b7b919 100644
--- a/share/man/container-start.1.txt
+++ b/share/man/container-start.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-stop.1.txt b/share/man/container-stop.1.txt
index 4450ba3..9eab1c4 100644
--- a/share/man/container-stop.1.txt
+++ b/share/man/container-stop.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
@@ -49,6 +49,9 @@ The following container options are available:
*-f, --force*::
Instead of running the proper shutdown sequence, terminate all processes of the container imediatly.
+*-v, --verbose*::
+ Explain what is being done.
+
EXAMPLES
--------
diff --git a/share/man/container-top.1.txt b/share/man/container-top.1.txt
index 4f41b79..367be1b 100644
--- a/share/man/container-top.1.txt
+++ b/share/man/container-top.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container-version.1.txt b/share/man/container-version.1.txt
index 498d842..6549d02 100644
--- a/share/man/container-version.1.txt
+++ b/share/man/container-version.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
diff --git a/share/man/container.1.txt b/share/man/container.1.txt
index 02cdc64..d7ad339 100644
--- a/share/man/container.1.txt
+++ b/share/man/container.1.txt
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+// Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
//
// SPDX-License-Identifier: GPL-3.0+
//
@@ -75,6 +75,9 @@ The following container commands are available:
*enter*::
Enter a container namespace, see container-enter(1).
+*run*::
+ Execute commands in a container namespace, see container-run(1).
+
*key*::
Manage GnuPG keyring for container operations, see container-key(1).
diff --git a/share/scripts/curl b/share/scripts/curl
index b756c48..465ecbe 100755
--- a/share/scripts/curl
+++ b/share/scripts/curl
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/scripts/curl.d/0001-debconf b/share/scripts/curl.d/0001-debconf
index 6c3699a..0910480 100755
--- a/share/scripts/curl.d/0001-debconf
+++ b/share/scripts/curl.d/0001-debconf
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/scripts/debconf b/share/scripts/debconf
index be0fae0..7f2bf3d 100755
--- a/share/scripts/debconf
+++ b/share/scripts/debconf
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/scripts/debconf.d/0001-preseed-file b/share/scripts/debconf.d/0001-preseed-file
index 2c83675..4fec6b0 100755
--- a/share/scripts/debconf.d/0001-preseed-file
+++ b/share/scripts/debconf.d/0001-preseed-file
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/scripts/debconf.d/0002-preseed-debconf b/share/scripts/debconf.d/0002-preseed-debconf
index a9c7e77..9bc9fcf 100755
--- a/share/scripts/debconf.d/0002-preseed-debconf
+++ b/share/scripts/debconf.d/0002-preseed-debconf
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
diff --git a/share/scripts/debconf.d/0003-debconf b/share/scripts/debconf.d/0003-debconf
index dc2db47..dda3821 100755
--- a/share/scripts/debconf.d/0003-debconf
+++ b/share/scripts/debconf.d/0003-debconf
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
@@ -308,7 +308,7 @@ Mirror ()
;;
progress-linux)
- db_set container/mirror https://cdn.deb.progress-linux.org/packages
+ db_set container/mirror https://deb.progress-linux.org/packages
db_fset container/mirror seen false
;;
esac
@@ -328,7 +328,7 @@ Mirror ()
;;
progress-linux)
- MIRROR="https://cdn.deb.progress-linux.org/packages"
+ MIRROR="https://deb.progress-linux.org/packages"
;;
esac
fi
diff --git a/share/scripts/debootstrap b/share/scripts/debootstrap
index 0130b72..98f202b 100755
--- a/share/scripts/debootstrap
+++ b/share/scripts/debootstrap
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (C) 2014-2020 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#