This is an old revision of the document!
<code bash> #!/bin/bash
# License: GPL # NO WARRANTY
# This script was written to find out which opsi products failed recently. # opsi-admin returns a list of all products where state is “unknown” and action # is “none”. This script just saves the list and compares it to the list it got # last time. After that, this script tries to get the cause of the error by # grep for “fatal error” at the opsi logfile.
# If you have any suggestions, questions or comments, # please put them here: http://forum.opsi.org/wiki/userspace
# Copyright User “test”, 2013
FOLDER=$HOME/ErrorState ERRORSBEFORE=$FOLDER/unknown-1.txt ERRORSNOW=$FOLDER/unknown-2.txt CLIENTLIST=/tmp/list-clients.txt NEWERRORS=/tmp/new-opsi-errors.txt NOW=`date +%Y-%m-%d_%H-%M-%S`
# First call of this script: There is no list from “before”, # so create an empty list. if ! -f $ERRORSBEFORE then mkdir -p $FOLDER
echo '[' > $ERRORSBEFORE echo ']' >> $ERRORSBEFORE
fi
# Get all packages on clients where state=unknown and action=none. Remove “ and , - then sort and save the list. opsi-admin -d method productOnClient_getIdents '[]' \{\”installationStatus\“:\”unknown\“,\”actionRequest\“:\”none\“\} | sed 's/\”g;s/,$g'| sort > $ERRORSNOW
# Compare list before and after this check. List “new” errors. diff $ERRORSBEFORE $ERRORSNOW| grep '>' | cut -d' ' -f2- > $NEWERRORS cat $NEWERRORS | cut -f3 -d';' | sort -u > $CLIENTLIST
# No new errors since last call. Clean up and exit. if ! -s $NEWERRORS then rm $NEWERRORS
mv $ERRORSNOW $ERRORSBEFORE exit 0
fi
# List new errors. echo -e 'List of products on clients with state:unknown and action:none\n' cat $NEWERRORS echo -e '\nList of error messages from logfiles:'
# Search for error message of failed product(s). cd /var/log/opsi/instlog/ for client in `cat $CLIENTLIST` do if ! -s $client.log
then echo "$client: no logfile." else # Find all failed packages of one client. Search logfile for error message(s). Then write client # and product name before the text of the error message. grep $client $NEWERRORS | cut -f1 -d';' | while read product do grep -B20 "installed product: $product" $client.log | grep -B1 'fatal' | grep -v 'Error level set to fatal' | grep -v '^--$' | grep -v '\t$' | sed "s/^/$client: $product\t/g" done fi
done
rm $NEWERRORS mv $ERRORSNOW $ERRORSBEFORE </code bash>