Browse code

Detect missing packages with yum

yum -y doesn't report an error when packages are missing (see [1] for
upstream discussion). Thus we run the output of yum through a small
awk script looking for missing packages output.

The one change required for RHEL is that python-wsgiref is included in
the distro python, so doesn't need a separate package.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=965567

Change-Id: I9908ff4edbf2b0d961d25837a08a34e1417bbb02

Ian Wienand authored on 2014/02/28 12:29:02
Showing 2 changed files
... ...
@@ -13,6 +13,6 @@ python-lxml         #dist:f18,f19,f20,rhel7
13 13
 python-paste-deploy #dist:f18,f19,f20,rhel7
14 14
 python-routes
15 15
 python-sqlalchemy
16
-python-wsgiref
16
+python-wsgiref      #dist:f18,f19,f20
17 17
 pyxattr
18 18
 zlib-devel          # testonly
... ...
@@ -938,9 +938,24 @@ function yum_install {
938 938
     [[ "$OFFLINE" = "True" ]] && return
939 939
     local sudo="sudo"
940 940
     [[ "$(id -u)" = "0" ]] && sudo="env"
941
+
942
+    # The manual check for missing packages is because yum -y assumes
943
+    # missing packages are OK.  See
944
+    # https://bugzilla.redhat.com/show_bug.cgi?id=965567
941 945
     $sudo http_proxy=$http_proxy https_proxy=$https_proxy \
942 946
         no_proxy=$no_proxy \
943
-        yum install -y "$@"
947
+        yum install -y "$@" 2>&1 | \
948
+        awk '
949
+            BEGIN { fail=0 }
950
+            /No package/ { fail=1 }
951
+            { print }
952
+            END { exit fail }' || \
953
+                die $LINENO "Missing packages detected"
954
+
955
+    # also ensure we catch a yum failure
956
+    if [[ ${PIPESTATUS[0]} != 0 ]]; then
957
+        die $LINENO "Yum install failure"
958
+    fi
944 959
 }
945 960
 
946 961
 # zypper wrapper to set arguments correctly