Installing a patch from GitHub
In der Regel werden ca. alle 4 Wochen neue Installation-/Update-Pakete bzw. ein EGroupware-Docker-Container “gebaut”. Wenn einem das zu lang ist oder im Vorfeld getestet werden soll, stehen gefixte Dateien in GitHub zum herunterladen zur Verfügung.
Zu beachten ist:
- einzelne Commits können aufeinander aufbauen, dh. man kann in der Regel nur einen Commit als patch installieren der nur Dateien modifiziert die seit dem Maintenance Release nicht anderweitig geändert wurden
- Änderungen an JavaScript oder CSS Dateien funktionieren nur, wenn danach das Minifying unter Admin >> Administration >> Konfiguration der Anwendung ausgeschaltet wird
Vorgehen
Man benötigt die URL des Commits (bevorzugt aus dem aktuellen release Branch). Z.B.
An diese URL muss dann .patch angehangen werden und die folgenden Kommandos ausgeführt werden:
export patch=https://github.com/EGroupware/egroupware/commit/601cf51b7febdf97d2bb0460dd47eeba12449920.patch
cd /etc/egroupware-docker
curl $patch | docker exec -i egroupware patch -p1 -d /usr/share/egroupware-sources
# falls der Patch .ts oder .js Dateien ändert, muss das JavaScript neu gebildet werden:
docker exec egroupware bash -c "cd /usr/share/egroupware-sources; npm run build"
docker-compose restart egroupware
Falls etwas im Container kaputt geht (z.B. Konflikt beim Installieren des Patches) stellt man mit den folgenden Kommandos einfach den ursprünglichen Zustand des Containers wieder her:
cd /etc/egroupware-docker
docker-compose stop
docker-compose rm -f
docker-compose up -d
Für ein wiederholt notwendiges Einspielen von Patches kann es hilfreich sein ein kleines Script zu verwenden, welches einfach die Patch-ID abfragt und den Patch einspielt.
Ein Beispielscript zu weiteren Verwendung:
#!/usr/bin/env bash
set -euo pipefail
# Commit-ID aus Parameter oder interaktiv abfragen
if [ $# -ge 1 ]; then
COMMIT_ID="$1"
else
read -rp "Bitte GitHub-Commit-ID eingeben: " COMMIT_ID
fi
if [ -z "$COMMIT_ID" ]; then
echo "Fehler: Keine Commit-ID angegeben."
exit 1
fi
PATCH_URL="https://github.com/EGroupware/egroupware/commit/${COMMIT_ID}.patch"
echo "Verwende Commit-ID: $COMMIT_ID"
echo "Patch-URL: $PATCH_URL"
cd /etc/egroupware-docker
echo "Patch wird angewendet..."
curl -fsSL "$PATCH_URL" | docker exec -i egroupware patch -p1 -d /usr/share/egroupware-sources
echo "npm build wird ausgeführt..."
docker exec egroupware bash -c "cd /usr/share/egroupware-sources && npm run build"
echo "Container wird neu gestartet..."
docker-compose restart egroupware
echo "Fertig."
Für EGroupware <19.1 und Installationen ohne Docker ist die gefixte Datei herunter zu laden und die Datei in der EGroupware-Installation entsprechend zu ersetzen. Danach ist ein Neustart des Webservers und ein löschen des Webbrowser-Caches sinnvoll/notwendig.
Die auszutauschenden Dateien sollten gesichert bzw. umbenannt werden. Somit kann man die Änderungen leicht wieder Rückgängig machen.