ADD check if server is online, else take another one of the supported list

Dieser Commit ist enthalten in:
tom
2026-09-14 14:20:35 +02:00
Ursprung 74050a4784
Commit 944c81c6b5
2 geänderte Dateien mit 273 neuen und 5 gelöschten Zeilen
+57 -5
Datei anzeigen
@@ -12,20 +12,72 @@ TEXHASH=$(which texhash)
echo "=== Starte optimierte LaTeX-Konfiguration ==="
# 1. Optionale Updates (NUR aktivieren wenn zwingend nötig, sonst auskommentieren)
# ==============================================================================
# AUTOMATISCHE SERVER-FALLBACK LOGIK
# ==============================================================================
# Liste von zuverlässigen Spiegelservern (Der zweite ist der automatische CTAN-Verteiler)
DOMAINS=(
"at.ctan.niranjan.co"
"mirror.ctan.org"
"tu-chemnitz.de"
"netcologne.de"
"mirror.netcologne.de/tex-archive"
)
# Das ist der exakte Pfad, den TeX Live zwingend benötigt
PATH_SUFFIX="/systems/texlive/tlnet"
UPDATE_SUCCESS=false
ACTIVE_SERVER=""
echo "Aktualisiere tlmgr und alle installierten Pakete..."
$TLMGR update --self --all
for DOMAIN in "${DOMAINS[@]}"; do
# Hier bauen wir das Protokoll und den Pflichtpfad fehlerfrei zusammen
SERVER="https://${DOMAIN}${PATH_SUFFIX}"
# Sonderfall für den Haupt-CTAN-Server, da dieser manchmal kein https erzwingt
if [[ "$DOMAIN" == "mirror.ctan.org" ]]; then
SERVER="http://${DOMAIN}${PATH_SUFFIX}"
fi
echo "Versuche Verbindung zu Spiegelserver: $SERVER"
# Sende eine schnelle Anfrage an die MD5-Datenbank des Servers.
# --connect-timeout 3: Bricht nach 3 Sekunden ab, falls der Server nicht reagiert.
# --max-time 5: Der gesamte Check darf maximal 5 Sekunden dauern.
if curl --output /dev/null --silent --head --fail --connect-timeout 3 --max-time 5 "${SERVER}/tlpkg/texlive.tlpdb.md5"; then
echo "--> Server online. Starte TeX Live Update über $SERVER..."
# Da wir wissen, dass der Server da ist, führen wir das eigentliche Update aus
if $TLMGR update --repository "$SERVER" --self --all; then
echo "--> Update erfolgreich durchgeführt!"
UPDATE_SUCCESS=true
ACTIVE_SERVER="$SERVER"
break
fi
else
echo "⚠️ Warnung: Server reagiert nicht schnell genug (Timeout) oder ist offline. Versuche nächsten..."
fi
done
if [ "$UPDATE_SUCCESS" = false ]; then
echo "❌ ERROR: Alle TeX Live Spiegelserver sind offline oder es gibt keine Internetverbindung." >&2
exit 1
fi
# ==============================================================================
# 2. Nur deinstallieren, falls überhaupt vorhanden
if $TLMGR info texliveonfly | grep -q "installed: Yes"; then
# Nutzen den ermittelten ACTIVE_SERVER, um erneute Verbindungsfehler zu vermeiden
if $TLMGR info --repository "$ACTIVE_SERVER" texliveonfly | grep -q "installed: Yes"; then
echo "Deinstalliere veraltetes texliveonfly..."
$TLMGR remove texliveonfly
$TLMGR remove --repository "$ACTIVE_SERVER" texliveonfly
fi
# 3. ALLE Pakete gebündelt in EINEM Rutsch installieren (only scheme-minimal installed)
# Hinweis: scheme-basic beinhaltet bereits scheme-infraonly sowie scheme-minimal
echo "Installiere alle benötigten LaTeX-Pakete parallel/gebündelt..."
$TLMGR install \
$TLMGR install --repository "$ACTIVE_SERVER" \
background \
beamer \
biblatex \
+216
Datei anzeigen
@@ -0,0 +1,216 @@
#!/bin/bash
set -e # Bricht bei Fehlern sofort ab
# spell:ignore tlmgr texhash texliveonfly beamer biblatex ieee booktabs bigdelim ccicons circuitikz
# spell:ignore Ghostscript biber cleveref concmath csquotes currfile enumitem everypage extdash
# spell:ignore filehook fmtcount fontawesome fontaxes fontmfizz fontspec fontsrecommended ghostscript
# spell:ignore gitea imakeidx infraonly isbn koma latexmk ltablex luatexbase marginnote mathtools
# spell:ignore microtype ncctools newpx newtx newunicodechar nextpage parskip pdfcol pdflscape pdfpages
# spell:ignore pgfplots pict setspace sidecap siunitx stix subfigure tcolorbox tikzfill titlesec
# spell:ignore trimspaces unicode upquote vmargin wrapfig xcharter xltabular xpatch xstring
TLMGR=$(which tlmgr)
TEXHASH=$(which texhash)
echo "=== Starte optimierte LaTeX-Konfiguration ==="
# ==============================================================================
# AUTOMATISCHE SERVER-FALLBACK LOGIK
# ==============================================================================
# Liste von zuverlässigen Spiegelservern (Der erste ist der automatische CTAN-Verteiler)
SERVERS=(
"http://ctan.org"
"https://tu-chemnitz.de"
"https://netcologne.de"
)
UPDATE_SUCCESS=false
ACTIVE_SERVER=""
echo "Aktualisiere tlmgr und alle installierten Pakete..."
for SERVER in "${SERVERS[@]}"; do
echo "Versuche Verbindung zu Spiegelserver: $SERVER"
# Durch die Verwendung in der if-Bedingung wird 'set -e' für diesen Befehl ausgesetzt.
# So fangen wir Offline-Server ab, ohne dass das Skript abstürzt.
if $TLMGR update --repository "$SERVER" --self --all; then
echo "--> Update erfolgreich über $SERVER durchgeführt!"
UPDATE_SUCCESS=true
ACTIVE_SERVER="$SERVER" # Speichert den funktionierenden Server für spätere Befehle
break
else
echo "⚠️ Warnung: Server $SERVER war nicht erreichbar. Versuche nächsten Spiegelserver..."
fi
done
# Wenn kein einziger Server funktionierte, bricht das Skript kontrolliert ab
if [ "$UPDATE_SUCCESS" = false ]; then
echo "❌ ERROR: Alle TeX Live Spiegelserver sind offline oder es gibt keine Internetverbindung." >&2
exit 1
fi
# ==============================================================================
# 2. Nur deinstallieren, falls überhaupt vorhanden
# Nutzen den ermittelten ACTIVE_SERVER, um erneute Verbindungsfehler zu vermeiden
if $TLMGR info --repository "$ACTIVE_SERVER" texliveonfly | grep -q "installed: Yes"; then
echo "Deinstalliere veraltetes texliveonfly..."
$TLMGR remove --repository "$ACTIVE_SERVER" texliveonfly
fi
# 3. ALLE Pakete gebündelt in EINEM Rutsch installieren (only scheme-minimal installed)
# Hinweis: scheme-basic beinhaltet bereits scheme-infraonly sowie scheme-minimal
echo "Installiere alle benötigten LaTeX-Pakete parallel/gebündelt..."
$TLMGR install --repository "$ACTIVE_SERVER" \
background \
beamer \
biblatex \
biblatex-ieee \
booktabs \
cancel \
caption \
ccicons \
circuitikz \
cleveref \
cm-unicode \
collection-fontsrecommended \
concmath-otf \
contour \
csquotes \
currfile \
datetime2 \
datetime2-english \
datetime2-german \
ean \
ean13isbn \
enumitem \
epigraph \
everypage \
filehook \
fmtcount \
fontawesome5 \
fontaxes \
fontmfizz \
fontspec \
imakeidx \
koma-script \
latexmk \
lastpage \
lineno \
listings \
ltablex \
luatexbase \
marginnote \
mathtools \
microtype \
minted \
multirow \
ncctools \
newpx \
newtx \
newunicodechar \
nextpage \
ocr-b \
parskip \
pdfcol \
pdflscape \
pdfpages \
pgf \
pgfplots \
physics \
pict2e \
ragged2e \
scheme-basic \
setspace \
sidecap \
siunitx \
steinmetz \
stix2-otf \
subfigure \
tcolorbox \
tikzfill \
titlesec \
translations \
trimspaces \
unicode-math \
upquote \
vmargin \
wrapfig \
xcharter \
xltabular \
xpatch \
xstring
echo "Deinstalliere unerwünschte LaTeX-Pakete..."
# 'ae' und 't1enc' wurden entfernt, da sie geschützte Systempakete sind.
# Liste der Pakete, die deinstalliert werden sollen (einfach mit Leerzeichen trennen)
PACKETS=("truncate")
for packet in "${PACKETS[@]}"; do
if tlmgr info "$packet" --only-installed >/dev/null 2>&1; then
echo "Lösche Paket: $packet..."
tlmgr remove "$packet" || true
else
echo "Paket '$packet' ist nicht installiert oder wurde bereits gelöscht."
fi
done
# extdash (in ncctools) \
# 4. Datenbank-Refresh (tlmgr install macht das oft automatisch, sicherheitshalber am Ende einmal)
echo "Aktualisiere LaTeX-Dateidatenbank..."
$TEXHASH
# 5. System-Abhängigkeiten prüfen und installieren (Biber & Ghostscript)
echo "Überprüfe Linux-Systemkomponenten..."
# Liste der zu installierenden Apt-Pakete
SYSTEM_PACKAGES=""
INSTALLED_PACKAGES=""
if ! command -v biber >/dev/null 2>&1; then
echo " -> biber fehlt und wird vorgemerkt."
SYSTEM_PACKAGES="$SYSTEM_PACKAGES biber"
else
echo " -> biber ist bereits installiert ($(biber --version | head -n 1))."
INSTALLED_PACKAGES="$INSTALLED_PACKAGES biber"
fi
if ! command -v gs >/dev/null 2>&1; then
echo " -> ghostscript (gs) fehlt und wird vorgemerkt."
SYSTEM_PACKAGES="$SYSTEM_PACKAGES ghostscript"
else
echo " -> ghostscript (gs) ist bereits installiert ($(gs --version | head -n 1))."
INSTALLED_PACKAGES="$INSTALLED_PACKAGES ghostscript"
fi
# Paket-Installation basierend auf dem verfügbaren Paketmanager
if [ -n "$SYSTEM_PACKAGES" ]; then
if command -v apt-get >/dev/null 2>&1; then
echo "Debian/Ubuntu-System erkannt. Installiere:$SYSTEM_PACKAGES..."
sudo apt-get update && sudo apt-get install -y $SYSTEM_PACKAGES
elif command -v pacman >/dev/null 2>&1; then
echo "Arch Linux erkannt. Installiere:$SYSTEM_PACKAGES..."
# Arch nutzt andere Paketnamen für ghostscript (ghostscript) und biber (biber)
sudo pacman -Sy --noconfirm $SYSTEM_PACKAGES
else
echo "⚠️ Unbekanntes System (kein apt oder pacman gefunden)."
echo "Bitte installiere die folgenden Pakete manuell: $SYSTEM_PACKAGES"
fi
else
# Formatierung: Entfernt führende Leerzeichen und ersetzt verbleibende durch Kommata
CLEAN_LIST=$(echo $INSTALLED_PACKAGES | sed 's/ /, /g')
echo " -> Alle notwendigen Systemkomponenten ($CLEAN_LIST) sind bereits installiert!"
fi
echo ""
echo "=== Speicherplatz-Optimierung ==="
read -p "Möchtest du alle alten tlmgr-Paktebackups unwiderruflich löschen? (j/N): " response
if [[ "$response" =~ ^[jJ][aA]?$ || "$response" = "j" ]]; then
echo "Lösche alte Backups..."
$TLMGR backup --clean=0 --all
else
echo "Backups wurden beibehalten."
fi
echo "=== Fertig! ==="
echo "Reminder: Please update pull/push the ~/gitea/scripts : scripts.git repository!"