linux-suse-opensuse automation bash scripting yast zypper sles

Bash Scripting on SUSE: Admin Tools (Artikel 172)

Spezialisierte Shell-Programmierung für SUSE-Administratoren. Erfahren Sie, wie Sie YaST-Module skripten, Zypper-Transaktionen automatisieren und Systemdaten professionell parsen.

# Bash on SUSE: Automatisierung mit YaST und Zypper

TL;DR / Management Summary Jede SUSE-Infrastruktur braucht maßgeschneiderte Skripte. Während die Bash-Syntax bekannt ist (Artikel 049), liegt der Fokus hier auf der Interaktion mit SUSE-spezifischen Tools. Ein Senior Admin nutzt die CLI-Schnittstellen von YaST, automatisiert komplexe Repository-Abfragen mit Zypper und integriert Skripte nahtlos in den Snapper-Snapshot-Workflow, um Fehlkonfigurationen automatisch abzufangen.


# 1. Einführung & Architektur

Die SUSE-Scripting Ebene.

Ein SUSE-Skript sollte nicht nur Befehle ausführen, sondern die System-Zustände (Wicked, YaST, Btrfs) respektieren.

# Der Admin-Scripting-Stack (Mermaid)

graph LR
    A[Admin Script] --> B[yast2 CLI]
    A --> C[zypper --non-interactive]
    A --> D[wicked ifup/show]
    A --> E[snapper create/rollback]
    B/C/D/E --> F[SUSE System Engine]

# 2. YaST skripten: Die CLI-Power

GUI-Features in der Shell.

Wussten Sie, dass fast jedes YaST-Modul Befehle auf der Konsole annimmt?

# Beispiele

# Hostname via YaST setzen (schreibt mehrere Files sauber)
sudo yast2 host set hostname="server01.company.local"

# Netzwerk-Interface Info
sudo yast2 lan show id=0

# Firewall-Dienst hinzufügen
sudo yast2 firewall services add service=service:http zone=public

# 3. Zypper in Skripten

Automatisierte Paketverwaltung.

Nutzen Sie immer das --non-interactive Flag, damit das Skript nicht bei GPG-Fragen hängen bleibt.

# Repository-Checks

# Prüfen, ob ein bestimmtes Repo aktiv ist, bevor man installiert
if zypper lr | grep -q "Packman"; then
    zypper --non-interactive in ffmpeg
fi

# JSON Output parsen

Ideal für Report-Skripte (erfordert jq):

# Zeige alle installierten Pakete, die 'python' im Namen haben
zypper --xmlout search -i python | xmlstarlet sel -t -v "//item/@name"

(Hinweis: Zypper nutzt oft XML statt JSON, daher ist xmlstarlet unter SUSE ein Pflicht-Tool).


# 4. Day-2 Operations: Snapper-Integration

Skripte mit Sicherheitsnetz.

Erstellen Sie immer einen Snapshot, bevor Ihr Skript tiefgreifende Änderungen am System macht.

#!/bin/bash
# 1. Snapshot vor der Änderung
SNAP_ID=$(snapper create -d "Before config update" -p)

# 2. Logik ausführen
# ...

# 3. Bei Fehler: Rollback
if [ $? -ne 0 ]; then
    logger -t MY_SCRIPT "Error detected, rolling back to $SNAP_ID"
    snapper rollback $SNAP_ID
    exit 1
fi

# 5. Troubleshooting & “War Stories”

Praxisfallen.

# Story 1: “Der interaktive Zypper-Hänger”

Symptom: Ein Cronjob-Skript hängt ewig und blockiert den DNF/Zypper-Lock. Ursache: Das Skript ruft zypper up ohne --no-confirm auf. Zypper wartet auf die Bestätigung einer Lizenzvereinbarung oder eines Anbieterwechsels. Lösung: Nutzen Sie immer zypper --non-interactive --no-gpg-checks up --auto-agree-with-licenses.

# Story 2: “YaST XML Mismatch”

Symptom: Ein Skript, das XML-Konfigurationen für AutoYaST generiert, führt zu Installationsabbrüchen. Ursache: Sonderzeichen im XML sind nicht korrekt maskiert (z.B. & in Passwörtern). Lösung: Nutzen Sie Tools wie xmlstarlet, um XML-Strukturen programmatisch zu bauen, anstatt sie mit echo und cat zusammenzustückeln.


# 6. Fazit & Empfehlung

  • Tools: Installieren Sie xmlstarlet und jq auf jedem SUSE-Server.
  • Logging: Nutzen Sie das logger Tool (Artikel 113), um Skript-Events im systemd-Journal sichtbar zu machen.
  • Wahl: Nutzen Sie für komplexe System-Anpassungen lieber die YaST-CLI-Kommandos als direkte manuelle Datei-Manipulationen.

# Anhang: Cheatsheet

Aufgabe SUSE / CLI Befehl
YaST Module auflisten yast2 -l
Hilfe zum Modul yast2 <modul> help
Zypper XML Output zypper --xmlout <befehl>
Snapshot erstellen snapper create
Dienst neustarten systemctl restart <name>
Log an System-Log logger "Meldung"
Hardware Info hwinfo --short