X-Git-Url: http://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=etc%2Fgrml%2Ffai%2Fconfig%2Fscripts%2FGRMLBASE%2F01-packages;h=bf92ae922976fb7a92d11a636d2fd7eba08bae3e;hp=3033c72fb26023548291d81200eb2794f16d3318;hb=7cf0d67457c7a730a4cbdec28f7f9bdcd180a361;hpb=c9ebd4a91cada380bc8d65ea75c5f09da3a89630 diff --git a/etc/grml/fai/config/scripts/GRMLBASE/01-packages b/etc/grml/fai/config/scripts/GRMLBASE/01-packages index 3033c72..bf92ae9 100755 --- a/etc/grml/fai/config/scripts/GRMLBASE/01-packages +++ b/etc/grml/fai/config/scripts/GRMLBASE/01-packages @@ -1,5 +1,5 @@ #!/bin/bash -# Filename: /etc/grml/fai/config/scripts/GRMLBASE/01-packages +# 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 # Bug-Reports: see http://grml.org/bugs/ @@ -9,22 +9,40 @@ 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/${PACKAGE_LIST}" ] ; then - echo "No $target/${PACKAGE_LIST} found, will not run package validation check." + echo "No $target/${PACKAGE_LIST} found, will not run package validation check." else - printf "Validating package list: " - if $ROOTCMD dpkg --list $(grep -v '^#' $target/${PACKAGE_LIST} | grep -v -- '-$') >/dev/null 2>$LOGDIR/package_errors.log ; then - printf "done - no errors found\n" - else - printf "failed (there have been errors, find them at $LOGDIR/package_errors.log)\n" - fi + printf "Validating package list: " + + TMPSTDOUT=$(mktemp) + TMPSTDERR=$(mktemp) + + # 1) catch packages that aren't in state 'ii' (marked for installation + # and successfully instead) on stdout + # 2) catch error messages like 'dpkg-query: no packages found matching $package" + # for packages unknown to dpkg on stderr + # NOTE: 'grep -v -- '-$' ignores packages in FAI's package list that are + # marked for removal + $ROOTCMD dpkg --list $(grep -v '^#' $target/${PACKAGE_LIST} | grep -v -- '-$') 2>"$TMPSTDERR" | \ + grep -e '^[urph][ncufhWt]' > "$TMPSTDOUT" || true + + # extract packages from stdout + awk '/^un/ {print $2 " not_installable"}' "$TMPSTDOUT" > "$LOGDIR/package_errors.log" + + # extract packages from stderr + grep 'packages found matching' "$TMPSTDERR" | \ + sed 's/dpkg-query: [Nn]o packages found matching \(.*\)/\1 not_installable/' >> "$LOGDIR/package_errors.log" + + if [ -s "$LOGDIR/package_errors.log" ] ; 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 "$TMPSTDOUT" "$TMPSTDERR" 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