I had the problem, that the automatic update function of YaST doesn’t work like I want it to. I just wanted it to install only those updates, that ain’t interactive, don’t need a service restart and don’t need a reboot.
YaST does only feature an online update that skips “interactive” updates (I’ve never even encountered an interactive update up till now). So I went ahead and wrote a (hackish) script, that achieves what I need.
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
43
44
| #!/bin/bash
TMPDIR="$( mktemp -d /tmp/autoupdate-XXXXXX )"
# Wake up rug
rug --quiet ping -a
# Get the patchlist from rug
rug --terse pch -u | grep "|Needed" | cut -d| -f2 |
sed -e "s,sdkp2-,," -e "s,slesp2-,," |
sort -u > $TMPDIR/patch-list
for package in $( < $TMPDIR/patch-list ); do
# Get the patch-details
rug --terse patch-info slesp2-$package > $TMPDIR/patch-details
# Parse those patch-details for "unwanted" interactions
is_interactive="$( cat $TMPDIR/patch-details |
grep "^Interactive:" | cut -d " " -f2 )"
needs_restart="$( cat $TMPDIR/patch-details |
grep "^Restart Required:" | cut -d " " -f3 )"
needs_reboot="$( cat $TMPDIR/patch-details |
grep "^Reboot Required:" | cut -d " " -f3 )"
if [ "$is_interactive" == "No" -a "$needs_restart" == "No"
-a "$needs_reboot" == "No" ] ; then
tmp_package="$( cat $TMPDIR/patch-details | grep ^atom | cut -d -f2 |
sed ':a;N;$!ba;s/n/ /g' )"
for i in $tmp_package; do
RPM_STATUS=$( rpm -qi $i )
if [ "$RPM_STATUS" != "package $i is not installed" -a
"$( rug --terse lu | cut -d| -f4 | grep "$i$" )" ] ; then
patch_list="$patch_list $i"
fi
done
fi
done
rug --quiet install --no-confirm $patch_list
rug --quiet clean-cache
trap "rm -rf "$TMPDIR" >/dev/null 2>&1" ERR EXIT INT TERM HUP
# vim: set tw=80 ts=2 sw=2 et softtabstop=2
|
And just for me, the crontag entry:
1
| 30 22 * * * root /usr/local/sbin/autoupdate
|