ESPO-01 entfernt ScreenConnect und prueft apt - Ursache der ESPO-02-Fehler
Auf der Test-VM liegt der ScreenConnect-Client des Agenten im Zustand iU (entpackt, nie konfiguriert), weil ihm java5-runtime fehlt. In diesem Zustand blockiert er jede apt-Operation; ESPO-02 scheiterte daran, nicht an den Docker-Pins. ESPO-01 entfernt den Client jetzt als erstes (Paketname traegt je Geraet ein anderes Suffix, daher Mustersuche), raeumt mit --fix-broken auf und bricht ab, wenn apt danach immer noch gebrochene Abhaengigkeiten meldet. Damit ist O-20 im Skript erledigt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
9663fcb753
commit
d4e0294bfd
@ -11,7 +11,34 @@ echo "ESPO-01-Grundeinrichtung, Skriptstand 2026-09-24"
|
|||||||
KUNDE_ROH="${1:-}"
|
KUNDE_ROH="${1:-}"
|
||||||
FEHLER=0
|
FEHLER=0
|
||||||
|
|
||||||
# 1. Hostname aus dem Kundennamen ableiten (klein, nur a-z 0-9 und Bindestrich), damit die
|
# 1. ScreenConnect entfernen. Der Agent rollt den Client aus, ADR 0003 sagt: wir wollen ihn nicht.
|
||||||
|
# Auf Ubuntu bleibt er ausserdem halb konfiguriert haengen, weil ihm java5-runtime fehlt - und
|
||||||
|
# in diesem Zustand blockiert er jede weitere apt-Operation auf der VM (gemessen am 24.09.2026).
|
||||||
|
SC="$(dpkg-query -W -f='${Package}\n' 'connectwisecontrol-*' 2>/dev/null | grep . || true)"
|
||||||
|
if [ -n "$SC" ]; then
|
||||||
|
echo "ScreenConnect gefunden: $(echo "$SC" | tr '\n' ' ')"
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get purge -y -q $SC >/dev/null 2>&1 \
|
||||||
|
|| dpkg --purge --force-depends $SC >/dev/null 2>&1 || true
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get --fix-broken install -y -q >/dev/null 2>&1 || true
|
||||||
|
if dpkg-query -W -f='${Package}\n' 'connectwisecontrol-*' 2>/dev/null | grep -q .; then
|
||||||
|
echo "FEHLER: ScreenConnect liess sich nicht entfernen"; FEHLER=1
|
||||||
|
else
|
||||||
|
echo "ScreenConnect: entfernt"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "ScreenConnect: nicht installiert"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. apt muss danach sauber sein, sonst scheitert jeder folgende Schritt an einem fremden Paket.
|
||||||
|
if ! DEBIAN_FRONTEND=noninteractive apt-get check >/dev/null 2>&1; then
|
||||||
|
echo "FEHLER: apt meldet weiterhin gebrochene Abhaengigkeiten:"
|
||||||
|
dpkg -l | awk '$1 !~ /^ii/ && NR > 5 {print " " $0}'
|
||||||
|
FEHLER=1
|
||||||
|
else
|
||||||
|
echo "apt: keine gebrochenen Abhaengigkeiten"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. Hostname aus dem Kundennamen ableiten (klein, nur a-z 0-9 und Bindestrich), damit die
|
||||||
# Flotte im RMM und in Logs eindeutig benannt ist.
|
# Flotte im RMM und in Logs eindeutig benannt ist.
|
||||||
KUNDE=$(printf '%s' "$KUNDE_ROH" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9' '-' | sed 's/-\+/-/g; s/^-//; s/-$//')
|
KUNDE=$(printf '%s' "$KUNDE_ROH" | tr '[:upper:]' '[:lower:]' | tr -c 'a-z0-9' '-' | sed 's/-\+/-/g; s/^-//; s/-$//')
|
||||||
SOLL="crm-${KUNDE}"
|
SOLL="crm-${KUNDE}"
|
||||||
@ -25,7 +52,7 @@ else
|
|||||||
echo "Hostname: $SOLL (unveraendert)"
|
echo "Hostname: $SOLL (unveraendert)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. Hinweis auf das Initialpasswort aus dem Konsolen-Login entfernen - er hat nach der
|
# 4. Hinweis auf das Initialpasswort aus dem Konsolen-Login entfernen - er hat nach der
|
||||||
# Erstanmeldung keinen Zweck mehr und steht sonst dauerhaft am Anmeldebildschirm.
|
# Erstanmeldung keinen Zweck mehr und steht sonst dauerhaft am Anmeldebildschirm.
|
||||||
if grep -q "Initialpasswort" /etc/issue; then
|
if grep -q "Initialpasswort" /etc/issue; then
|
||||||
sed -i '/Initialpasswort/d; /beim ersten Anmelden/d' /etc/issue
|
sed -i '/Initialpasswort/d; /beim ersten Anmelden/d' /etc/issue
|
||||||
@ -34,7 +61,7 @@ else
|
|||||||
echo "/etc/issue: kein Hinweis vorhanden"
|
echo "/etc/issue: kein Hinweis vorhanden"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 3. Pruefen, dass das Konto ein gueltiges Passwort hat (Status P) - sonst ist die
|
# 5. Pruefen, dass das Konto ein gueltiges Passwort hat (Status P) - sonst ist die
|
||||||
# Erstinbetriebnahme unvollstaendig.
|
# Erstinbetriebnahme unvollstaendig.
|
||||||
if [ "$(passwd -S administrator | awk '{print $2}')" = "P" ]; then
|
if [ "$(passwd -S administrator | awk '{print $2}')" = "P" ]; then
|
||||||
echo "Konto administrator: Passwort gesetzt"
|
echo "Konto administrator: Passwort gesetzt"
|
||||||
@ -42,7 +69,7 @@ else
|
|||||||
echo "FEHLER: Konto administrator hat kein gueltiges Passwort"; FEHLER=1
|
echo "FEHLER: Konto administrator hat kein gueltiges Passwort"; FEHLER=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 4. SSH haerten: keine Root-Anmeldung, wenige Fehlversuche, kurze Anmeldefrist.
|
# 6. SSH haerten: keine Root-Anmeldung, wenige Fehlversuche, kurze Anmeldefrist.
|
||||||
install -d -m 755 /etc/ssh/sshd_config.d
|
install -d -m 755 /etc/ssh/sshd_config.d
|
||||||
cat > /etc/ssh/sshd_config.d/10-espo.conf <<'CONF'
|
cat > /etc/ssh/sshd_config.d/10-espo.conf <<'CONF'
|
||||||
PermitRootLogin no
|
PermitRootLogin no
|
||||||
@ -51,30 +78,30 @@ LoginGraceTime 20
|
|||||||
CONF
|
CONF
|
||||||
if sshd -t; then systemctl reload ssh && echo "SSH: PermitRootLogin no, MaxAuthTries 3"; else echo "FEHLER: sshd-Konfiguration ungueltig"; FEHLER=1; fi
|
if sshd -t; then systemctl reload ssh && echo "SSH: PermitRootLogin no, MaxAuthTries 3"; else echo "FEHLER: sshd-Konfiguration ungueltig"; FEHLER=1; fi
|
||||||
|
|
||||||
# 5. Journal begrenzen, damit Logs das Wurzeldateisystem nicht fuellen koennen.
|
# 7. Journal begrenzen, damit Logs das Wurzeldateisystem nicht fuellen koennen.
|
||||||
install -d -m 755 /etc/systemd/journald.conf.d
|
install -d -m 755 /etc/systemd/journald.conf.d
|
||||||
printf '[Journal]\nSystemMaxUse=500M\n' > /etc/systemd/journald.conf.d/10-espo.conf
|
printf '[Journal]\nSystemMaxUse=500M\n' > /etc/systemd/journald.conf.d/10-espo.conf
|
||||||
systemctl restart systemd-journald && echo "journald: SystemMaxUse=500M"
|
systemctl restart systemd-journald && echo "journald: SystemMaxUse=500M"
|
||||||
|
|
||||||
# 6. needrestart daran hindern, containerd automatisch neu zu starten - das wuerde die
|
# 8. needrestart daran hindern, containerd automatisch neu zu starten - das wuerde die
|
||||||
# laufenden Container mitreissen. docker ist ab Werk schon ausgenommen.
|
# laufenden Container mitreissen. docker ist ab Werk schon ausgenommen.
|
||||||
install -d -m 755 /etc/needrestart/conf.d
|
install -d -m 755 /etc/needrestart/conf.d
|
||||||
printf '# containerd nicht automatisch neu starten (Container haengen daran).\n$nrconf{override_rc}{qr(^containerd)} = 0;\n' > /etc/needrestart/conf.d/10-espo.conf
|
printf '# containerd nicht automatisch neu starten (Container haengen daran).\n$nrconf{override_rc}{qr(^containerd)} = 0;\n' > /etc/needrestart/conf.d/10-espo.conf
|
||||||
echo "needrestart: containerd ausgenommen"
|
echo "needrestart: containerd ausgenommen"
|
||||||
|
|
||||||
# 7. Zeitzone sicherstellen.
|
# 9. Zeitzone sicherstellen.
|
||||||
if [ "$(timedatectl show -p Timezone --value)" != "Europe/Berlin" ]; then
|
if [ "$(timedatectl show -p Timezone --value)" != "Europe/Berlin" ]; then
|
||||||
timedatectl set-timezone Europe/Berlin && echo "Zeitzone auf Europe/Berlin gesetzt"
|
timedatectl set-timezone Europe/Berlin && echo "Zeitzone auf Europe/Berlin gesetzt"
|
||||||
else
|
else
|
||||||
echo "Zeitzone: Europe/Berlin"
|
echo "Zeitzone: Europe/Berlin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 8. Automatische Sicherheitsupdates nur pruefen, nicht aendern - sie sind Ubuntu-Standard.
|
# 10. Automatische Sicherheitsupdates nur pruefen, nicht aendern - sie sind Ubuntu-Standard.
|
||||||
if grep -qs '"1"' /etc/apt/apt.conf.d/20auto-upgrades; then
|
if grep -qs '"1"' /etc/apt/apt.conf.d/20auto-upgrades; then
|
||||||
echo "unattended-upgrades: aktiv"
|
echo "unattended-upgrades: aktiv"
|
||||||
else
|
else
|
||||||
echo "WARNUNG: unattended-upgrades nicht aktiv"; FEHLER=1
|
echo "WARNUNG: unattended-upgrades nicht aktiv"; FEHLER=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 9. Ergebniszeile fuer Monitor und Custom Field.
|
# 11. Ergebniszeile fuer Monitor und Custom Field.
|
||||||
if [ "$FEHLER" -eq 0 ]; then echo "ESPO01_ERGEBNIS: OK"; exit 0; else echo "ESPO01_ERGEBNIS: FEHLER"; exit 1; fi
|
if [ "$FEHLER" -eq 0 ]; then echo "ESPO01_ERGEBNIS: OK"; exit 0; else echo "ESPO01_ERGEBNIS: FEHLER"; exit 1; fi
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user