From 009cfdf8e59098ea0f37a0fbd3f89af705686b43 Mon Sep 17 00:00:00 2001 From: Michal Domonkos Date: Fri, 5 Jan 2024 16:33:37 +0100 Subject: [PATCH] Toolbox --- tests/CMakeLists.txt | 7 ++++++- tests/Dockerfile.fedora | 17 +++++++++++++++++ tests/mktree.common | 2 +- tests/mktree.oci | 13 ++++++++++--- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9376df400b..de08d42ead 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -76,7 +76,12 @@ if (MKTREE_BACKEND STREQUAL oci) find_program(PODMAN podman) mark_as_advanced(PODMAN) - if (PODMAN AND EXISTS ${DOCKERFILE}) + if (EXISTS /run/.toolboxenv) + set(MKTREE_MODE toolbox) + find_program(FLATPAK_SPAWN flatpak-spawn REQUIRED) + mark_as_advanced(FLATPAK_SPAWN) + set(PODMAN "${FLATPAK_SPAWN} --host podman") + elseif (PODMAN AND EXISTS ${DOCKERFILE}) set(MKTREE_MODE native) else() set(MKTREE_MODE standalone) diff --git a/tests/Dockerfile.fedora b/tests/Dockerfile.fedora index 9c161204b7..c6fa0d0856 100644 --- a/tests/Dockerfile.fedora +++ b/tests/Dockerfile.fedora @@ -85,3 +85,20 @@ RUN cmake \ RUN make -j$(nproc) tree RUN rm -rf /srv/{rpm,build} + +FROM full AS toolbox +LABEL com.github.containers.toolbox="true" + +# Disable optimizations for the best debugging experience +ENV CFLAGS="-O0 -g3" + +# Some RPM plugins require extended privileges, remove all (for DNF to work) +RUN rm -f $(rpm --eval '%__plugindir')/* + +# Install tools required by Toolbox and some extra ones +# More info: https://containertoolbx.org/distros/ +RUN dnf -y install \ + flatpak-spawn \ + gdb \ + passwd \ + valgrind diff --git a/tests/mktree.common b/tests/mktree.common index 570e9977b0..3f263a83bb 100644 --- a/tests/mktree.common +++ b/tests/mktree.common @@ -15,7 +15,7 @@ make_install() mkdir -p $DESTDIR/usr/bin cp @TESTPROG_NAMES@ $DESTDIR/usr/bin/ - ln -s $script_dir/rpmtests.sh $DESTDIR/usr/bin/rpmtests + ln -sf $script_dir/rpmtests.sh $DESTDIR/usr/bin/rpmtests mkdir -p $DESTDIR/$script_dir cp rpmtests atlocal mktree.common $DESTDIR/$script_dir/ diff --git a/tests/mktree.oci b/tests/mktree.oci index f74f4f7c37..9dad9b6061 100755 --- a/tests/mktree.oci +++ b/tests/mktree.oci @@ -9,8 +9,8 @@ if [ "$PROGRAM" == "mktree" ]; then # Running from build directory CMAKE=yes MODE=@MKTREE_MODE@ - PODMAN=@PODMAN@ - CONTEXT=@CMAKE_SOURCE_DIR@ + PODMAN="@PODMAN@" + CONTEXT="@CMAKE_SOURCE_DIR@" else # Running from source directory CMAKE=no @@ -70,12 +70,19 @@ case $CMD in [ -n "$($PODMAN images -q $IMAGE)" ] && $PODMAN rmi $IMAGE case $MODE in native) - # Native build + # Native build on the host id=$($PODMAN create $IMAGE/base) trap "$PODMAN rm $id >/dev/null" EXIT make_install $($PODMAN mount $id) $PODMAN commit -q $id $IMAGE ;; + toolbox) + # Native build in this toolbox(1) container + id=$(sh -c 'source /run/.containerenv; echo $id') + $PODMAN exec --workdir "$PWD" $id \ + @CMAKE_SOURCE_DIR@/tests/mktree.rootfs build + $PODMAN commit -q $id $IMAGE + ;; standalone) # Standalone build $PODMAN build --target full -t $IMAGE $ARGS