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:
sysops
2026-07-05 18:16:14 +02:00
parent 4e085238b6
commit bbefa838c3
2 changed files with 89 additions and 36 deletions
+36 -13
View File
@@ -428,16 +428,39 @@ install_native() {
# Kein natives trixie-Repo (siehe update.sh für Details) — bookworm-Paket
# ist lauffähig. Seit ~v25 ein einziges "manticore"-Paket statt der
# früheren manticoresearch_*-Aufteilung; GitHub-Releases liefern keine
# .deb-Assets mehr, daher kein Fallback mehr dorthin. Version pinnen statt
# dynamisch "latest" ermitteln (vorhersagbar, kein Parsing-Risiko) — zum
# Aktualisieren: https://repo.manticoresearch.com/repository/manticoresearch_bookworm/dists/bookworm/main/binary-amd64/Packages
_MANTICORE_VERSION="27.1.5-26061911-5a1cf9399"
# .deb-Assets mehr, daher kein Fallback mehr dorthin. Version wird dynamisch
# aus der Packages-Datei des Repos gelesen (letzter "Package: manticore"-
# Block); _MANTICORE_VERSION_FALLBACK greift nur, wenn die Packages-Datei
# 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_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() {
local _mc_arch="$(dpkg --print-architecture)"
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
wget -q -O /tmp/manticore.deb "$_mc_target_url" || true
if [[ ! -f /tmp/manticore.deb ]]; then
return 1
fi
@@ -446,20 +469,20 @@ install_native() {
return 0
}
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" \
|| 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
# nächsten install.sh-/update.sh-Lauf mitgezogen werden. "lt"-Vergleich
# 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
_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"
else
log "Manticore Search ${_mc_installed_version} bereits aktuell (>= ${_MANTICORE_VERSION})"
log "Manticore Search ${_mc_installed_version} bereits aktuell (>= ${_mc_target_version})"
fi
systemctl enable --now manticore 2>/dev/null || warn "Manticore-Dienst konnte nicht gestartet werden"
systemctl is-active --quiet manticore && log "Manticore Search läuft"