Well, there is this “nifty” tool called patch2mail, which basically converts the XML for the updates to a more readable format. But you’re screwed if you want to do the same on SLES10. Since it ain’t shipping with the zypper xml wrapper thing, you need to do it a bit different.
So I ended up writing a small (and yet, ugly) shell script to generate me a mail of my liking ..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| #!/bin/bash
TO="admin-addr@localhost"
CLASSES="security recommended optional"
# Temporary files
ZYPP_LIST="$( mktemp /tmp/zypper-list.XXXXXX )"
ZYPP_DETAILS="$( mktemp /tmp/zypper-details.XXXXXX )"
TMP="$( mktemp /tmp/zypper-report.XXXXXX )"
zypper pch 2>/dev/null > $ZYPP_LIST
# Figure out how much updates are still pending
PENDING="$( cat $ZYPP_LIST | grep "| Needed" | wc -l )"
if [ $PENDING -eq 0 ] ; then
exit 0
fi
echo > $TMP
echo " Pending updates for $( domainname -f ) on $( date )" >> $TMP
for severity in $CLASSES; do
PACKAGES="$( cat $ZYPP_LIST | egrep "${severity}(.*)| Needed" |
cut -d| -f2 | sed "s,^ ,," )"
echo
echo " Category: $severity"
for package in $PACKAGES; do
zypper patch-info $package 2>/dev/null > $ZYPP_DETAILS
echo " * $package ($( cat $ZYPP_DETAILS | grep "Version: " |
sed "s,Version,version," ))"
echo " $( cat $ZYPP_DETAILS | grep "Summary: ")"
echo " $( cat $ZYPP_DETAILS | grep "Reboot Required:" )"
echo
done
echo
done >> $TMP
cat $TMP |
mail -s "[$( date +%F )] Update report for $( domainname -f )" $TO
trap 'rm -f "$TMP" "$ZYPP_LIST" "$ZYPP_DETAILS" >/dev/null 2>&1' 0
trap "exit 2" 1 2 3 15
# vim: set tw=80
|