test: add support for make -j17 check massive parallel testing

This was a tough nut to crack.  Spent 3-4 calendar weeks (getting blurry
now) to try and figure it all out.  In the end, the following changes
were necessary:

 - Ensure setup-root.sh is guaranteed to run before any of the tests
 - Give all tests their unique /etc, /tmp, and /run inside the chroot.
   Turns out tmpfs+overlayfs can be used unprivileged inside an unshare
 - A static BusyBox binary with support for mount helpers so we can
   do the mkdir magic in skel/etc/fstab for the /etc overlay

The last item turned out to be a bit of a roller coaster ride of its
own.  First of all, the original binary we used was from the upstream
BusyBox project[1].  I was sure it couldn't be that hard to enable the
CONFIG_FEATURE_MOUNT_HELPERS ... oh boy was I wrong.  To make long and
tedious story short; two new projects on GitHub were created for this
task: 1) troglobit/misc[2] to house a mirror of https://musl.cc
toolchains and 2) troglobit/busybox-builder[3] to download, patch, and
build the thing using a .config from the myLinux[4] project.  Patching
this .config was necessary, however, since musl libc is strict POSIX
and does not have any of the BSD extensions, e.g. REG_STARTEND that is
in GLIBC regex(3).

[1]: https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/
[2]: https://github.com/troglobit/misc/releases/tag/11-20211120
[3]: https://github.com/troglobit/busybox-builder/releases/tag/1_35_0
[4]: https://github.com/troglobit/myLinux

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2022-09-25 04:38:24 +02:00
parent 9f7ba1ba79
commit 165d0633f6
2 changed files with 13 additions and 1 deletions
+6 -1
View File
@@ -47,7 +47,6 @@ checkself.sh:
TEST_EXTENSIONS = .sh
TESTS = checkself.sh
TESTS += setup-root.sh
TESTS += add-remove-dynamic-service.sh
TESTS += add-remove-dynamic-service-sub-config.sh
TESTS += cond-start-task.sh
@@ -64,6 +63,12 @@ TESTS += start-stop-sysv.sh
TESTS += start-stop-serv.sh
TESTS += signal-service.sh
check-recursive: setup-chroot
.PHONY: setup-chroot
setup-chroot:
@TENV_ROOT='$(abs_builddir)/tenv-root/' srcdir=$(srcdir) top_builddir=$(top_builddir) ./setup-root.sh
clean-local:
-rm -rf $(builddir)/tenv-root/
-rm -f checkself.sh
+7
View File
@@ -0,0 +1,7 @@
# <file system> <mount point> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs mode=1777 0 0
mkdir#-p#-m0755 /tmp/etc.u helper none 0 0
mkdir#-p#-m0755 /tmp/etc.w helper none 0 0
# Each test needs a dedicated /etc for finit.conf etc.
etc /etc overlay lowerdir=/etc,upperdir=/tmp/etc.u,workdir=/tmp/etc.w 0 0