blob: 64542733f968342fb37d21633a841fe1098050da (
plain) (
tree)
|
|
### Narzędzia migawek portalu
Programiści Hubzilli często muszą przełączać się między gałęziami, które mogą mieć niekompatybilne schematy lub zawartość bazy danych. Poniższe dwa skrypty tworzą i przywracają pełne migawki instancji Hubzilli, w tym zarówno główny katalog sieciowy, jak i stan całej bazy danych. Każdy skrypt wymaga pliku konfiguracyjnego o nazwie *hub-snapshot.conf* znajdującego się w tym samym folderze i zawiera on określone katalogi i szczegóły bazy danych portalu.
### Konfiguracja
Format pliku konfiguracyjnego jest bardzo ścisły. Między nazwą zmiennej a wartością nie może być spacji. Zastąp tylko treść w cudzysłowach swoją konfiguracją. Zapisz ten plik jako *hub-snapshot.conf* obok skryptów.
# Location of hub root. Typically this is the location of the Hubzilla repo clone.
HUBROOT="/var/www/"
# MySQL database name
DBNAME="hubzilla"
# MySQL database user
DBUSER="hubzilla"
# MySQL database password
DBPWD="akeufajeuwfb"
# The target snapshot folder where the git repo will be initialized
SNAPSHOTROOT="/root/snapshots/hubzilla/"
### Migawka
Przykład użycia:
sh hub-snapshot.sh my-hub.conf "Commit message for the 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
### Przywracanie
#!/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
|