MT#56581 Provide specific piupart environment for rainbow specific projects

For the rainbow specific packages we have specific needs regarding
repository access, but potentially also regarding package outside
of our control, like:

|   Setting up cloud-wrg (1.166.0~202206270731.84f00df-972+deb11) ...
|   /var/lib/dpkg/info/cloud-wrg.postinst: 5: systemctl: not found
|   dpkg: error processing package cloud-wrg (--configure):
|    installed cloud-wrg package post-installation script subprocess returned error exit status 127
| [...]
|   Setting up mongodb-org-server (3.6.23) ...
| [...]
|   Done.
|   /var/lib/dpkg/info/mongodb-org-server.postinst: 43: systemctl: not found

Handle this by detecting the project "rainbow-misc" and then set up a custom
cowbuilder based environment for piuparts usage:

1) Retrieve latest ngcp-rainbow-keyrings-pro package from
   release-trunk-$distribution for repository keys

2) Set up /etc/apt/sources.list.d/rainbow.list and
   /etc/apt/preferences as needed

3) Deploy further workarounds like the one for systemctl mentioned above

Change-Id: I8253aaa645c3b69d784f29a3b050267c3a8a03dc
master
Michael Prokop 2 years ago
parent 51939332fe
commit 00d15f6ffe

@ -20,8 +20,8 @@ rm -f piuparts.tap
if [ -n "${PROJECTNAME:-}" ] ; then
case "${PROJECTNAME}" in
metapackages)
echo "PROJECTNAME matches metapackages, using /tmp for the piuparts run instead of the tmpfs"
metapackages|rainbow-misc)
echo "PROJECTNAME is ${PROJECTNAME}, using /tmp for the piuparts run instead of the tmpfs"
PIUPARTS_BASEDIR="$(sudo mktemp --dry-run -d --tmpdir=/tmp/ --suffix=_piuparts_basetmp)"
PIUPARTS_TMPDIR="$(sudo mktemp -d --tmpdir=/tmp/ --suffix=_piuparts_tmp)"
;;
@ -36,6 +36,79 @@ echo "*** Using $architecture as \$architecture ***"
echo "*** Using $distribution as \$distribution ***"
echo "*** Using $mirror as \$mirror ***"
# set up sources.list, apt-preferences,... for rainbow specific needs
prepare_rainbow_environment() {
# do not operate on original to avoid modifications and problems with simultaneous runs
echo "*** Creating copy of /var/cache/pbuilder/base-${distribution}-${architecture}.cow ***"
sudo cp -a "/var/cache/pbuilder/base-${distribution}-${architecture}.cow" "${PIUPARTS_BASEDIR}"
echo "*** Setting up sources.list ***"
sudo cp sources.list.d/sources.list "$PIUPARTS_BASEDIR"/etc/apt/sources.list
sudo cp sources.list.d/builddeps.list "$PIUPARTS_BASEDIR"/etc/apt/sources.list.d/
echo "*** Retrieving latest ngcp-rainbow-keyrings package from release-trunk-${distribution} ***"
local packages_tmp
packages_tmp=$(mktemp -d)
wget --timeout=30 -O "${packages_tmp}"/Packages.gz "https://deb.sipwise.com/autobuild/dists/release-trunk-${distribution}/main/binary-amd64/Packages.gz"
# sed: display paragraphs matching the "Package: ..." string, then grab string "^Version: " and display the actual version via awk
# sort -u to avoid duplicates in repositories
local version
version=$(zcat "${packages_tmp}"/Packages.gz | sed "/./{H;\$!d;};x;/Package: ngcp-rainbow-keyrings-pro/b;d" | awk '/^Version: / {print $2}' | sort -u)
rm -rf "${packages_tmp}"
if [ -z "${version:-}" ] ; then
echo "Error: ngcp-rainbow-keyrings-pro version for release-trunk-${distribution} could not be detected." >&2
exit 1
fi
local deb_package="ngcp-rainbow-keyrings-pro_${version}_all.deb"
if ! sudo wget --timeout=30 -O "${PIUPARTS_BASEDIR}"/root/"${deb_package}" "https://deb.sipwise.com/autobuild/pool/main/n/ngcp-rainbow-misc/${deb_package}" ; then
echo "Error: failed to download ngcp-rainbow-keyrings-pro Debian package" >&2
exit 1
fi
echo "*** Installing ngcp-rainbow-misc package inside cowbuilder environment for keyring files ***"
if ! sudo chroot "${PIUPARTS_BASEDIR}" dpkg -i /root/"${deb_package}" ; then
echo "Error: failed to install ${deb_package} inside ${PIUPARTS_BASEDIR}" >&2
exit 1
fi
echo "*** Setting up /etc/apt/sources.list.d/rainbow.list ***"
cat << EOF | sudo tee "${PIUPARTS_BASEDIR}"/etc/apt/sources.list.d/rainbow.list
# installed via piuparts-tests.git / wrapper/piuparts_runner on the fly
deb [signed-by=/usr/share/keyrings/rainbow.pgp] http://deb.rainbow.sipwise.com/rainbow bullseye-lts main non-free
deb [signed-by=/usr/share/keyrings/mongodb.pgp] http://deb.rainbow.sipwise.com/mongodb stretch/mongodb-org/3.6 main
EOF
if ! [ -r "${PIUPARTS_BASEDIR}"/bin/systemctl ] ; then
echo "*** Faking availability of systemctl tool for cloud-wrg/mongodb-org-server packages ***"
sudo ln -s /bin/true "${PIUPARTS_BASEDIR}"/bin/systemctl
fi
echo "*** Setting up apt_preferences ***"
if [ -f sources.list.d/preferences ] ; then
sudo cp sources.list.d/preferences "$PIUPARTS_BASEDIR"/etc/apt/preferences
else
cat << EOF | sudo tee "$PIUPARTS_BASEDIR"/etc/apt/preferences
Package: *
Pin: release o=Sipwise
Pin-Priority: 990
Package: *
Pin: release o=The Sipwise VoIP platform
Pin-Priority: 990
Package: *
Pin: release o=mongodb
Pin-Priority: 600
Package: *
Pin: release o=Rainbow R&D
Pin-Priority: 600
EOF
fi
}
# set up sources.list, apt-preferences,... as needed
prepare_environment() {
# do not operate on original to avoid modifications and problems with simultaneous runs
@ -155,7 +228,14 @@ RUN_LICENSE_CLIENT=false # by default assume we don't have the ngcp-license-clie
find artifacts/ -name 'ngcp-license-client*' | grep -q '.' && RUN_LICENSE_CLIENT=true
# prepare environment for piuparts
prepare_environment
case "${PROJECTNAME}" in
rainbow-misc)
prepare_rainbow_environment
;;
*)
prepare_environment
;;
esac
if [ "$RUN_NGCP_SUPPORT_PACKAGES" = "true" ] ; then
echo "*** Found ngcp-support specific packages, executing ngcp_support_packages ***"

Loading…
Cancel
Save