2018-10-22 18:37:31 +00:00
#!/bin/sh
set -eu
2020-01-08 16:44:07 +00:00
perltidy < mmdebstrap > mmdebstrap.tdy
ret = 0
diff -u mmdebstrap mmdebstrap.tdy || ret = $?
if [ " $ret " -ne 0 ] ; then
echo "perltidy failed" >& 2
rm mmdebstrap.tdy
exit 1
fi
rm mmdebstrap.tdy
2018-12-28 06:44:54 +00:00
mirrordir = "./shared/cache/debian"
2018-11-04 19:34:40 +00:00
2019-10-18 20:46:23 +00:00
if [ ! -e " $mirrordir " ] ; then
echo " run ./make_mirror.sh before running $0 " >& 2
exit 1
fi
2018-11-04 19:34:40 +00:00
# we use -f because the file might not exist
rm -f shared/cover_db.img
2019-03-25 13:21:55 +00:00
: " ${ DEFAULT_DIST : =unstable } "
2018-12-05 09:33:03 +00:00
: " ${ HAVE_QEMU : =yes } "
2019-10-05 05:23:25 +00:00
: " ${ RUN_MA_SAME_TESTS : =yes } "
2018-12-05 09:33:03 +00:00
2020-01-06 10:10:31 +00:00
HOSTARCH = $( dpkg --print-architecture)
2018-12-05 09:33:03 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
# prepare image for cover_db
2020-01-07 17:08:20 +00:00
guestfish -N shared/cover_db.img= disk:384M -- mkfs vfat /dev/sda
2018-12-27 13:38:00 +00:00
2019-03-25 13:21:55 +00:00
if [ ! -e " ./shared/cache/debian- $DEFAULT_DIST .qcow " ] ; then
echo " ./shared/cache/debian- $DEFAULT_DIST .qcow does not exist " >& 2
2018-12-27 13:38:00 +00:00
exit 1
fi
fi
# check if all required debootstrap tarballs exist
notfound = 0
for dist in stable testing unstable; do
for variant in minbase buildd -; do
if [ ! -e " shared/cache/debian- $dist - $variant .tar " ] ; then
echo " shared/cache/debian- $dist - $variant .tar does not exist " >& 2
notfound = 1
fi
done
done
if [ " $notfound " -ne 0 ] ; then
echo "not all required debootstrap tarballs are present" >& 2
exit 1
2018-12-05 09:33:03 +00:00
fi
2018-11-04 19:34:40 +00:00
2018-11-23 16:27:36 +00:00
# only copy if necessary
if [ ! -e shared/mmdebstrap ] || [ mmdebstrap -nt shared/mmdebstrap ] ; then
cp -a mmdebstrap shared
fi
2018-11-04 19:34:40 +00:00
2018-11-02 16:24:46 +00:00
starttime =
2020-01-08 14:33:49 +00:00
total = 115
2020-01-06 12:02:27 +00:00
skipped = 0
runtests = 0
2018-11-02 16:24:46 +00:00
i = 1
print_header( ) {
2020-01-06 11:56:40 +00:00
echo ------------------------------------------------------------------------------ >& 2
echo " ( $i / $total ) $1 " >& 2
2018-11-02 16:24:46 +00:00
if [ -z " $starttime " ] ; then
starttime = $( date +%s)
else
currenttime = $( date +%s)
timeleft = $(( ( total-i+1) * ( currenttime-starttime) / ( i-1)) )
printf "time left: %02d:%02d:%02d\n" $(( timeleft/3600)) $(( ( timeleft%3600) / 60 )) $(( timeleft%60))
fi
2020-01-06 11:56:40 +00:00
echo ------------------------------------------------------------------------------ >& 2
2018-11-02 16:24:46 +00:00
i = $(( i+1))
}
2018-10-22 18:37:31 +00:00
nativearch = $( dpkg --print-architecture)
2018-11-04 19:34:40 +00:00
# choose the timestamp of the unstable Release file, so that we get
# reproducible results for the same mirror timestamp
2019-03-25 13:21:55 +00:00
SOURCE_DATE_EPOCH = $( date --date= " $( grep-dctrl -s Date -n '' " $mirrordir /dists/ $DEFAULT_DIST /Release " ) " +%s)
2018-10-22 18:37:31 +00:00
2018-11-04 19:34:40 +00:00
# for traditional sort order that uses native byte values
2018-12-27 13:16:23 +00:00
export LC_ALL = C.UTF-8
2018-10-22 18:37:31 +00:00
2018-12-05 09:33:03 +00:00
: " ${ HAVE_UNSHARE : =yes } "
: " ${ HAVE_PROOT : =yes } "
: " ${ HAVE_BINFMT : =yes } "
defaultmode = "auto"
if [ " $HAVE_UNSHARE " != "yes" ] ; then
defaultmode = "root"
fi
2018-11-04 19:34:40 +00:00
# by default, use the mmdebstrap executable in the current directory together
# with perl Devel::Cover but allow to overwrite this
: " ${ CMD : =perl -MDevel : : Cover =-silent,-nogcov ./mmdebstrap } "
mirror = "http://127.0.0.1/debian"
2018-10-22 18:37:31 +00:00
2018-11-04 19:34:40 +00:00
for dist in stable testing unstable; do
for variant in minbase buildd -; do
2019-09-27 06:27:49 +00:00
print_header " mode= $defaultmode ,variant= $variant : check against debootstrap $dist "
2018-12-05 09:33:03 +00:00
2018-11-04 19:34:40 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
2018-12-27 13:16:23 +00:00
export LC_ALL = C.UTF-8
2018-11-04 19:34:40 +00:00
export SOURCE_DATE_EPOCH = $SOURCE_DATE_EPOCH
2019-09-27 06:27:49 +00:00
$CMD --variant= $variant --mode= $defaultmode $dist /tmp/debian-$dist -mm.tar $mirror
2018-11-04 19:34:40 +00:00
mkdir /tmp/debian-$dist -mm
2020-01-03 15:02:35 +00:00
tar --xattrs --xattrs-include= '*' -C /tmp/debian-$dist -mm -xf /tmp/debian-$dist -mm.tar
2018-11-04 19:34:40 +00:00
mkdir /tmp/debian-$dist -debootstrap
2020-01-03 15:02:35 +00:00
tar --xattrs --xattrs-include= '*' -C /tmp/debian-$dist -debootstrap -xf " cache/debian- $dist - $variant .tar "
2018-11-04 19:34:40 +00:00
# diff cannot compare device nodes, so we use tar to do that for us and then
# delete the directory
tar -C /tmp/debian-$dist -debootstrap -cf dev1.tar ./dev
tar -C /tmp/debian-$dist -mm -cf dev2.tar ./dev
2019-10-18 21:00:51 +00:00
ret = 0
cmp dev1.tar dev2.tar || ret = \$ ?
if [ "\$ret" -ne 0 ] ; then
if type diffoscope >/dev/null; then
diffoscope dev1.tar dev2.tar
2020-01-07 17:10:12 +00:00
exit 1
2019-10-18 21:00:51 +00:00
else
echo "no diffoscope installed" >& 2
fi
if type base64 >/dev/null; then
base64 dev1.tar
base64 dev2.tar
2020-01-07 17:10:12 +00:00
exit 1
2019-10-18 21:00:51 +00:00
else
echo "no base64 installed" >& 2
fi
if type xxd >/dev/null; then
xxd dev1.tar
xxd dev2.tar
2020-01-07 17:10:12 +00:00
exit 1
2019-10-18 21:00:51 +00:00
else
echo "no xxd installed" >& 2
fi
exit 1
fi
2018-11-04 19:34:40 +00:00
rm dev1.tar dev2.tar
rm -r /tmp/debian-$dist -debootstrap/dev /tmp/debian-$dist -mm/dev
# remove downloaded deb packages
rm /tmp/debian-$dist -debootstrap/var/cache/apt/archives/*.deb
# remove aux-cache
rm /tmp/debian-$dist -debootstrap/var/cache/ldconfig/aux-cache
# remove logs
rm /tmp/debian-$dist -debootstrap/var/log/dpkg.log \
/tmp/debian-$dist -debootstrap/var/log/bootstrap.log \
/tmp/debian-$dist -debootstrap/var/log/alternatives.log
# remove *-old files
rm /tmp/debian-$dist -debootstrap/var/cache/debconf/config.dat-old \
/tmp/debian-$dist -mm/var/cache/debconf/config.dat-old
rm /tmp/debian-$dist -debootstrap/var/cache/debconf/templates.dat-old \
/tmp/debian-$dist -mm/var/cache/debconf/templates.dat-old
rm /tmp/debian-$dist -debootstrap/var/lib/dpkg/status-old \
/tmp/debian-$dist -mm/var/lib/dpkg/status-old
# remove dpkg files
2019-08-21 12:57:54 +00:00
rm /tmp/debian-$dist -debootstrap/var/lib/dpkg/available
2019-01-13 09:14:25 +00:00
touch /tmp/debian-$dist -debootstrap/var/lib/dpkg/available
2018-11-04 19:34:40 +00:00
# since we installed packages directly from the .deb files, Priorities differ
# thus we first check for equality and then remove the files
chroot /tmp/debian-$dist -debootstrap dpkg --list > dpkg1
chroot /tmp/debian-$dist -mm dpkg --list > dpkg2
diff -u dpkg1 dpkg2
rm dpkg1 dpkg2
grep -v '^Priority: ' /tmp/debian-$dist -debootstrap/var/lib/dpkg/status > status1
grep -v '^Priority: ' /tmp/debian-$dist -mm/var/lib/dpkg/status > status2
diff -u status1 status2
rm status1 status2
rm /tmp/debian-$dist -debootstrap/var/lib/dpkg/status /tmp/debian-$dist -mm/var/lib/dpkg/status
# debootstrap exposes the hosts's kernel version
rm /tmp/debian-$dist -debootstrap/etc/apt/apt.conf.d/01autoremove-kernels \
/tmp/debian-$dist -mm/etc/apt/apt.conf.d/01autoremove-kernels
# who creates /run/mount?
2019-02-27 23:18:06 +00:00
if [ -e " /tmp/debian- $dist -debootstrap/run/mount/utab " ] ; then
rm " /tmp/debian- $dist -debootstrap/run/mount/utab "
fi
if [ -e " /tmp/debian- $dist -debootstrap/run/mount " ] ; then
rmdir " /tmp/debian- $dist -debootstrap/run/mount "
fi
2018-11-04 19:34:40 +00:00
# debootstrap doesn't clean apt
2020-01-06 10:10:31 +00:00
rm /tmp/debian-$dist -debootstrap/var/lib/apt/lists/127.0.0.1_debian_dists_${ dist } _main_binary-${ HOSTARCH } _Packages \
2018-11-04 19:34:40 +00:00
/tmp/debian-$dist -debootstrap/var/lib/apt/lists/127.0.0.1_debian_dists_${ dist } _Release \
/tmp/debian-$dist -debootstrap/var/lib/apt/lists/127.0.0.1_debian_dists_${ dist } _Release.gpg
if [ " $variant " = "-" ] ; then
rm /tmp/debian-$dist -debootstrap/etc/machine-id
rm /tmp/debian-$dist -mm/etc/machine-id
rm /tmp/debian-$dist -debootstrap/var/lib/systemd/catalog/database
rm /tmp/debian-$dist -mm/var/lib/systemd/catalog/database
2020-01-03 15:02:35 +00:00
cap = \$ ( chroot /tmp/debian-$dist -debootstrap /sbin/getcap /bin/ping)
if [ "\$cap" != "/bin/ping = cap_net_raw+ep" ] ; then
echo "expected bin/ping to have capabilities cap_net_raw+ep" >& 2
2020-01-06 11:56:40 +00:00
echo "but debootstrap produced: \$cap" >& 2
2020-01-03 15:02:35 +00:00
exit 1
fi
cap = \$ ( chroot /tmp/debian-$dist -mm /sbin/getcap /bin/ping)
if [ "\$cap" != "/bin/ping = cap_net_raw+ep" ] ; then
echo "expected bin/ping to have capabilities cap_net_raw+ep" >& 2
2020-01-06 11:56:40 +00:00
echo "but mmdebstrap produced: \$cap" >& 2
2020-01-03 15:02:35 +00:00
exit 1
fi
2018-11-04 19:34:40 +00:00
fi
2019-02-27 23:20:00 +00:00
rm /tmp/debian-$dist -mm/var/cache/apt/archives/lock
rm /tmp/debian-$dist -mm/var/lib/apt/extended_states
rm /tmp/debian-$dist -mm/var/lib/apt/lists/lock
2018-10-22 18:37:31 +00:00
2018-12-06 23:13:51 +00:00
# the list of shells might be sorted wrongly
for f in " /tmp/debian- $dist -debootstrap/etc/shells " " /tmp/debian- $dist -mm/etc/shells " ; do
sort -o "\$f" "\$f"
done
2019-02-19 23:31:06 +00:00
# workaround for https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=917773
2020-01-05 20:01:10 +00:00
if ! cmp /tmp/debian-$dist -debootstrap/etc/shadow /tmp/debian-$dist -mm/etc/shadow; then
2020-01-06 11:56:40 +00:00
echo patching /etc/shadow on $dist $variant >& 2
2020-01-05 20:01:10 +00:00
awk -v FS = : -v OFS = : -v SDE = \$ SOURCE_DATE_EPOCH '{ print \$1,\$2,int(SDE/60/60/24),\$4,\$5,\$6,\$7,\$8,\$9 }' < /tmp/debian-$dist -mm/etc/shadow > /tmp/debian-$dist -mm/etc/shadow.bak
mv /tmp/debian-$dist -mm/etc/shadow.bak /tmp/debian-$dist -mm/etc/shadow
else
2020-01-06 11:56:40 +00:00
echo no difference for /etc/shadow on $dist $variant >& 2
2020-01-05 20:01:10 +00:00
fi
if ! cmp /tmp/debian-$dist -debootstrap/etc/shadow- /tmp/debian-$dist -mm/etc/shadow-; then
2020-01-06 11:56:40 +00:00
echo patching /etc/shadow- on $dist $variant >& 2
2020-01-05 20:01:10 +00:00
awk -v FS = : -v OFS = : -v SDE = \$ SOURCE_DATE_EPOCH '{ print \$1,\$2,int(SDE/60/60/24),\$4,\$5,\$6,\$7,\$8,\$9 }' < /tmp/debian-$dist -mm/etc/shadow- > /tmp/debian-$dist -mm/etc/shadow-.bak
mv /tmp/debian-$dist -mm/etc/shadow-.bak /tmp/debian-$dist -mm/etc/shadow-
else
2020-01-06 11:56:40 +00:00
echo no difference for /etc/shadow- on $dist $variant >& 2
2020-01-05 20:01:10 +00:00
fi
2019-02-19 23:31:06 +00:00
2018-11-04 19:34:40 +00:00
# check if the file content differs
2019-02-20 16:37:53 +00:00
diff --no-dereference --recursive /tmp/debian-$dist -debootstrap /tmp/debian-$dist -mm
2018-11-02 16:24:46 +00:00
2018-11-04 19:34:40 +00:00
# check if file properties (permissions, ownership, symlink names, modification time) differ
#
# we cannot use this (yet) because it cannot copy with paths that have [ or @ in them
#fmtree -c -p /tmp/debian-$dist-debootstrap -k flags,gid,link,mode,size,time,uid | sudo fmtree -p /tmp/debian-$dist-mm
2018-12-05 09:33:03 +00:00
rm /tmp/debian-$dist -mm.tar
rm -r /tmp/debian-$dist -debootstrap /tmp/debian-$dist -mm
2018-11-04 19:34:40 +00:00
END
2018-12-05 09:33:03 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
elif [ " $defaultmode " = "root" ] ; then
2018-12-05 09:33:03 +00:00
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
fi
2018-11-04 19:34:40 +00:00
done
done
2018-10-22 18:37:31 +00:00
2019-02-23 07:46:32 +00:00
print_header "test --help"
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2019-11-29 07:45:08 +00:00
$CMD --help | grep --quiet --fixed-strings 'mmdebstrap [OPTION...] [SUITE [TARGET [MIRROR...]]]'
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-11-29 07:45:08 +00:00
else
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-11-29 07:45:08 +00:00
fi
print_header "test --man"
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2020-01-04 00:14:01 +00:00
# we redirect to /dev/null instead of using --quiet to not cause a broken pipe
# when grep exits before mmdebstrap was able to write all its output
$CMD --man | grep --fixed-strings 'mmdebstrap [OPTION...] [*SUITE* [*TARGET* [*MIRROR*...]]]' >/dev/null
2019-02-23 07:46:32 +00:00
END
2019-02-23 07:55:31 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-23 07:55:31 +00:00
else
2019-09-27 06:29:17 +00:00
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-23 07:55:31 +00:00
fi
print_header "test --version"
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
$CMD --version | egrep --quiet '^mmdebstrap [0-9](\.[0-9])+$'
END
2019-02-23 07:46:32 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-23 07:46:32 +00:00
else
2019-09-27 06:29:17 +00:00
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-23 07:46:32 +00:00
fi
2018-11-02 16:24:46 +00:00
print_header "mode=root,variant=apt: create directory"
2018-11-04 19:34:40 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
2018-12-27 13:16:23 +00:00
export LC_ALL = C.UTF-8
2019-03-25 13:21:55 +00:00
$CMD --mode= root --variant= apt $DEFAULT_DIST /tmp/debian-chroot $mirror
2019-03-27 10:44:45 +00:00
chroot /tmp/debian-chroot dpkg-query --showformat '\${binary:Package}\n' --show > pkglist.txt
2019-03-25 13:21:55 +00:00
tar -C /tmp/debian-chroot --one-file-system -c . | tar -t | sort > tar1.txt
rm -r /tmp/debian-chroot
2018-11-04 19:34:40 +00:00
END
2018-12-05 09:33:03 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
else
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
fi
2018-11-04 19:34:40 +00:00
2019-09-27 21:04:51 +00:00
print_header "mode=unshare,variant=apt: fail with unshare as root user"
2019-02-23 07:46:32 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2020-01-04 00:24:17 +00:00
if [ ! -e /mmdebstrap-testenv ] ; then
echo "this test modifies the system and should only be run inside a container" >& 2
exit 1
fi
sysctl -w kernel.unprivileged_userns_clone= 1
2019-02-23 07:46:32 +00:00
ret = 0
2019-03-25 13:21:55 +00:00
$CMD --mode= unshare --variant= apt $DEFAULT_DIST /tmp/debian-chroot $mirror || ret = \$ ?
2019-02-23 07:46:32 +00:00
if [ "\$ret" = 0 ] ; then
2020-01-06 11:56:40 +00:00
echo expected failure but got exit \$ ret >& 2
2019-02-23 07:46:32 +00:00
exit 1
fi
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-23 07:46:32 +00:00
else
2020-01-06 11:56:40 +00:00
echo "HAVE_QEMU != yes -- Skipping test..." >& 2
2020-01-06 12:02:27 +00:00
skipped = $(( skipped+1))
2019-02-23 07:46:32 +00:00
fi
2019-09-27 06:27:49 +00:00
print_header " mode= $defaultmode ,variant=apt: test progress bars on fake tty "
2018-11-04 19:34:40 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
2018-12-27 13:16:23 +00:00
export LC_ALL = C.UTF-8
2019-09-27 06:27:49 +00:00
script -qfc " $CMD --mode= $defaultmode --variant=apt $DEFAULT_DIST /tmp/debian-chroot.tar $mirror " /dev/null
2019-03-25 13:21:55 +00:00
tar -tf /tmp/debian-chroot.tar | sort | diff -u tar1.txt -
rm /tmp/debian-chroot.tar
2018-11-04 19:34:40 +00:00
END
2018-12-05 09:33:03 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
elif [ " $defaultmode " = "root" ] ; then
2018-12-05 09:33:03 +00:00
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
fi
2018-10-22 18:37:31 +00:00
2019-09-27 06:27:49 +00:00
print_header " mode= $defaultmode ,variant=apt: test --debug output on fake tty "
2019-02-23 07:46:32 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2019-09-27 06:27:49 +00:00
script -qfc " $CMD --mode= $defaultmode --debug --variant=apt $DEFAULT_DIST /tmp/debian-chroot.tar $mirror " /dev/null
2019-03-25 13:21:55 +00:00
tar -tf /tmp/debian-chroot.tar | sort | diff -u tar1.txt -
rm /tmp/debian-chroot.tar
2019-02-23 07:46:32 +00:00
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
elif [ " $defaultmode " = "root" ] ; then
2019-02-23 07:46:32 +00:00
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-23 07:46:32 +00:00
fi
2018-11-02 16:24:46 +00:00
print_header "mode=root,variant=apt: existing empty directory"
2018-11-04 19:34:40 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
2018-12-27 13:16:23 +00:00
export LC_ALL = C.UTF-8
2019-03-25 13:21:55 +00:00
mkdir /tmp/debian-chroot
$CMD --mode= root --variant= apt $DEFAULT_DIST /tmp/debian-chroot $mirror
tar -C /tmp/debian-chroot --one-file-system -c . | tar -t | sort | diff -u tar1.txt -
rm -r /tmp/debian-chroot
2018-11-04 19:34:40 +00:00
END
2018-12-05 09:33:03 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
else
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
fi
2018-11-02 16:24:46 +00:00
2019-01-25 11:49:58 +00:00
print_header "mode=root,variant=apt: existing directory with lost+found"
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2019-03-25 13:21:55 +00:00
mkdir /tmp/debian-chroot
mkdir /tmp/debian-chroot/lost+found
$CMD --mode= root --variant= apt $DEFAULT_DIST /tmp/debian-chroot $mirror
rmdir /tmp/debian-chroot/lost+found
tar -C /tmp/debian-chroot --one-file-system -c . | tar -t | sort | diff -u tar1.txt -
rm -r /tmp/debian-chroot
2019-01-25 11:49:58 +00:00
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-01-25 11:49:58 +00:00
else
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-01-25 11:49:58 +00:00
fi
2019-09-26 21:20:58 +00:00
print_header " mode= $defaultmode ,variant=apt: fail installing to non-empty lost+found "
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
mkdir /tmp/debian-chroot
mkdir /tmp/debian-chroot/lost+found
touch /tmp/debian-chroot/lost+found/exists
ret = 0
$CMD --mode= $defaultmode --variant= apt $DEFAULT_DIST /tmp/debian-chroot $mirror || ret = \$ ?
rm /tmp/debian-chroot/lost+found/exists
rmdir /tmp/debian-chroot/lost+found
rmdir /tmp/debian-chroot
if [ "\$ret" = 0 ] ; then
2020-01-06 11:56:40 +00:00
echo expected failure but got exit \$ ret >& 2
2019-09-26 21:20:58 +00:00
exit 1
fi
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-26 21:20:58 +00:00
elif [ " $defaultmode " = "root" ] ; then
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-26 21:20:58 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-26 21:20:58 +00:00
fi
2019-12-02 22:53:06 +00:00
print_header " mode= $defaultmode ,variant=apt: fail installing to non-empty target directory "
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
mkdir /tmp/debian-chroot
mkdir /tmp/debian-chroot/lost+found
touch /tmp/debian-chroot/exists
ret = 0
$CMD --mode= $defaultmode --variant= apt $DEFAULT_DIST /tmp/debian-chroot $mirror || ret = \$ ?
rmdir /tmp/debian-chroot/lost+found
rm /tmp/debian-chroot/exists
rmdir /tmp/debian-chroot
if [ "\$ret" = 0 ] ; then
2020-01-06 11:56:40 +00:00
echo expected failure but got exit \$ ret >& 2
2019-12-02 22:53:06 +00:00
exit 1
fi
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-12-02 22:53:06 +00:00
elif [ " $defaultmode " = "root" ] ; then
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-12-02 22:53:06 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-12-02 22:53:06 +00:00
fi
2019-02-28 10:54:03 +00:00
print_header "mode=root,variant=apt: chroot directory not accessible by _apt user"
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2019-03-25 13:21:55 +00:00
mkdir /tmp/debian-chroot
chmod 700 /tmp/debian-chroot
$CMD --mode= root --variant= apt $DEFAULT_DIST /tmp/debian-chroot $mirror
tar -C /tmp/debian-chroot --one-file-system -c . | tar -t | sort | diff -u tar1.txt -
rm -r /tmp/debian-chroot
2019-02-28 10:54:03 +00:00
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-28 10:54:03 +00:00
else
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-28 10:54:03 +00:00
fi
2019-01-20 09:41:29 +00:00
print_header "mode=unshare,variant=apt: create gzip compressed tarball"
2018-11-04 19:34:40 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
2018-12-27 13:16:23 +00:00
export LC_ALL = C.UTF-8
2020-01-04 00:24:17 +00:00
if [ ! -e /mmdebstrap-testenv ] ; then
echo "this test modifies the system and should only be run inside a container" >& 2
exit 1
fi
2018-11-04 19:34:40 +00:00
adduser --gecos user --disabled-password user
sysctl -w kernel.unprivileged_userns_clone= 1
2019-03-25 13:21:55 +00:00
runuser -u user -- $CMD --mode= unshare --variant= apt $DEFAULT_DIST /tmp/debian-chroot.tar.gz $mirror
2020-01-03 23:36:21 +00:00
printf '\037\213\010' | cmp --bytes= 3 /tmp/debian-chroot.tar.gz -
2019-03-25 13:21:55 +00:00
tar -tf /tmp/debian-chroot.tar.gz | sort | diff -u tar1.txt -
rm /tmp/debian-chroot.tar.gz
2018-11-04 19:34:40 +00:00
END
2019-01-25 11:50:52 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-01-25 11:50:52 +00:00
else
2020-01-06 11:56:40 +00:00
echo "HAVE_QEMU != yes -- Skipping test..." >& 2
2020-01-06 12:02:27 +00:00
skipped = $(( skipped+1))
2019-01-25 11:50:52 +00:00
fi
2019-12-02 20:17:45 +00:00
print_header " mode= $defaultmode ,variant=apt: test xz compressed tarball "
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
$CMD --mode= $defaultmode --variant= apt $DEFAULT_DIST /tmp/debian-chroot.tar.xz $mirror
printf '\3757zXZ\0' | cmp --bytes= 6 /tmp/debian-chroot.tar.xz -
tar -tf /tmp/debian-chroot.tar.xz | sort | diff -u tar1.txt -
rm /tmp/debian-chroot.tar.xz
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-12-02 20:17:45 +00:00
elif [ " $defaultmode " = "root" ] ; then
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-12-02 20:17:45 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-12-02 20:17:45 +00:00
fi
2020-01-07 16:40:13 +00:00
print_header " mode= $defaultmode ,variant=apt: test squashfs image "
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
$CMD --mode= $defaultmode --variant= apt $DEFAULT_DIST /tmp/debian-chroot.squashfs $mirror
printf 'hsqs' | cmp --bytes= 4 /tmp/debian-chroot.squashfs -
# workaround for https://github.com/AgentD/squashfs-tools-ng/issues/37
sed 's#\\([^.]\\)/\$#\\1#' tar1.txt | sort > /tmp/tar1noslash.txt
sqfs2tar --no-skip --root-becomes . /tmp/debian-chroot.squashfs | tar -t | sort | diff -u /tmp/tar1noslash.txt -
rm /tmp/debian-chroot.squashfs /tmp/tar1noslash.txt
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
runtests = $(( runtests+1))
elif [ " $defaultmode " = "root" ] ; then
./run_null.sh SUDO
runtests = $(( runtests+1))
else
./run_null.sh
runtests = $(( runtests+1))
fi
2019-03-27 10:29:36 +00:00
print_header "mode=auto,variant=apt: test auto-mode without unshare capabilities"
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2020-01-04 00:24:17 +00:00
if [ ! -e /mmdebstrap-testenv ] ; then
echo "this test modifies the system and should only be run inside a container" >& 2
exit 1
fi
2019-03-27 10:29:36 +00:00
adduser --gecos user --disabled-password user
sysctl -w kernel.unprivileged_userns_clone= 0
runuser -u user -- $CMD --mode= auto --variant= apt $DEFAULT_DIST /tmp/debian-chroot.tar.gz $mirror
{ tar -tf /tmp/debian-chroot.tar.gz;
printf "./etc/ld.so.cache\n./var/cache/ldconfig/\n./etc/.pwd.lock\n" ;
} | sort | diff -u tar1.txt -
rm /tmp/debian-chroot.tar.gz
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-03-27 10:29:36 +00:00
else
2020-01-06 11:56:40 +00:00
echo "HAVE_QEMU != yes -- Skipping test..." >& 2
2020-01-06 12:02:27 +00:00
skipped = $(( skipped+1))
2019-03-27 10:29:36 +00:00
fi
2019-09-27 06:27:49 +00:00
print_header " mode= $defaultmode ,variant=apt: fail with missing lz4 "
2019-02-23 07:46:32 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
ret = 0
2019-09-27 06:27:49 +00:00
$CMD --mode= $defaultmode --variant= apt $DEFAULT_DIST /tmp/debian-chroot.tar.lz4 $mirror || ret = \$ ?
2019-02-23 07:46:32 +00:00
if [ "\$ret" = 0 ] ; then
2020-01-06 11:56:40 +00:00
echo expected failure but got exit \$ ret >& 2
2019-02-23 07:46:32 +00:00
exit 1
fi
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
elif [ " $defaultmode " = "root" ] ; then
2019-02-23 07:46:32 +00:00
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-27 06:27:49 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-02-23 07:46:32 +00:00
fi
2019-09-26 21:24:10 +00:00
print_header " mode= $defaultmode ,variant=apt: fail with path with quotes "
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
ret = 0
$CMD --mode= $defaultmode --variant= apt $DEFAULT_DIST /tmp/quoted\" path $mirror || ret = \$ ?
if [ "\$ret" = 0 ] ; then
2020-01-06 11:56:40 +00:00
echo expected failure but got exit \$ ret >& 2
2019-09-26 21:24:10 +00:00
exit 1
fi
END
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-26 21:24:10 +00:00
elif [ " $defaultmode " = "root" ] ; then
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-26 21:24:10 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-09-26 21:24:10 +00:00
fi
2019-01-25 11:50:52 +00:00
print_header "mode=root,variant=apt: create tarball with /tmp mounted nodev"
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
2020-01-04 00:24:17 +00:00
if [ ! -e /mmdebstrap-testenv ] ; then
echo "this test modifies the system and should only be run inside a container" >& 2
exit 1
fi
2019-01-25 11:50:52 +00:00
mount -t tmpfs -o nodev,nosuid,size= 300M tmpfs /tmp
2019-02-20 12:32:49 +00:00
# use --customize-hook to exercise the mounting/unmounting code of block devices in root mode
2019-03-25 13:21:55 +00:00
$CMD --mode= root --variant= apt --customize-hook= 'mount | grep /dev/full' --customize-hook= 'test "\$(echo foo | tee /dev/full 2>&1 1>/dev/null)" = "tee: /dev/full: No space left on device"' $DEFAULT_DIST /tmp/debian-chroot.tar $mirror
tar -tf /tmp/debian-chroot.tar | sort | diff -u tar1.txt -
rm /tmp/debian-chroot.tar
2019-01-25 11:50:52 +00:00
END
2018-12-05 09:33:03 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
else
2020-01-06 11:56:40 +00:00
echo "HAVE_QEMU != yes -- Skipping test..." >& 2
2020-01-06 12:02:27 +00:00
skipped = $(( skipped+1))
2018-12-05 09:33:03 +00:00
fi
2018-11-02 16:24:46 +00:00
2018-12-05 09:33:03 +00:00
print_header " mode= $defaultmode ,variant=apt: read from stdin, write to stdout "
2018-11-04 19:34:40 +00:00
cat << END > shared/test.sh
#!/bin/sh
set -eu
2018-12-27 13:16:23 +00:00
export LC_ALL = C.UTF-8
2019-03-25 13:21:55 +00:00
echo " deb $mirror $DEFAULT_DIST main " | $CMD --mode= $defaultmode --variant= apt > /tmp/debian-chroot.tar
tar -tf /tmp/debian-chroot.tar | sort | diff -u tar1.txt -
rm /tmp/debian-chroot.tar
2018-11-04 19:34:40 +00:00
END
2019-10-19 06:10:36 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-10-19 06:10:36 +00:00
elif [ " $defaultmode " = "root" ] ; then
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-10-19 06:10:36 +00:00
else
./run_null.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2019-10-19 06:10:36 +00:00
fi
print_header " mode= $defaultmode ,variant=apt: supply components manually "
cat << END > shared/test.sh
#!/bin/sh
set -eu
export LC_ALL = C.UTF-8
$CMD --mode= $defaultmode --variant= apt --components= "main main" --comp= "main,main" $DEFAULT_DIST /tmp/debian-chroot $mirror
echo " deb $mirror $DEFAULT_DIST main " | cmp /tmp/debian-chroot/etc/apt/sources.list
tar -C /tmp/debian-chroot --one-file-system -c . | tar -t | sort | diff -u tar1.txt -
rm -r /tmp/debian-chroot
END
2018-12-05 09:33:03 +00:00
if [ " $HAVE_QEMU " = "yes" ] ; then
./run_qemu.sh
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00
elif [ " $defaultmode " = "root" ] ; then
./run_null.sh SUDO
2020-01-06 12:02:27 +00:00
runtests = $(( runtests+1))
2018-12-05 09:33:03 +00:00