feat(PROJ-67): Manticore-Version dynamisch aus Repo-Packages-Datei lesen
Statt Version hart zu pinnen, wird bei jedem install.sh-/update.sh-Lauf die Packages-Datei von repo.manticoresearch.com abgefragt und der letzte "Package: manticore"-Block (Version+Filename) daraus extrahiert. Bleibt dadurch automatisch aktuell, ohne den Code bei jeder neuen Manticore-Version manuell anfassen zu müssen. _MANTICORE_VERSION_FALLBACK greift nur, wenn die Packages-Datei nicht erreichbar/parsbar ist (Netzwerkfehler, Repo down). Parser-Bug beim ersten Entwurf gefunden und gefixt: die awk-Regex "/(^|\n)Package: manticore$/" matchte nie, weil $ in einem Multi-Zeilen- Record das Ende des GESAMTEN Records verankert, nicht das einer Zeile. Gefixt durch Split der ersten Zeile und direkten String-Vergleich. Gegen die echte Packages-Datei getestet (liefert korrekt Version 27.1.5-...).
This commit is contained in:
+36
-13
@@ -428,16 +428,39 @@ install_native() {
|
|||||||
# Kein natives trixie-Repo (siehe update.sh für Details) — bookworm-Paket
|
# Kein natives trixie-Repo (siehe update.sh für Details) — bookworm-Paket
|
||||||
# ist lauffähig. Seit ~v25 ein einziges "manticore"-Paket statt der
|
# ist lauffähig. Seit ~v25 ein einziges "manticore"-Paket statt der
|
||||||
# früheren manticoresearch_*-Aufteilung; GitHub-Releases liefern keine
|
# früheren manticoresearch_*-Aufteilung; GitHub-Releases liefern keine
|
||||||
# .deb-Assets mehr, daher kein Fallback mehr dorthin. Version pinnen statt
|
# .deb-Assets mehr, daher kein Fallback mehr dorthin. Version wird dynamisch
|
||||||
# dynamisch "latest" ermitteln (vorhersagbar, kein Parsing-Risiko) — zum
|
# aus der Packages-Datei des Repos gelesen (letzter "Package: manticore"-
|
||||||
# Aktualisieren: https://repo.manticoresearch.com/repository/manticoresearch_bookworm/dists/bookworm/main/binary-amd64/Packages
|
# Block); _MANTICORE_VERSION_FALLBACK greift nur, wenn die Packages-Datei
|
||||||
_MANTICORE_VERSION="27.1.5-26061911-5a1cf9399"
|
# nicht erreichbar/parsbar ist.
|
||||||
|
_MANTICORE_VERSION_FALLBACK="27.1.5-26061911-5a1cf9399"
|
||||||
_mc_installed_version="$(dpkg-query -W -f='${Version}' manticore 2>/dev/null || true)"
|
_mc_installed_version="$(dpkg-query -W -f='${Version}' manticore 2>/dev/null || true)"
|
||||||
|
_mc_arch="$(dpkg --print-architecture)"
|
||||||
|
|
||||||
|
_mc_latest_from_repo() {
|
||||||
|
local base="https://repo.manticoresearch.com/repository/manticoresearch_bookworm"
|
||||||
|
local packages block version filename
|
||||||
|
packages="$(curl -fsSL --max-time 15 "${base}/dists/bookworm/main/binary-${_mc_arch}/Packages" 2>/dev/null)" || return 1
|
||||||
|
[[ -n "$packages" ]] || return 1
|
||||||
|
block="$(printf '%s\n' "$packages" | awk 'BEGIN{RS="\n\n"} {n=split($0,l,"\n"); if (l[1]=="Package: manticore") b=$0} END{print b}')"
|
||||||
|
[[ -n "$block" ]] || return 1
|
||||||
|
version="$(printf '%s\n' "$block" | awk -F': ' '/^Version:/{print $2; exit}')"
|
||||||
|
filename="$(printf '%s\n' "$block" | awk -F': ' '/^Filename:/{print $2; exit}')"
|
||||||
|
[[ -n "$version" && -n "$filename" ]] || return 1
|
||||||
|
printf '%s|%s\n' "$version" "$filename"
|
||||||
|
}
|
||||||
|
|
||||||
|
_mc_target_version="$_MANTICORE_VERSION_FALLBACK"
|
||||||
|
_mc_target_url="https://repo.manticoresearch.com/repository/manticoresearch_bookworm/dists/bookworm/main/binary-${_mc_arch}/manticore_${_MANTICORE_VERSION_FALLBACK}_${_mc_arch}.deb"
|
||||||
|
if _mc_latest="$(_mc_latest_from_repo)"; then
|
||||||
|
_mc_target_version="${_mc_latest%%|*}"
|
||||||
|
_mc_target_url="https://repo.manticoresearch.com/repository/manticoresearch_bookworm/${_mc_latest#*|}"
|
||||||
|
info "Manticore Search: aktuelle Repo-Version ${_mc_target_version} ermittelt"
|
||||||
|
else
|
||||||
|
warn "Manticore-Repo-Metadaten nicht abrufbar — falle auf bekannten Stand ${_MANTICORE_VERSION_FALLBACK} zurück"
|
||||||
|
fi
|
||||||
|
|
||||||
_mc_fetch_and_install() {
|
_mc_fetch_and_install() {
|
||||||
local _mc_arch="$(dpkg --print-architecture)"
|
wget -q -O /tmp/manticore.deb "$_mc_target_url" || true
|
||||||
wget -q -O /tmp/manticore.deb \
|
|
||||||
"https://repo.manticoresearch.com/repository/manticoresearch_bookworm/dists/bookworm/main/binary-${_mc_arch}/manticore_${_MANTICORE_VERSION}_${_mc_arch}.deb" \
|
|
||||||
|| true
|
|
||||||
if [[ ! -f /tmp/manticore.deb ]]; then
|
if [[ ! -f /tmp/manticore.deb ]]; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -446,20 +469,20 @@ install_native() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
if [[ -z "$_mc_installed_version" ]]; then
|
if [[ -z "$_mc_installed_version" ]]; then
|
||||||
info "Installiere Manticore Search ${_MANTICORE_VERSION}..."
|
info "Installiere Manticore Search ${_mc_target_version}..."
|
||||||
_mc_fetch_and_install && log "Manticore Search installiert" \
|
_mc_fetch_and_install && log "Manticore Search installiert" \
|
||||||
|| die "Manticore Search konnte nicht installiert werden — siehe: https://manticoresearch.com/install/"
|
|| die "Manticore Search konnte nicht installiert werden — siehe: https://manticoresearch.com/install/"
|
||||||
elif dpkg --compare-versions "$_mc_installed_version" lt "$_MANTICORE_VERSION"; then
|
elif dpkg --compare-versions "$_mc_installed_version" lt "$_mc_target_version"; then
|
||||||
# PROJ-67: Upgrade statt Skip, damit auch Bestandsinstallationen beim
|
# PROJ-67: Upgrade statt Skip, damit auch Bestandsinstallationen beim
|
||||||
# nächsten install.sh-/update.sh-Lauf mitgezogen werden. "lt"-Vergleich
|
# nächsten install.sh-/update.sh-Lauf mitgezogen werden. "lt"-Vergleich
|
||||||
# schützt gegen versehentliches Downgrade.
|
# schützt gegen versehentliches Downgrade.
|
||||||
info "Manticore Search ${_mc_installed_version} gefunden, aktualisiere auf ${_MANTICORE_VERSION}..."
|
info "Manticore Search ${_mc_installed_version} gefunden, aktualisiere auf ${_mc_target_version}..."
|
||||||
systemctl stop manticore 2>/dev/null || true
|
systemctl stop manticore 2>/dev/null || true
|
||||||
_mc_fetch_and_install \
|
_mc_fetch_and_install \
|
||||||
&& log "Manticore Search aktualisiert: ${_mc_installed_version} → ${_MANTICORE_VERSION}" \
|
&& log "Manticore Search aktualisiert: ${_mc_installed_version} → ${_mc_target_version}" \
|
||||||
|| warn "Upgrade fehlgeschlagen — vorherige Version bleibt installiert"
|
|| warn "Upgrade fehlgeschlagen — vorherige Version bleibt installiert"
|
||||||
else
|
else
|
||||||
log "Manticore Search ${_mc_installed_version} bereits aktuell (>= ${_MANTICORE_VERSION})"
|
log "Manticore Search ${_mc_installed_version} bereits aktuell (>= ${_mc_target_version})"
|
||||||
fi
|
fi
|
||||||
systemctl enable --now manticore 2>/dev/null || warn "Manticore-Dienst konnte nicht gestartet werden"
|
systemctl enable --now manticore 2>/dev/null || warn "Manticore-Dienst konnte nicht gestartet werden"
|
||||||
systemctl is-active --quiet manticore && log "Manticore Search läuft"
|
systemctl is-active --quiet manticore && log "Manticore Search läuft"
|
||||||
|
|||||||
@@ -87,22 +87,52 @@ command -v npm >/dev/null || die "npm nicht gefunden — apt-get install npm"
|
|||||||
# liefern seit einiger Zeit keine .deb-Assets mehr (leeres assets[]), daher
|
# liefern seit einiger Zeit keine .deb-Assets mehr (leeres assets[]), daher
|
||||||
# kein Fallback mehr dorthin — repo.manticoresearch.com ist der einzige Weg.
|
# kein Fallback mehr dorthin — repo.manticoresearch.com ist der einzige Weg.
|
||||||
#
|
#
|
||||||
# Version manuell pinnen (wie hier) statt "latest" dynamisch aus der
|
# Version wird dynamisch aus der Packages-Datei des Repos ermittelt (letzter
|
||||||
# Packages-Datei zu parsen: vorhersagbarer, kein Risiko durch Parsing-Format-
|
# "Package: manticore"-Block, dort steht Version+Filename explizit drin —
|
||||||
# Änderungen im Repo. Zum Aktualisieren: aktuelle Version+Filename unter
|
# kein Rätselraten über Namensschema). _MANTICORE_VERSION_FALLBACK ist nur
|
||||||
# https://repo.manticoresearch.com/repository/manticoresearch_bookworm/dists/bookworm/main/binary-amd64/Packages
|
# ein Sicherheitsnetz, falls die Packages-Datei mal nicht erreichbar/nicht
|
||||||
# nachschlagen (letzter "Package: manticore"-Block).
|
# parsbar ist (Netzwerkfehler, Repo down, Format ändert sich erneut) — dann
|
||||||
_MANTICORE_VERSION="27.1.5-26061911-5a1cf9399"
|
# lieber ein bekannter, getesteter Stand als ein komplett fehlgeschlagenes
|
||||||
|
# Deploy. Bei jedem Update-Lauf ohnehin neu geprüft, kein manuelles Nachpflegen
|
||||||
|
# nötig, solange das Packages-Format stabil bleibt.
|
||||||
|
_MANTICORE_VERSION_FALLBACK="27.1.5-26061911-5a1cf9399"
|
||||||
|
|
||||||
_mc_installed_version="$(dpkg-query -W -f='${Version}' manticore 2>/dev/null || true)"
|
_mc_installed_version="$(dpkg-query -W -f='${Version}' manticore 2>/dev/null || true)"
|
||||||
|
|
||||||
_mc_fetch_and_install() {
|
_mc_arch="amd64"
|
||||||
# $1 = human-readable action word for log ("installiere"/"aktualisiere")
|
|
||||||
local _mc_arch="amd64"
|
|
||||||
[[ "$(uname -m)" == "aarch64" ]] && _mc_arch="arm64"
|
[[ "$(uname -m)" == "aarch64" ]] && _mc_arch="arm64"
|
||||||
wget -q -O /tmp/manticore.deb \
|
|
||||||
"https://repo.manticoresearch.com/repository/manticoresearch_bookworm/dists/bookworm/main/binary-${_mc_arch}/manticore_${_MANTICORE_VERSION}_${_mc_arch}.deb" \
|
# Liefert bei Erfolg "VERSION|FILENAME" (Filename ist der repo-relative Pfad
|
||||||
|| true
|
# aus der Packages-Datei, z.B. "dists/bookworm/main/binary-amd64/manticore_
|
||||||
|
# 27.1.5-...deb") auf stdout, sonst nichts (Exit 1).
|
||||||
|
_mc_latest_from_repo() {
|
||||||
|
local base="https://repo.manticoresearch.com/repository/manticoresearch_bookworm"
|
||||||
|
local packages block version filename
|
||||||
|
packages="$(curl -fsSL --max-time 15 "${base}/dists/bookworm/main/binary-${_mc_arch}/Packages" 2>/dev/null)" || return 1
|
||||||
|
[[ -n "$packages" ]] || return 1
|
||||||
|
# Packages-Einträge sind durch Leerzeilen getrennt; mehrere historische
|
||||||
|
# "Package: manticore"-Blöcke möglich — der letzte ist der aktuellste.
|
||||||
|
block="$(printf '%s\n' "$packages" | awk 'BEGIN{RS="\n\n"} {n=split($0,l,"\n"); if (l[1]=="Package: manticore") b=$0} END{print b}')"
|
||||||
|
[[ -n "$block" ]] || return 1
|
||||||
|
version="$(printf '%s\n' "$block" | awk -F': ' '/^Version:/{print $2; exit}')"
|
||||||
|
filename="$(printf '%s\n' "$block" | awk -F': ' '/^Filename:/{print $2; exit}')"
|
||||||
|
[[ -n "$version" && -n "$filename" ]] || return 1
|
||||||
|
printf '%s|%s\n' "$version" "$filename"
|
||||||
|
}
|
||||||
|
|
||||||
|
_mc_target_version="$_MANTICORE_VERSION_FALLBACK"
|
||||||
|
_mc_target_url="https://repo.manticoresearch.com/repository/manticoresearch_bookworm/dists/bookworm/main/binary-${_mc_arch}/manticore_${_MANTICORE_VERSION_FALLBACK}_${_mc_arch}.deb"
|
||||||
|
if _mc_latest="$(_mc_latest_from_repo)"; then
|
||||||
|
_mc_target_version="${_mc_latest%%|*}"
|
||||||
|
_mc_target_url="https://repo.manticoresearch.com/repository/manticoresearch_bookworm/${_mc_latest#*|}"
|
||||||
|
info "Manticore Search: aktuelle Repo-Version ${_mc_target_version} ermittelt"
|
||||||
|
else
|
||||||
|
warn "Manticore-Repo-Metadaten nicht abrufbar — falle auf bekannten Stand ${_MANTICORE_VERSION_FALLBACK} zurück"
|
||||||
|
fi
|
||||||
|
|
||||||
|
_mc_fetch_and_install() {
|
||||||
|
# $1 = human-readable action word for log ("installieren"/"aktualisieren")
|
||||||
|
wget -q -O /tmp/manticore.deb "$_mc_target_url" || true
|
||||||
if [[ ! -f /tmp/manticore.deb ]]; then
|
if [[ ! -f /tmp/manticore.deb ]]; then
|
||||||
warn "Manticore Search konnte nicht heruntergeladen werden — bitte manuell $1"
|
warn "Manticore Search konnte nicht heruntergeladen werden — bitte manuell $1"
|
||||||
warn "Siehe: https://manticoresearch.com/install/"
|
warn "Siehe: https://manticoresearch.com/install/"
|
||||||
@@ -114,24 +144,24 @@ _mc_fetch_and_install() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if [[ -z "$_mc_installed_version" ]]; then
|
if [[ -z "$_mc_installed_version" ]]; then
|
||||||
info "Manticore Search nicht gefunden — installiere Version ${_MANTICORE_VERSION}..."
|
info "Manticore Search nicht gefunden — installiere Version ${_mc_target_version}..."
|
||||||
_mc_fetch_and_install "installieren" && log "Manticore Search installiert"
|
_mc_fetch_and_install "installieren" && log "Manticore Search installiert"
|
||||||
elif dpkg --compare-versions "$_mc_installed_version" lt "$_MANTICORE_VERSION"; then
|
elif dpkg --compare-versions "$_mc_installed_version" lt "$_mc_target_version"; then
|
||||||
# PROJ-67: bestehende Installation ist älter als der gepinnte Stand — Upgrade
|
# PROJ-67: bestehende Installation ist älter als der ermittelte Repo-Stand —
|
||||||
# statt Skip, damit auch Bestandsinstallationen (nicht nur Neuinstallationen)
|
# Upgrade statt Skip, damit auch Bestandsinstallationen (nicht nur
|
||||||
# beim nächsten Deploy automatisch mitgezogen werden. Downgrade-Schutz durch
|
# Neuinstallationen) beim nächsten Deploy automatisch mitgezogen werden.
|
||||||
# "lt"-Vergleich: eine bereits neuere installierte Version wird nie
|
# Downgrade-Schutz durch "lt"-Vergleich: eine bereits neuere installierte
|
||||||
# zurückgestuft (z.B. falls _MANTICORE_VERSION versehentlich rückwärts
|
# Version wird nie zurückgestuft (z.B. falls die Repo-Abfrage mal einen
|
||||||
# editiert wurde).
|
# älteren Stand als den Fallback liefern sollte).
|
||||||
info "Manticore Search ${_mc_installed_version} gefunden, aktualisiere auf ${_MANTICORE_VERSION}..."
|
info "Manticore Search ${_mc_installed_version} gefunden, aktualisiere auf ${_mc_target_version}..."
|
||||||
systemctl stop manticore 2>/dev/null || true
|
systemctl stop manticore 2>/dev/null || true
|
||||||
if _mc_fetch_and_install "aktualisieren"; then
|
if _mc_fetch_and_install "aktualisieren"; then
|
||||||
log "Manticore Search aktualisiert: ${_mc_installed_version} → ${_MANTICORE_VERSION}"
|
log "Manticore Search aktualisiert: ${_mc_installed_version} → ${_mc_target_version}"
|
||||||
else
|
else
|
||||||
warn "Upgrade fehlgeschlagen — vorherige Version bleibt installiert, Dienst wird trotzdem neu gestartet"
|
warn "Upgrade fehlgeschlagen — vorherige Version bleibt installiert, Dienst wird trotzdem neu gestartet"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log "Manticore Search ${_mc_installed_version} bereits aktuell (>= ${_MANTICORE_VERSION})"
|
log "Manticore Search ${_mc_installed_version} bereits aktuell (>= ${_mc_target_version})"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if systemctl list-unit-files manticore.service >/dev/null 2>&1; then
|
if systemctl list-unit-files manticore.service >/dev/null 2>&1; then
|
||||||
|
|||||||
Reference in New Issue
Block a user