Package validation: also detect packages that failed to install
[grml-live.git] / etc / grml / fai / config / scripts / GRMLBASE / 01-packages
index 30e6589..b13aab5 100755 (executable)
@@ -1,5 +1,5 @@
-#!/bin/sh
-# Filename:      /etc/grml/fai/config/scripts/GRMLBASE/01-packages
+#!/bin/bash
+# Filename:      ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/01-packages
 # Purpose:       check for packages that have been requested but could not be installed
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
@@ -9,20 +9,29 @@
 set -u
 set -e
 
-[ -r /etc/grml/grml-live.conf ]  && . /etc/grml/grml-live.conf
-[ -r /etc/grml/grml-live.local ] && . /etc/grml/grml-live.local
+PACKAGE_LIST=/var/log/install_packages.list
 
-
-if ! [ -r "$target/tmp/packages.list" ] ; then
-   echo "No $target/tmp/packages.list found, will not run package validation check."
+if ! [ -r "$target/${PACKAGE_LIST}" ] ; then
+   echo "No $target/${PACKAGE_LIST} found, will not run package validation check."
 else
    printf "Validating package list: "
-   if $ROOTCMD dpkg --list $(grep -v '^#' $target/tmp/packages.list) >/dev/null 2>$LOGDIR/package_errors.log ; then
-      printf "done - no errors found\n"
-   else
+   TMPFILE=$(mktemp)
+
+   $ROOTCMD dpkg --list $(grep -v '^#' $target/${PACKAGE_LIST} | grep -v -- '-$') 2>&1 | \
+     grep -e '^un' -e 'No packages' > "$TMPFILE" || true
+
+   awk '/^un/ {print $2 " not_installable"}' "$TMPFILE" > "$LOGDIR/package_errors.log"
+   awk '/^No packages found matching/ {print $5 " not_available"}' "$TMPFILE" | \
+     sed 's/\. / /' >> "$LOGDIR/package_errors.log"
+
+   if [ -s "$TMPFILE" ] ; then
       printf "failed (there have been errors, find them at $LOGDIR/package_errors.log)\n"
+   else
+      printf "done - no errors found\n"
    fi
+
+   rm -f "$TMPFILE"
 fi
 
 ## END OF FILE #################################################################
-# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=3
+# vim:ft=sh expandtab ai tw=80 tabstop=4 shiftwidth=2