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
xmlstarletundjqauf jedem SUSE-Server. - Logging: Nutzen Sie das
loggerTool (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 |