diff --git a/wrapper/piuparts_runner b/wrapper/piuparts_runner index 19fc24a..c02a754 100755 --- a/wrapper/piuparts_runner +++ b/wrapper/piuparts_runner @@ -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 ***"