From b0be0e09cfbbcb033eb0b92eaf17ac31a6b9f423 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 22 Dec 2014 12:20:28 +0100 Subject: [PATCH] rework dpkg-wrapping in test framework We are able to run maintainer scripts if needed before, but we need to set ADMINDIR to be able to call dpkg tools like dpkg-trigger inside of them. Git-Dch: Ignore --- test/integration/framework | 44 ++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/test/integration/framework b/test/integration/framework index f7f69f5d5..2c794d1f3 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -131,7 +131,7 @@ aptinternalsolver() { runapt "${APTINTERNALSOLVER}" "$@"; } aptdumpsolver() { runapt "${APTDUMPSOLVER}" "$@"; } dpkg() { - command dpkg --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log "$@" + "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@" } dpkgcheckbuilddeps() { command dpkg-checkbuilddeps --admindir=${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg "$@" @@ -247,15 +247,28 @@ setupenvironment() { else echo "Dir::Bin::apt-key \"${BUILDDIRECTORY}/apt-key\";" >> aptconfig.conf fi - echo "Dir::Bin::dpkg \"fakeroot\";" >> aptconfig.conf - echo "DPKG::options:: \"dpkg\";" >> aptconfig.conf - echo "DPKG::options:: \"--root=${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf - echo "DPKG::options:: \"--force-not-root\";" >> aptconfig.conf - echo "DPKG::options:: \"--force-bad-path\";" >> aptconfig.conf + + cat > "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" < rootdir/etc/apt/apt.conf.d/99dpkg + if ! command dpkg --assert-multi-arch >/dev/null 2>&1; then echo "DPKG::options:: \"--force-architecture\";" >> aptconfig.conf # Added to test multiarch before dpkg is ready for it… fi - echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf echo 'quiet::NoUpdate "true";' >> aptconfig.conf echo 'quiet::NoStatistic "true";' >> aptconfig.conf # too distracting for users, but helpful to detect changes @@ -388,22 +401,15 @@ int execvp(const char *file, char *const argv[]) { char newfile[strlen(chrootdir) + strlen(file)]; strcpy(newfile, chrootdir); strcat(newfile, file); + char const * const baseadmindir = "/var/lib/dpkg"; + char admindir[strlen(chrootdir) + strlen(baseadmindir)]; + strcpy(admindir, chrootdir); + strcat(admindir, baseadmindir); + setenv("DPKG_ADMINDIR", admindir, 1); return func_execvp(newfile, argv); } EOF testsuccess --nomsg gcc -fPIC -shared -o noopchroot.so noopchroot.c -ldl - - mkdir -p "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/" - DPKG="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" - echo "#!/bin/sh -if [ -n \"\$LD_PRELOAD\" ]; then - export LD_PRELOAD=\"${TMPWORKINGDIRECTORY}/noopchroot.so \${LD_PRELOAD}\" -else - export LD_PRELOAD=\"${TMPWORKINGDIRECTORY}/noopchroot.so\" -fi -dpkg \"\$@\"" > $DPKG - chmod +x $DPKG - sed -ie "s|^DPKG::options:: \"dpkg\";\$|DPKG::options:: \"$DPKG\";|" aptconfig.conf } configallowinsecurerepositories() { -- 2.45.2