linux-rhel-centos-fedora automation bash scripting rhel fedora

Bash Scripting on RHEL & Fedora (Artikel 113)

Spezialisierte Shell-Programmierung für die Red Hat Welt. Erfahren Sie den Umgang mit Software Collections (SCL), Scripting von nmcli und die Integration in systemd-Dienste.

# Bash on RHEL: Spezial-Werkzeuge für Enterprise-Admins

TL;DR / Management Summary Während die Bash-Syntax universell ist, bietet RHEL (Red Hat Enterprise Linux) ein Set an Werkzeugen, die das Scripting in Enterprise-Umgebungen sicherer und mächtiger machen. In diesem Modul lernen wir, wie wir mit Software Collections (SCL) verschiedene Tool-Versionen in Skripten nutzen, wie wir den NetworkManager via Bash steuern und wie wir unsere Skript-Logs sauber in das RHEL-Ökosystem (logger, journald) integrieren.


# 1. Einführung & Architektur

Die RHEL-spezifische Shell-Umgebung.

In RHEL ist Stabilität Trumpf. Das bedeutet, /usr/bin/bash bleibt oft über Jahre auf der gleichen Version. Neue Tools kommen oft über SCL (Software Collections).

# Der Scripting-Stack (Mermaid)

graph TD
    A[Admin Script] --> B[SCL: Software Collections]
    B --> C[Modern Python / Node / Ruby]
    A --> D[RHEL Tools: nmcli, dnf, subscription-manager]
    A --> E[System Logger: /usr/bin/logger]
    E --> F[Journald / rsyslog]

# 2. Software Collections (SCL) in Skripten

Versionen jonglieren.

Wenn Ihr RHEL 7 standardmäßig Python 2.7 hat, Sie aber Python 3.9 für ein Skript brauchen:

#!/bin/bash
# Nutze SCL, um die Umgebung für den Rest des Skripts zu ändern
source scl_source enable rh-python39

# Jetzt läuft das Skript mit Python 3.9
python --version

# 3. RHEL Tools scripten: nmcli & dnf

Automatisierung von Core-Diensten.

# nmcli mit JSON-Parsing

Moderne RHEL-Tools können JSON ausgeben, was sie perfekt für Bash-Skripte in Kombination mit jq macht.

# Hole IP-Adresse von eth0 via nmcli und jq
IP=$(nmcli -g ip4.address device show eth0 | cut -d/ -f1)
echo "Current IP: $IP"

# Dnf Transaktions-Sicherheit

Nutzen Sie beim Scripting von dnf immer das --setopt=install_weak_deps=False Flag, um die Image-Größe gering zu halten.


# 4. Day-2 Operations: Logging & systemd

Skripte “erwachsen” machen.

# System-Logging mit logger

Schreiben Sie Meldungen direkt in das System-Journal, anstatt nur in eine Textdatei.

#!/bin/bash
TAG="MY_BACKUP_SCRIPT"

# Logge Start
logger -t $TAG "INFO: Starting daily backup"

# Führe Befehl aus und logge Fehler
if ! tar -czf /backup/data.tar.gz /data; then
    logger -t $TAG -p user.err "ERROR: Backup failed!"
    exit 1
fi

# 5. Troubleshooting & “War Stories”

Wenn der Cronjob schweigt.

# Story 1: “Der Pfad-Teufel in /etc/profile.d”

Symptom: Das Skript funktioniert, wenn der Admin es manuell startet, aber schlägt fehl, wenn es via cron oder systemd läuft. Ursache: RHEL lädt viele Pfade (z.B. für Java oder SCL) erst in der interaktiven Login-Shell. Lösung: Definieren Sie Pfade im Skript immer absolut (/usr/bin/dnf) oder sourcen Sie die Umgebung manuell: source /etc/profile.

# Story 2: “SELinux und der Script-Interpreter”

Symptom: Ein Bash-Skript in /home/admin/ kann keine Dateien in /var/www/ ändern, obwohl der User Root-Rechte hat. Ursache: SELinux verhindert, dass Skripte aus dem User-Home in geschützte Systembereiche schreiben. Lösung: Verschieben Sie Administrations-Skripte nach /usr/local/bin/ und geben Sie ihnen das Label bin_t.


# 6. Fazit & Empfehlung

  • SCL: Nutzen Sie SCL für moderne Laufzeitumgebungen, anstatt Pakete aus unsicheren Quellen zu kompilieren.
  • Logging: Nutzen Sie logger. Es macht Ihre Skripte für Monitoring-Systeme sichtbarer.
  • JSON: Installieren Sie immer jq, um die Ausgaben von nmcli und dnf sicher zu parsen.

# Anhang: Cheatsheet

Aufgabe RHEL Befehl
SCL Liste scl -l
SCL in Bash source scl_source enable <name>
Log an Journald logger -p user.info "Meldung"
JSON parsen `dnf list installed --json
OS Release Info source /etc/os-release && echo $PRETTY_NAME
Lockfile erstellen flock -n /var/run/myscript.lock ...
Pfad zu Binary which <command>