Hub-Snapshot-Tools

Hubzilla-Entwickler müssen häufig zwischen Zweigen wechseln, die möglicherweise inkompatible Datenbankschemata oder Inhalte haben. Die folgenden beiden Skripte erstellen und restaurieren komplette Snapshots einer Hubzilla-Instanz, einschließlich des Hub-Web-Root und des gesamten Datenbankstatus. Jedes Skript benötigt eine Konfigurationsdatei namens hub-snapshot.conf, die sich im selben Ordner befindet und die spezifischen Verzeichnisse und Datenbankdetails Ihres Hubs enthält.

Konfiguration

Das Format der Konfigurationsdatei ist sehr streng. Es dürfen keine Leerzeichen zwischen dem Variablennamen und dem Wert stehen. Ersetzen Sie nur den Inhalt innerhalb der Anführungszeichen durch Ihre Konfiguration. Speichern Sie diese Datei als hub-snapshot.conf zusammen mit den Skripten.

# Ort des Hub-Root. Normalerweise ist dies der Speicherort des Hubzilla Repo-Klons. HUBROOT=„/var/www/“ # Name der MySQL-Datenbank DBNAME=„hubzilla“ # MySQL-Datenbank-Benutzer DBUSER=„hubzilla“ # MySQL-Datenbank-Passwort DBPWD=„akeufajeuwfb“ # Der Ziel-Snapshot-Ordner, in dem das Git-Repository initialisiert werden soll SNAPSHOTROOT=„/root/snapshots/hubzilla/“

Snapshot

Beispiel für die Verwendung:

sh hub-snapshot.sh my-hub.conf „Commit-Meldung für den Snapshot“

hub-snapshot.sh:

#!/bin/bash if ! [ -f "$1" ]; then echo "$1 is not a valid file. Aborting..." exit 1 fi source "$1" #echo "$DBNAME" #echo "$DBUSER" #echo "$DBPWD" #echo "$HUBROOT" #echo "$SNAPSHOTROOT" MESSAGE="snapshot: $2" if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then echo "Required variable is not set. Aborting..." exit 1 fi if [ ! -d "$SNAPSHOTROOT"/db/ ]; then mkdir -p "$SNAPSHOTROOT"/db/ fi if [ ! -d "$SNAPSHOTROOT"/www/ ]; then mkdir -p "$SNAPSHOTROOT"/www/ fi if [ ! -d "$SNAPSHOTROOT"/www/ ] || [ ! -d "$SNAPSHOTROOT"/db/ ]; then echo "Error creating snapshot directories. Aborting..." exit 1 fi echo "Export database..." mysqldump -u "$DBUSER" -p"$DBPWD" "$DBNAME" > "$SNAPSHOTROOT"/db/"$DBNAME".sql echo "Copy hub root files..." rsync -va --delete --exclude=.git* "$HUBROOT"/ "$SNAPSHOTROOT"/www/ cd "$SNAPSHOTROOT" if [ ! -d ".git" ]; then git init fi if [ ! -d ".git" ]; then echo "Cannot initialize git repo. Aborting..." exit 1 fi git add -A echo "Commit hub snapshot..." git commit -a -m "$MESSAGE" exit 0

Restore

#!/bin/bash # Restore hub to a previous state. Input hub config and commit hash if ! [ -f "$1" ]; then echo "$1 is not a valid file. Aborting..." exit 1 fi source "$1" COMMIT=$2 if [ "$DBPWD" == "" -o "$SNAPSHOTROOT" == "" -o "$DBNAME" == "" -o "$DBUSER" == "" -o "$HUBROOT" == "" ]; then echo "Required variable is not set. Aborting..." exit 1 fi RESTOREDIR="$(mktemp -d)/" if [ ! -d "$RESTOREDIR" ]; then echo "Cannot create restore directory. Aborting..." exit 1 fi echo "Cloning the snapshot repo..." git clone "$SNAPSHOTROOT" "$RESTOREDIR" cd "$RESTOREDIR" echo "Checkout requested snapshot..." git checkout "$COMMIT" echo "Restore hub root files..." rsync -a --delete --exclude=.git* "$RESTOREDIR"/www/ "$HUBROOT"/ echo "Restore hub database..." mysql -u "$DBUSER" -p"$DBPWD" "$DBNAME" < "$RESTOREDIR"/db/"$DBNAME".sql chown -R www-data:www-data "$HUBROOT"/{store,extend,addon,.htlog,.htconfig.php} echo "Restored hub to snapshot $COMMIT" echo "Removing temporary files..." rm -rf "$RESTOREDIR" exit 0