summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2014-12-22 12:20:28 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2015-03-08 19:16:32 +0100
commitb0be0e09cfbbcb033eb0b92eaf17ac31a6b9f423 (patch)
treedad09ab92b7d32e5abe2583ebb780ed044f1d90d
parentc6bc9735cf1486d40d85bba90cfc3aaa6537a9c0 (diff)
downloadapt-b0be0e09cfbbcb033eb0b92eaf17ac31a6b9f423.tar.gz
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
-rw-r--r--test/integration/framework44
1 files 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" <<EOF
+#!/bin/sh
+set -e
+if [ -r "${TMPWORKINGDIRECTORY}/noopchroot.so" ]; then
+ if [ -n "\$LD_PRELOAD" ]; then
+ export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so \${LD_PRELOAD}"
+ else
+ export LD_PRELOAD="${TMPWORKINGDIRECTORY}/noopchroot.so"
+ fi
+fi
+exec fakeroot dpkg --root="${TMPWORKINGDIRECTORY}/rootdir" \\
+ --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log \\
+ --force-not-root --force-bad-path "\$@"
+EOF
+ cat "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg"
+ chmod +x "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg"
+ echo "Dir::Bin::dpkg \"${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() {