Aktuelle Errata automatisiert Spacewalk zuweisen

Aktuelle Bugs und Sicherheitslecks werden in Form von Erratas den notwendigen Updates zugewiesen. Anwender des kommerziellen Red Hat Satellite oder SUSE Manager Servers erhalten diese Informationen direkt von ihrem Distributor. Bei der Verwendung von Spacewalk müsste man das manuell erledigen - zum Glück gibt es mit CEFS von Steve Meier ein Skript, was das automatisch erledigt: [klick mich!]

In regelmäßigen Abständen wird dort ein XML-Dokument mit allen verfügbaren Errata veröffentlicht: [klick mich!]

Dieses Skript lässt sich wunderbar in Form eines Cronjobs automatisieren, um immer über die aktuellsten Errata-Informationen zu verfügen. Vorab müssen dazu folgende Perl-Module auf dem Spacewalk-System installiert sein:

1# yum install perl-Text-Unidecode perl-XML-Simple

Es empfiehlt sich, den Import zumindest einmal manuell zu testen - ein solcher Vorgang wird wie folgt ausgeführt:

 1# env -i SPACEWALK_USER=su-errata SPACEWALK_PASS=xyz ./errata-import.pl --server localhost --errata errata.latest.xml --publish
 2INFO: Server is running API version 13
 3INFO: API version is supported
 4INFO: Authentication successful
 5INFO: Loading errata XML
 6INFO: Getting server inventory
 7INFO: Checking for unpublished errata
 8INFO: Scanning channel CentOS 6 Extras - x86_64
 9INFO: Scanning channel CentOS 6 Base - x86_64
10INFO: Scanning channel CentOS 6 Updates - x86_64
11INFO: Scanning channel Spacewalk Client - x86_64
12INFO: Scanning channel EPEL EL6 - x86_64
13...

Veröffentlichte Errata in Spacewalk

Das Skript durchsucht nach erfolgreichem Login alle Software-Kanäle (hier unter anderem CentOS 6 Base, Extras und Updates sowie EPEL) und weist passende Errata zu. Je nach Anzahl der Software-Kanäle kann dies einige Minuten in Anspruch nehmen.

Besonders wichtig ist der Schalter --publish, damit die passenden Erratas auch automatisch im Spacewalk-System veröffentlicht werden.

Es empfiehlt sich, für das Skript einen zusätzlichen Satellite Benutzer anzulegen, damit man nicht seinen Administrator-Account im Skript hinterlegen muss - über die Variablen SPACEWALK_USER und SPACEWALK_PASS müssen die Zugangsdaten nämlich im Klartext hinterlegt werden. Dem Benutzer muss die "Channel-Administrator"-Rolle zugewiesen werden.

Mein Cronjob sieht wie folgt aus:

 1# vi /etc/cron.daily/spacewalk_sync.cron
 2#!/bin/sh
 3MAILTO=root
 4
 5# try to create the lock and check the outcome
 6LOCKFILE=/var/run/spacewalk_sync.lock
 7#lockfile -r 0 ${LOCKFILE} 1>/dev/null 2>&1
 8#status=$?
 9#if [ ${status} -ne 0 ] ;then
10if [ -e "$LOCKFILE" ]; then
11        echo "Another instance already running. Aborting."
12        exit 1
13else
14        touch "$LOCKFILE"
15fi
16trap "rm ${LOCKFILE}" EXIT
17
18#sync channels and publish updates
19/usr/bin/spacewalk-repo-sync --channel centos6-base-x86_64
20                             --url http://mirror.centos.org/centos/6/os/x86_64/
21                             --type yum -c centos6-base-x86_64 >/dev/null
22
23/usr/bin/spacewalk-repo-sync --channel centos6-updates-x86_64
24                             --url http://mirror.centos.org/centos/6/updates/x86_64/
25                             --type yum -c centos6-updates-x86_64 >/dev/null
26
27/usr/bin/spacewalk-repo-sync --channel centos6-extras-x86_64
28                             --url http://mirror.centos.org/centos/6/extras/x86_64/
29                             --type yum -c centos6-extras-x86_64 >/dev/null
30
31/usr/bin/spacewalk-repo-sync --channel epel-el6-x86_64
32                             --url http://ftp-stud.hs-esslingen.de/pub/epel/6/x86_64/
33                             --type yum -c epel-el6-x86_64 >/dev/null
34
35#get errata file and checksums
36cd /tmp
37wget -N http://cefs.steve-meier.de/errata.latest.xml 1>/dev/null 2>&1
38wget -N http://cefs.steve-meier.de/errata.latest.md5 1>/dev/null 2>&1
39wget -N http://www.redhat.com/security/data/oval/com.redhat.rhsa-all.xml.bz2 1>/dev/null 2>&1
40bunzip2 -f /tmp/com.redhat.rhsa-all.xml.bz2
41
42#verify integrity
43grep "errata.latest.xml$" errata.latest.md5 > myerrata.md5
44md5sum -c myerrata.md5 1>/dev/null 2>&1
45if [ "$?" == 0 ]; then
46        #ok - import errata
47        SPACEWALK_PASS=xyz SPACEWALK_USER=su-errata /opt/tools/errata-import.pl --server localhost --errata errata.latest.xml --include-channels=centos6-updates-x86_64,epel-el6-x86_64 --rhsa-oval=/tmp/com.redhat.rhsa-all.xml --publish 1>/dev/null
48        if [ "$?" != 0 ]; then
49                echo "It seems like there was a problem while publishing the most recent errata..."
50                exit 1
51        fi
52        rm /tmp/myerrata.md5
53else
54        #errata information possibly invalid
55        echo "ERROR: md5 checksum mismatch, check download!"
56        exit 1
57fi

Zuerst werden das aktuelle XML-Dokument sowie die Prüfsummen der aktuellen XML-Dokumente bezogen (es gibt z. B. noch komprimierte Fassungen). Anschließend wird eine temporäre Datei erstellt, die lediglich die MD5-Prüfsumme der heruntergeladenen Datei enthält. Mithilfe dieser Datei wird die Integrität des Downloads sichergestellt, bevor die Errata importiert und angewandt werden.

Übersetzungen: