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:

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:

# env -i SPACEWALK_USER=su-errata SPACEWALK_PASS=xyz ./errata-import.pl --server localhost --errata errata.latest.xml --publish
INFO: Server is running API version 13
INFO: API version is supported
INFO: Authentication successful
INFO: Loading errata XML
INFO: Getting server inventory
INFO: Checking for unpublished errata
INFO: Scanning channel CentOS 6 Extras - x86_64
INFO: Scanning channel CentOS 6 Base - x86_64
INFO: Scanning channel CentOS 6 Updates - x86_64
INFO: Scanning channel Spacewalk Client - x86_64
INFO: Scanning channel EPEL EL6 - x86_64
...
Veröffentlichte Errata in Spacewalk

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:

# vi /etc/cron.daily/spacewalk_sync.cron
#!/bin/sh
MAILTO=root

# try to create the lock and check the outcome
LOCKFILE=/var/run/spacewalk_sync.lock
#lockfile -r 0 ${LOCKFILE} 1>/dev/null 2>&1
#status=$?
#if [ ${status} -ne 0 ] ;then
if [ -e "$LOCKFILE" ]; then
        echo "Another instance already running. Aborting."
        exit 1
else
        touch "$LOCKFILE"
fi
trap "rm ${LOCKFILE}" EXIT

#sync channels and publish updates
/usr/bin/spacewalk-repo-sync --channel centos6-base-x86_64 \
                             --url http://mirror.centos.org/centos/6/os/x86_64/ \
                             --type yum -c centos6-base-x86_64 >/dev/null

/usr/bin/spacewalk-repo-sync --channel centos6-updates-x86_64 \
                             --url http://mirror.centos.org/centos/6/updates/x86_64/ \
                             --type yum -c centos6-updates-x86_64 >/dev/null

/usr/bin/spacewalk-repo-sync --channel centos6-extras-x86_64 \
                             --url http://mirror.centos.org/centos/6/extras/x86_64/ \
                             --type yum -c centos6-extras-x86_64 >/dev/null

/usr/bin/spacewalk-repo-sync --channel epel-el6-x86_64 \
                             --url http://ftp-stud.hs-esslingen.de/pub/epel/6/x86_64/ \
                             --type yum -c epel-el6-x86_64 >/dev/null

#get errata file and checksums
cd /tmp
wget -N http://cefs.steve-meier.de/errata.latest.xml 1>/dev/null 2>&1
wget -N http://cefs.steve-meier.de/errata.latest.md5 1>/dev/null 2>&1
wget -N http://www.redhat.com/security/data/oval/com.redhat.rhsa-all.xml.bz2 1>/dev/null 2>&1
bunzip2 -f /tmp/com.redhat.rhsa-all.xml.bz2

#verify integrity
grep "errata.latest.xml$" errata.latest.md5 > myerrata.md5
md5sum -c myerrata.md5 1>/dev/null 2>&1
if [ "$?" == 0 ]; then
        #ok - import errata
        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
        if [ "$?" != 0 ]; then
                echo "It seems like there was a problem while publishing the most recent errata..."
                exit 1
        fi
        rm /tmp/myerrata.md5
else
        #errata information possibly invalid
        echo "ERROR: md5 checksum mismatch, check download!"
        exit 1
fi

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.

Sharing is caring


Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedInShare on XingShare on RedditPrint this pageEmail this to someone

2 Kommentare Schreibe einen Kommentar

  1. Dear Chiristian,

    I have a simply question regarding errata-import.pl script. I followed the instruction on your blog:

    Script works great, just dont know how to distinguished 64 from 32 errata packages during errata import into the spacewalk since there is no such option included into the script.

    I am running following command:

    for example:

    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

    but on the end both architectures 64bit and 32bit have been imported to my spacewalk channels. Is there a possibility to add --os-version option or --architecture option.-

    Please let me know if there is a workaround to this issue?

    Best Regards,
    Kris

Schreibe einen Kommentar