]> git.arvados.org - arvados.git/blob - build/package-testing/deb-common-test-packages.sh
Merge branch '22965-arvados-dev-move'
[arvados.git] / build / package-testing / deb-common-test-packages.sh
1 #!/bin/bash
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: AGPL-3.0
5 set -eu
6
7 # Set up
8 DEBUG=${ARVADOS_DEBUG:-0}
9 STDOUT_IF_DEBUG=/dev/null
10 STDERR_IF_DEBUG=/dev/null
11 DASHQQ_UNLESS_DEBUG=-qq
12 if [[ "$DEBUG" != "0" ]]; then
13   STDOUT_IF_DEBUG=/dev/stdout
14   STDERR_IF_DEBUG=/dev/stderr
15   DASHQQ_UNLESS_DEBUG=
16 fi
17
18 # Multiple .deb based distros symlink to this script, so extract the target
19 # from the invocation path.
20 target=$(echo $0 | sed 's/.*test-packages-\([^.]*\)\.sh.*/\1/')
21
22 export ARV_PACKAGES_DIR="/arvados/packages/$target"
23
24 dpkg-query --show > "$ARV_PACKAGES_DIR/$1.before"
25
26 apt-get $DASHQQ_UNLESS_DEBUG --allow-insecure-repositories update
27
28 apt-get $DASHQQ_UNLESS_DEBUG -y --allow-unauthenticated install "$1" >"$STDOUT_IF_DEBUG" 2>"$STDERR_IF_DEBUG" ||
29     install_status=$?
30
31 dpkg-query --show > "$ARV_PACKAGES_DIR/$1.after"
32
33 diff "$ARV_PACKAGES_DIR/$1.before" "$ARV_PACKAGES_DIR/$1.after" > "$ARV_PACKAGES_DIR/$1.diff" || true
34
35 mkdir -p /tmp/opts
36 cd /tmp/opts
37
38 export ARV_PACKAGES_DIR="/arvados/packages/$target"
39
40 if [[ -f $(ls -t "$ARV_PACKAGES_DIR/$1"_*.deb 2>/dev/null | head -n1) ]] ; then
41     debpkg=$(ls -t "$ARV_PACKAGES_DIR/$1"_*.deb | head -n1)
42 else
43     debpkg=$(ls -t "$ARV_PACKAGES_DIR/processed/$1"_*.deb | head -n1)
44 fi
45
46 dpkg-deb -x $debpkg .
47
48 if [[ "$DEBUG" != "0" ]]; then
49   find -type f -name '*.so' | while read so; do
50       printf "\n== Package dependencies for %s ==\n" "$so"
51       # dpkg is not fully aware of merged-/usr systems: ldd may list a library
52       # under /lib where dpkg thinks it's under /usr/lib, or vice versa.
53       # awk constructs globs that we pass to `dpkg --search` to be flexible
54       # about which version we find. This could potentially return multiple
55       # results, but doing better probably requires restructuring this whole
56       # code to find and report the best match across multiple dpkg queries.
57       ldd "$so" \
58           | awk 'BEGIN { ORS="\0" } ($3 ~ /^\//) {print "*" $3}' \
59           | sort --unique --zero-terminated \
60           | xargs -0 --no-run-if-empty dpkg --search \
61           | cut -d: -f1 \
62           | sort --unique
63   done
64 fi
65
66 case "${install_status:-0}-$1" in
67     0-* | 100-arvados-api-server )
68         exec /jenkins/package-testing/common-test-packages.sh "$1"
69         ;;
70     *)
71         exit "$install_status"
72         ;;
73 esac