diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 14:14:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 14:14:39 +0000 |
commit | ee17e45964b786b48b455959dfe68715971893fb (patch) | |
tree | 118f40aa65dc838499053413b05adfd00f839c62 /tests/pivot_root | |
parent | Initial commit. (diff) | |
download | mmdebstrap-ee17e45964b786b48b455959dfe68715971893fb.tar.xz mmdebstrap-ee17e45964b786b48b455959dfe68715971893fb.zip |
Adding upstream version 1.4.3.upstream/1.4.3
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/pivot_root')
-rw-r--r-- | tests/pivot_root | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/pivot_root b/tests/pivot_root new file mode 100644 index 0000000..860c41b --- /dev/null +++ b/tests/pivot_root @@ -0,0 +1,54 @@ +#!/bin/sh +set -eu +export LC_ALL=C.UTF-8 +export SOURCE_DATE_EPOCH={{ SOURCE_DATE_EPOCH }} +trap "rm -f /tmp/chroot1.tar /tmp/chroot2.tar /tmp/chroot3.tar /tmp/mmdebstrap" EXIT INT TERM + +prefix= +if [ "$(id -u)" -eq 0 ] && [ "{{ MODE }}" != "root" ] && [ "{{ MODE }}" != "auto" ]; then + if ! id "${SUDO_USER:-user}" 2>/dev/null; then + if [ ! -e /mmdebstrap-testenv ]; then + echo "this test modifies the system and should only be run inside a container" >&2 + exit 1 + fi + useradd --home-dir "/home/${SUDO_USER:-user}" --create-home "${SUDO_USER:-user}" + fi + prefix="runuser -u ${SUDO_USER:-user} --" +fi + +$prefix {{ CMD }} --mode={{ MODE }} --variant=apt \ + --include=mount \ + {{ DIST }} /tmp/chroot1.tar {{ MIRROR }} + +if [ {{ MODE }} = "unshare" ]; then + # calling pivot_root in root mode does not work for mysterious reasons: + # pivot_root: failed to change root from `.' to `mnt': Invalid argument + $prefix {{ CMD }} --mode={{ MODE }} --variant=apt --include=mount \ + --customize-hook='mkdir -p "$1/mnt" "$1/oldroot"' \ + --customize-hook='[ ! -e /usr/bin/mmdebstrap ] || cp -aT /usr/bin/mmdebstrap "$1/usr/bin/mmdebstrap"' \ + --customize-hook='[ ! -e ./mmdebstrap ] || cp -aT ./mmdebstrap "$1/mnt/mmdebstrap"' \ + --customize-hook='mount -o rbind "$1" /mnt && cd /mnt && /sbin/pivot_root . oldroot' \ + --customize-hook='unshare -U echo nested unprivileged unshare' \ + --customize-hook='env --chdir=/mnt {{ CMD }} --mode=unshare --variant=apt --include=mount {{ DIST }} /tmp/chroot3.tar {{ MIRROR }}' \ + --customize-hook='copy-out /tmp/chroot3.tar /tmp' \ + --customize-hook='rm -f "/usr/bin/mmdebstrap" "/mnt/mmdebstrap"' \ + --customize-hook='umount -l oldroot sys' \ + --customize-hook='rmdir /oldroot' \ + {{ DIST }} /tmp/chroot2.tar {{ MIRROR }} + + cmp /tmp/chroot1.tar /tmp/chroot2.tar || diffoscope /tmp/chroot1.tar /tmp/chroot2.tar + cmp /tmp/chroot1.tar /tmp/chroot3.tar || diffoscope /tmp/chroot1.tar /tmp/chroot3.tar + rm /tmp/chroot2.tar /tmp/chroot3.tar +fi + +$prefix {{ CMD }} --mode={{ MODE }} --variant=apt --include=mount \ + --customize-hook='mkdir -p "$1/mnt"' \ + --customize-hook='[ ! -e /usr/bin/mmdebstrap ] || cp -aT /usr/bin/mmdebstrap "$1/usr/bin/mmdebstrap"' \ + --customize-hook='[ ! -e ./mmdebstrap ] || cp -aT ./mmdebstrap "$1/mnt/mmdebstrap"' \ + --chrooted-customize-hook='env --chdir=/mnt {{ CMD }} --mode=unshare --variant=apt --include=mount {{ DIST }} /tmp/chroot3.tar {{ MIRROR }}' \ + --customize-hook='copy-out /tmp/chroot3.tar /tmp' \ + --customize-hook='rm -f "$1/usr/bin/mmdebstrap" "$1/mnt/mmdebstrap"' \ + {{ DIST }} /tmp/chroot2.tar {{ MIRROR }} + +cmp /tmp/chroot1.tar /tmp/chroot2.tar || diffoscope /tmp/chroot1.tar /tmp/chroot2.tar +cmp /tmp/chroot1.tar /tmp/chroot3.tar || diffoscope /tmp/chroot1.tar /tmp/chroot3.tar |