75 lines
2.2 KiB
Bash
Executable File
75 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# --- FUNKTION: Signal-Handling ---
|
|
# Diese Funktion wird aufgerufen, wenn der Container gestoppt werden soll
|
|
# (SIGTERM/SIGINT)
|
|
cleanup() {
|
|
echo "--- Abbruchsignal empfangen! Beende Ollama sauber... ---"
|
|
kill "$OLLAMA_PID" 2>/dev/null
|
|
wait "$OLLAMA_PID" 2>/dev/null
|
|
exit 0
|
|
}
|
|
|
|
# Registriere die Cleanup-Funktion für SIGTERM (Stop) und SIGINT (Strg+C)
|
|
trap cleanup SIGTERM SIGINT
|
|
|
|
# --- SCHRITT 1: Ollama Server starten ---
|
|
echo "--- Starte Ollama Server im Hintergrund ---"
|
|
ollama serve &
|
|
OLLAMA_PID=$!
|
|
|
|
# --- SCHRITT 2: Robuster API-Health-Check ---
|
|
echo "--- Warte auf Ollama Server (API Check) ---"
|
|
MAX_RETRIES=30
|
|
COUNT=0
|
|
|
|
# Wir nutzen ollama list selbst als Healthcheck, das ist 100% verlässlich
|
|
until ollama list &>/dev/null || [ $COUNT -eq $MAX_RETRIES ]; do
|
|
sleep 2
|
|
COUNT=$((COUNT + 1))
|
|
echo "Warte auf API-Bereitschaft... ($COUNT/$MAX_RETRIES)"
|
|
done
|
|
|
|
if [ $COUNT -eq $MAX_RETRIES ]; then
|
|
echo "FEHLER: Ollama Server ist nach 60 Sekunden nicht bereit."
|
|
exit 1
|
|
fi
|
|
|
|
echo "--- Ollama Server ist online und bereit für Pulls! ---"
|
|
|
|
# --- SCHRITT 3: Modelle fehlerfrei herunterladen ---
|
|
# Wir nutzen ein alternatives Parsing, das immun gegen komplexe Strings ist
|
|
if [ -z "$MODEL_LIST" ]; then
|
|
echo "WARNUNG: Keine Modelle in MODEL_LIST definiert."
|
|
else
|
|
echo "--- Modell-Check gestartet ---"
|
|
|
|
# Ersetzt Kommas durch Leerzeichen und läuft sauber durch jedes Modell
|
|
for model in $(echo "$MODEL_LIST" | tr ',' ' '); do
|
|
echo "Prüfe Modell: $model"
|
|
ollama pull "$model"
|
|
done
|
|
echo "--- Alle Modelle sind bereit ---"
|
|
fi
|
|
|
|
# --- NEU: SCHRITT 3.5: Custom Modelfiles bauen ---
|
|
echo "--- Suche nach Custom Modelfiles ---"
|
|
MODELFILE_DIR="/etc/ollama/modelfiles"
|
|
|
|
if [ -d "$MODELFILE_DIR" ]; then
|
|
for file in "$MODELFILE_DIR"/*.modelfile; do
|
|
# Falls keine Dateien matchen, bricht die Schleife ab
|
|
[ -e "$file" ] || continue
|
|
|
|
# Extrahiert den reinen Dateinamen ohne Pfad und Endung als Modellnamen
|
|
custom_model_name=$(basename "$file" .modelfile)
|
|
|
|
echo "Baue Custom Modell: $custom_model_name aus $file..."
|
|
ollama create "$custom_model_name" -f "$file"
|
|
done
|
|
echo "--- Alle Custom Modelle erfolgreich gebaut ---"
|
|
fi
|
|
|
|
# --- SCHRITT 4: Hauptprozess halten ---
|
|
wait $OLLAMA_PID
|