Version aus EspoCRM selbst lesen statt aus den Vorgaben des Images

ESPO-03, ESPO-10, ESPO-12 und ESPO-20 lasen version aus
defaults/config.php, config.php und config-internal.php. EspoCRM 10 fuehrt
version aber als State-Parameter in data/state.php, und Config::load() liest
die Image-Vorgaben gar nicht. Gemeldet wurde also der Vorgabewert des Images:
nach einem gescheiterten migrate die neue Version, obwohl die Instanz auf der
alten steht.

Jetzt fragen die Skripte EspoCRM ueber "command.php version" - derselbe Wert,
gegen den auch Extensions ihre acceptableVersions pruefen. Aufruf als
www-data mit absolutem Pfad (bootstrap.php wechselt selbst ins
Installationsverzeichnis); akzeptiert wird nur eine Zeile der Form 1.2.3,
damit eine PHP-Warnung nie als Version in ein Custom Field geraet. Die
grep-Rueckfallwege auf config.php entfallen, sie lasen dieselbe falsche Quelle.

Probe gegen die Integrationsinstanz 10.0.8: Ausgabe "10.0.8".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gordon.zimm 2026-09-29 15:16:09 +02:00
parent 815e197dea
commit b18633281d
4 changed files with 11 additions and 13 deletions

View File

@ -7,7 +7,7 @@
set -u set -u
# Standzeile: zeigt im Protokoll, welche Fassung tatsaechlich gelaufen ist. # Standzeile: zeigt im Protokoll, welche Fassung tatsaechlich gelaufen ist.
echo "ESPO-03-First-Deploy, Skriptstand 2026-09-24" echo "ESPO-03-First-Deploy, Skriptstand 2026-09-29"
BASIS_URL=https://gitea.subcura.net/EspoCRM_Public/espo-deploy/raw/branch/main BASIS_URL=https://gitea.subcura.net/EspoCRM_Public/espo-deploy/raw/branch/main
WARTE_MAX=900 WARTE_MAX=900
@ -95,10 +95,9 @@ echo "--- Container"
docker compose -f /srv/espo/docker-compose.yml ps --format 'table {{.Name}}\t{{.Status}}' docker compose -f /srv/espo/docker-compose.yml ps --format 'table {{.Name}}\t{{.Status}}'
echo "--- Instanz" echo "--- Instanz"
echo "FQDN: $FQDN (Ring $RING)" echo "FQDN: $FQDN (Ring $RING)"
# Die Version steht je nach Stand in config.php oder in config-internal.php - EspoCRM selbst # Version so, wie EspoCRM sie selbst fuehrt: seit v10 in data/state.php, nicht in config.php.
# fragen ist verlaesslicher als eine der beiden Dateien zu raten. # Der Befehl liest genau den Wert, gegen den auch Extensions ihre acceptableVersions pruefen.
VERSION="$(docker exec espocrm php -r '$v=""; foreach (["/var/www/html/application/Espo/Resources/defaults/config.php","/var/www/html/data/config.php","/var/www/html/data/config-internal.php"] as $f) { $a=@include $f; if (is_array($a) && !empty($a["version"])) { $v=$a["version"]; } } echo $v;' 2>/dev/null)" VERSION="$(docker exec -u www-data espocrm php /var/www/html/command.php version 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' | tail -n 1)"
[ -n "$VERSION" ] || VERSION="$(grep -hoP "['\"]version['\"]\s*=>\s*['\"]\K[^'\"]+" /srv/espo/data/config.php /srv/espo/data/config-internal.php 2>/dev/null | head -1)"
echo "Version: ${VERSION:-unbekannt}" echo "Version: ${VERSION:-unbekannt}"
IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)" IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)"
echo "Image: $IMAGE" echo "Image: $IMAGE"

View File

@ -7,7 +7,7 @@
set -u set -u
# Standzeile: zeigt im Protokoll, welche Fassung tatsaechlich gelaufen ist. # Standzeile: zeigt im Protokoll, welche Fassung tatsaechlich gelaufen ist.
echo "ESPO-10-Update, Skriptstand 2026-09-24" echo "ESPO-10-Update, Skriptstand 2026-09-29"
BASIS_URL=https://gitea.subcura.net/EspoCRM_Public/espo-deploy/raw/branch/main BASIS_URL=https://gitea.subcura.net/EspoCRM_Public/espo-deploy/raw/branch/main
VG=ubuntu-vg VG=ubuntu-vg
@ -55,7 +55,7 @@ fi
# 3. Ausgangsstand festhalten, damit der Bericht ein Vorher und ein Nachher hat. # 3. Ausgangsstand festhalten, damit der Bericht ein Vorher und ein Nachher hat.
VORHER_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)" VORHER_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)"
VORHER_VERSION="$(docker exec espocrm php -r '$v=""; foreach (["/var/www/html/application/Espo/Resources/defaults/config.php","/var/www/html/data/config.php","/var/www/html/data/config-internal.php"] as $f) { $a=@include $f; if (is_array($a) && !empty($a["version"])) { $v=$a["version"]; } } echo $v;' 2>/dev/null)" VORHER_VERSION="$(docker exec -u www-data espocrm php /var/www/html/command.php version 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' | tail -n 1)"
VORHER_ESPO_ID="$(docker inspect -f '{{.Image}}' espocrm 2>/dev/null)" VORHER_ESPO_ID="$(docker inspect -f '{{.Image}}' espocrm 2>/dev/null)"
VORHER_DB_ID="$(docker inspect -f '{{.Image}}' espocrm-db 2>/dev/null)" VORHER_DB_ID="$(docker inspect -f '{{.Image}}' espocrm-db 2>/dev/null)"
VORHER_DB_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm-db 2>/dev/null)" VORHER_DB_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm-db 2>/dev/null)"
@ -103,7 +103,7 @@ docker compose -f /srv/espo/docker-compose.yml ps --format 'table {{.Name}}\t{{.
echo "--- Instanz" echo "--- Instanz"
NACHHER_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)" NACHHER_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)"
NACHHER_ESPO_ID="$(docker inspect -f '{{.Image}}' espocrm 2>/dev/null)" NACHHER_ESPO_ID="$(docker inspect -f '{{.Image}}' espocrm 2>/dev/null)"
NACHHER_VERSION="$(docker exec espocrm php -r '$v=""; foreach (["/var/www/html/application/Espo/Resources/defaults/config.php","/var/www/html/data/config.php","/var/www/html/data/config-internal.php"] as $f) { $a=@include $f; if (is_array($a) && !empty($a["version"])) { $v=$a["version"]; } } echo $v;' 2>/dev/null)" NACHHER_VERSION="$(docker exec -u www-data espocrm php /var/www/html/command.php version 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' | tail -n 1)"
echo "Image: ${VORHER_IMAGE:-unbekannt} -> ${NACHHER_IMAGE:-unbekannt}" echo "Image: ${VORHER_IMAGE:-unbekannt} -> ${NACHHER_IMAGE:-unbekannt}"
echo "Version: ${VORHER_VERSION:-unbekannt} -> ${NACHHER_VERSION:-unbekannt}" echo "Version: ${VORHER_VERSION:-unbekannt} -> ${NACHHER_VERSION:-unbekannt}"
echo "Digest: $(docker image inspect --format '{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}{{.Id}}{{end}}' "$NACHHER_IMAGE" 2>/dev/null)" echo "Digest: $(docker image inspect --format '{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}{{.Id}}{{end}}' "$NACHHER_IMAGE" 2>/dev/null)"

View File

@ -7,7 +7,7 @@
# mit dem alten Image-Tag. Deshalb startet die Instanz danach von selbst wieder auf dem alten Stand. # mit dem alten Image-Tag. Deshalb startet die Instanz danach von selbst wieder auf dem alten Stand.
set -u set -u
echo "ESPO-12-Snapshot-wiederherstellen, Skriptstand 2026-09-24" echo "ESPO-12-Snapshot-wiederherstellen, Skriptstand 2026-09-29"
VG=ubuntu-vg VG=ubuntu-vg
SNAPSHOT=srv-vor-update SNAPSHOT=srv-vor-update
@ -109,7 +109,7 @@ docker compose -f "$COMPOSE" ps --format 'table {{.Name}}\t{{.Status}}'
echo "--- Instanz nach dem Rueckweg" echo "--- Instanz nach dem Rueckweg"
IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)" IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)"
echo "Image: $IMAGE" echo "Image: $IMAGE"
echo "Version: $(docker exec espocrm php -r '$v=""; foreach (["/var/www/html/application/Espo/Resources/defaults/config.php","/var/www/html/data/config.php","/var/www/html/data/config-internal.php"] as $f) { $a=@include $f; if (is_array($a) && !empty($a["version"])) { $v=$a["version"]; } } echo $v;' 2>/dev/null)" echo "Version: $(docker exec -u www-data espocrm php /var/www/html/command.php version 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' | tail -n 1)"
echo "--- Platz" echo "--- Platz"
vgs --units g -o vg_name,vg_size,vg_free "$VG" 2>/dev/null | sed 's/^/ /' vgs --units g -o vg_name,vg_size,vg_free "$VG" 2>/dev/null | sed 's/^/ /'
echo "--- Hinweis" echo "--- Hinweis"

View File

@ -12,7 +12,7 @@ set -u
ZIEL=/run/espo-inventar ZIEL=/run/espo-inventar
echo "ESPO-20-Inventar, Skriptstand 2026-09-24" echo "ESPO-20-Inventar, Skriptstand 2026-09-29"
fehler() { echo "FEHLER: $*"; echo "ESPO20_ERGEBNIS: FEHLER"; exit 1; } fehler() { echo "FEHLER: $*"; echo "ESPO20_ERGEBNIS: FEHLER"; exit 1; }
@ -29,8 +29,7 @@ ESPO_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)"
[ -n "$ESPO_IMAGE" ] || fehler "Container 'espocrm' nicht gefunden - laeuft die Instanz?" [ -n "$ESPO_IMAGE" ] || fehler "Container 'espocrm' nicht gefunden - laeuft die Instanz?"
ESPO_DIGEST="$(docker image inspect --format '{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}{{.Id}}{{end}}' "$ESPO_IMAGE" 2>/dev/null)" ESPO_DIGEST="$(docker image inspect --format '{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}{{.Id}}{{end}}' "$ESPO_IMAGE" 2>/dev/null)"
[ -n "$ESPO_DIGEST" ] || fehler "Digest des EspoCRM-Images nicht ermittelbar" [ -n "$ESPO_DIGEST" ] || fehler "Digest des EspoCRM-Images nicht ermittelbar"
ESPO_VERSION="$(docker exec espocrm php -r '$v=""; foreach (["/var/www/html/application/Espo/Resources/defaults/config.php","/var/www/html/data/config.php","/var/www/html/data/config-internal.php"] as $f) { $a=@include $f; if (is_array($a) && !empty($a["version"])) { $v=$a["version"]; } } echo $v;' 2>/dev/null)" ESPO_VERSION="$(docker exec -u www-data espocrm php /var/www/html/command.php version 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' | tail -n 1)"
[ -n "$ESPO_VERSION" ] || ESPO_VERSION="$(grep -hoP "['\"]version['\"]\s*=>\s*['\"]\K[^'\"]+" /srv/espo/data/config-internal.php /srv/espo/data/config.php 2>/dev/null | head -1)"
[ -n "$ESPO_VERSION" ] || fehler "EspoCRM-Version nicht ermittelbar" [ -n "$ESPO_VERSION" ] || fehler "EspoCRM-Version nicht ermittelbar"
# 3. MariaDB: Image, Digest, Version. Das Passwort wird im Container aus der Secret-Datei gelesen, # 3. MariaDB: Image, Digest, Version. Das Passwort wird im Container aus der Secret-Datei gelesen,