From c17684fbbbf55d530329c95f26cbb8bb7c503225 Mon Sep 17 00:00:00 2001 From: Johannes Löthberg Date: Wed, 22 Nov 2017 17:36:13 +0100 Subject: repro-al build: Use expac to get a full list of actual pkgbases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously we would just use whatever `pacman -Slq` outputs, but that is full of split packages that aren't valid pkgbases, leading to lots of uslessly failed builds. Instead we should use something like expac to get only a list of valid pkgbases. Signed-off-by: Johannes Löthberg --- bin/reproducible_build_archlinux_pkg.sh | 27 ++++++++++++++++++++------- bin/reproducible_setup_archlinux_schroot.sh | 2 +- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/bin/reproducible_build_archlinux_pkg.sh b/bin/reproducible_build_archlinux_pkg.sh index 0e35bf3b..9cc026c4 100755 --- a/bin/reproducible_build_archlinux_pkg.sh +++ b/bin/reproducible_build_archlinux_pkg.sh @@ -54,15 +54,28 @@ update_archlinux_repositories() { if $NEED_UPDATE ; then local SESSION="archlinux-scheduler-$RANDOM" schroot --begin-session --session-name=$SESSION -c jenkins-reproducible-archlinux + schroot --run-session -c $SESSION --directory /var/tmp -- sudo pacman -Syu --noconfirm + # Get a list of unique package bases. Non-split packages don't have a pkgbase set + # so we need to use the pkgname for them instead. + schroot --run-session -c $SESSION --directory /var/tmp -- expac -S '%r %e %n' | \ + while read repo pkgbase pkgname; do + if [[ "$pkgbase" = "(null)" ]]; then + printf '%s %s\n' "$repo" "$pkgname" + else + printf '%s %s\n' "$repo" "$pkgbase" + fi + done | sort -u > "$ARCHLINUX_PKGS"_full_pkgbase_list + for REPO in $ARCHLINUX_REPOS ; do - if [ ! -f ${ARCHLINUX_PKGS}_$REPO ] || [ $DUMMY -nt ${ARCHLINUX_PKGS}_$REPO ] ; then - echo "$(date -u ) - updating list of available packages in repository '$REPO'." - schroot --run-session -c $SESSION --directory /var/tmp -- sudo pacman -Syu --noconfirm - schroot --run-session -c $SESSION --directory /var/tmp -- pacman -Slq "$REPO" | xargs echo > ${ARCHLINUX_PKGS}_$REPO - echo "$(date -u ) - these packages in repository '$REPO' are known to us:" - cat ${ARCHLINUX_PKGS}_$REPO - fi + echo "$(date -u ) - updating list of available packages in repository '$REPO'." + grep "^$REPO" "$ARCHLINUX_PKGS"_full_pkgbase_list | \ + while read repo pkgbase; do + printf '%s\n' "$pkgbase" + done > "$ARCHLINUX_PKGS"_"$REPO" + echo "$(date -u ) - these packages in repository '$REPO' are known to us:" + cat ${ARCHLINUX_PKGS}_$REPO done + rm "$ARCHLINUX_PKGS"_full_pkgbase_list schroot --end-session -c $SESSION else echo "$(date -u ) - repositories recent enough, no update needed." diff --git a/bin/reproducible_setup_archlinux_schroot.sh b/bin/reproducible_setup_archlinux_schroot.sh index b461791d..1c56ee23 100755 --- a/bin/reproducible_setup_archlinux_schroot.sh +++ b/bin/reproducible_setup_archlinux_schroot.sh @@ -109,7 +109,7 @@ if [ "$HOSTNAME" = "profitbricks-build4-amd64" ] ; then sed -i 's/^#*XferCommand.*/XferCommand = curl --insecure -C - -f %u > %o/' "$SCHROOT_BASE/$TARGET/etc/pacman.conf" fi $ROOTCMD bash -l -c 'pacman -Syu --noconfirm' -$ROOTCMD bash -l -c 'pacman -S --noconfirm base-devel devtools fakechroot asciidoc asp' +$ROOTCMD bash -l -c 'pacman -S --noconfirm base-devel devtools fakechroot asciidoc asp expac' $ROOTCMD bash -l -c 'yes | pacman -S gcc-multilib lib32-fakeroot lib32-libltdl' # configure sudo echo 'jenkins ALL= NOPASSWD: /usr/sbin/pacman *' | $ROOTCMD tee -a /etc/sudoers -- cgit v1.2.3-54-g00ecf