while [ -n "$1" ]; do
if [ "$1" = "-q" ]; then
export MSGLEVEL=2
+ elif [ "$1" = "-qq" ]; then
+ export MSGLEVEL=1
elif [ "$1" = "-v" ]; then
export MSGLEVEL=4
elif [ "$1" = '--color=no' ]; then
msgdebug() { true; }
msgndebug() { true; }
fi
+if [ $MSGLEVEL -le 1 ]; then
+ msgpass() { true; }
+fi
msgdone() {
if [ "$1" = "debug" -a $MSGLEVEL -le 4 ] ||
[ "$1" = "info" -a $MSGLEVEL -le 3 ] ||
dpkg() {
"${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@"
}
+dpkg_version() {
+ command perl -MDpkg -E 'say $Dpkg::PROGVERSION'
+}
dpkgcheckbuilddeps() {
command dpkg-checkbuilddeps --admindir="${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg" "$@"
}
# relax permissions so that running as root with user switching works
umask 022
chmod 711 "$TMPWORKINGDIRECTORY"
- chown _apt:root "${TMPWORKINGDIRECTORY}/downloaded"
+ chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/downloaded"
fi
TESTDIRECTORY="$(readlink -f "$(dirname $0)")"
# in testcases, it can appear as if localhost has a rotation setup,
# hide this as we can't really deal with it properly
echo 'Acquire::Failure::ShowIP "false";'
+ # randomess and tests don't play well together
+ echo 'Acquire::IndexTargets::Randomized "false";'
# fakeroot can't fake everything, so disabled in production but good for tests
echo 'APT::Sandbox::Verify "true";'
} >> aptconfig.conf
cp "${TESTDIRECTORY}/apt.pem" "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem"
if [ "$(id -u)" = '0' ]; then
- chown _apt:root "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem"
+ chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem"
fi
echo "Acquire::https::CaInfo \"${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem\";" > rootdir/etc/apt/apt.conf.d/99https
echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary
# create some files in /tmp and look at user/group to get what this means
TEST_DEFAULT_USER="$(id -un)"
- if [ "$(uname)" = 'GNU/kFreeBSD' ]; then
- TEST_DEFAULT_GROUP='root'
- else
- TEST_DEFAULT_GROUP="$(id -gn)"
- fi
+ touch "${TMPWORKINGDIRECTORY}/test-file"
+ TEST_DEFAULT_GROUP=$(stat --format '%G' "${TMPWORKINGDIRECTORY}/test-file")
# cleanup the environment a bit
# prefer our apt binaries over the system apt binaries
local STATUSFILE="status-${BASENAME#*-}"
if [ -f "${TESTDIRECTORY}/${STATUSFILE}" ]; then
cp "${TESTDIRECTORY}/${STATUSFILE}" rootdir/var/lib/dpkg/status
+ # Add an empty line to the end if there is none
+ if tail -1 rootdir/var/lib/dpkg/status | grep -q .; then
+ echo >> rootdir/var/lib/dpkg/status
+ fi
else
echo -n > rootdir/var/lib/dpkg/status
fi
fi
rm -f rootdir/etc/apt/apt.conf.d/00foreigndpkg
- # if multi-arch make sure dpkg can detect itself as capable of it
- if getarchitectures | grep -E -q '[^ ]+ [^ ]+'; then
- if [ "0" = "$(dpkg -l dpkg 2> /dev/null | grep '^i' | wc -l)" ]; then
- # dpkg doesn't really check the version as long as it is fully installed,
- # but just to be sure we choose one above the required version
- insertinstalledpackage 'dpkg' "all" '1.16.2+fake'
- fi
+ # make sure dpkg can detect itself as capable of it
+ if [ "0" = "$(dpkg -l dpkg 2> /dev/null | grep '^i' | wc -l)" ]; then
+ # dpkg doesn't really check the version as long as it is fully installed,
+ # but just to be sure we choose one above the required version
+ insertinstalledpackage 'dpkg' "all" '1.16.2+fake'
fi
- if command dpkg --assert-multi-arch >/dev/null 2>&1 ; then
+ if dpkg --assert-multi-arch >/dev/null 2>&1 ; then
local ARCHS="$(getarchitectures)"
local DPKGARCH="$(dpkg --print-architecture)"
# this ensures that even if multi-arch isn't active in the view
local VERSION="$3"
local RELEASE="${4:-unstable}"
local DEPENDENCIES="$5"
- local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
+ local DESCRIPTION="${6:-an autogenerated dummy ${NAME}=${VERSION}/${RELEASE}
If you find such a package installed on your system,
something went horribly wrong! They are autogenerated
- und used only by testcases and serve no other purpose…"}"
+ und used only by testcases and serve no other purpose…}"
local SECTION="${7:-others}"
local PRIORITY="${8:-optional}"
if [ "$SECTION" != '<none>' ]; then
echo "Section: $SECTION"
fi
- local BUILDDEPS="$(echo "$DEPENDENCIES" | grep '^Build-')"
+ local BUILDDEPS="$(printf "%b\n" "$DEPENDENCIES" | grep '^Build-')"
test -z "$BUILDDEPS" || echo "$BUILDDEPS"
echo "
Package: $NAME"
else
echo "Architecture: any"
fi
- local DEPS="$(echo "$DEPENDENCIES" | grep -v '^Build-')"
+ local DEPS="$(printf "%b\n" "$DEPENDENCIES" | grep -v '^Build-')"
test -z "$DEPS" || echo "$DEPS"
- echo "Description: $DESCRIPTION"
+ printf "%b\n" "Description: $DESCRIPTION"
} > "${BUILDDIR}/debian/control"
echo '3.0 (native)' > "${BUILDDIR}/debian/source/format"
if [ "$ARCH" = "all" ]; then
ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)"
fi
- testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH
+ testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH -d
cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$BUILDLOG"
local PKGS="$(grep '^dpkg-deb: building package' "$BUILDLOG" | cut -d'/' -f 2 | sed -e "s#'\.##")"
local SRCS="$(grep '^dpkg-source: info: building' "$BUILDLOG" | grep -o '[a-z0-9._+~-]*$')"
local VERSION="$4"
local DEPENDENCIES="$5"
local PRIORITY="${6:-optional}"
- local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASES}
+ local DESCRIPTION="${7:-an autogenerated dummy ${NAME}=${VERSION}/${RELEASES}
If you find such a package installed on your system,
something went horribly wrong! They are autogenerated
- und used only by testcases and serve no other purpose…"}"
+ und used only by testcases and serve no other purpose…}"
local ARCHS=""
for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do
if [ "$RELEASE" = 'installed' ]; then
test "$arch" = 'none' || echo "Architecture: $arch"
echo "Version: $VERSION
Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb"
- test -z "$DEPENDENCIES" || echo "$DEPENDENCIES"
+ test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES"
echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)"
echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)"
+ echo "SHA256: 0000000000000000000000000000000000000000000000000000000000000000"
echo
} >> "${PPATH}/Packages"
done
Version: $VERSION
Maintainer: Joe Sixpack <joe@example.org>
Architecture: $ARCH" >> $FILE
- test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE"
+ test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES" >> "$FILE"
echo "Files:
$(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE"
$(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE"
local DEPENDENCIES="$4"
local PRIORITY="${5:-optional}"
local STATUS="${6:-install ok installed}"
- local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/installed
+ local DESCRIPTION="${7:-an autogenerated dummy ${NAME}=${VERSION}/installed
If you find such a package installed on your system,
something went horribly wrong! They are autogenerated
- und used only by testcases and serve no other purpose…"}"
+ und used only by testcases and serve no other purpose…}"
local FILE='rootdir/var/lib/dpkg/status'
local INFO='rootdir/var/lib/dpkg/info'
Maintainer: Joe Sixpack <joe@example.org>
Version: $VERSION" >> "$FILE"
test "$arch" = 'none' || echo "Architecture: $arch" >> "$FILE"
- test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE"
- echo "Description: $DESCRIPTION" >> "$FILE"
+ test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES" >> "$FILE"
+ printf "%b\n" "Description: $DESCRIPTION" >> "$FILE"
echo >> "$FILE"
if [ "$(dpkg-query -W --showformat='${Multi-Arch}')" = 'same' ]; then
echo -n > "${INFO}/${NAME}:${arch}.list"
command mkdir -m 700 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial"
touch "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/lock"
if [ "$(id -u)" = '0' ]; then
- chown _apt:root "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial"
+ chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial"
fi
else
command mkdir "$@"
if expr match "$2" '^-dy\?' >/dev/null 2>&1; then return; fi # download-only mode
shift
done
- testfailure grep '^dpkg: warning:.*ignor.*' "${TMPWORKINGDIRECTORY}/rootdir/tmp-before/${TESTCALL}.output"
+ testfailure grep '^dpkg: warning:.*\(ignor\|unknown\).*' "${TMPWORKINGDIRECTORY}/rootdir/tmp-before/${TESTCALL}.output"
}
aptautotest_aptget_install() { testaptautotestnodpkgwarning "$@"; }