94 lines
2.1 KiB
Bash
Executable file
94 lines
2.1 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
restoreDir=/etc/restore
|
|
giteaDir="/var/backups/gitea"
|
|
scriptDir="$(dirname "$0")"
|
|
|
|
readConfig() {
|
|
if [[ -r "${scriptDir}/../config/gitea_backup.cfg" ]]; then
|
|
source "${scriptDir}/../config/gitea_backup.cfg"
|
|
fi
|
|
|
|
}
|
|
|
|
check() {
|
|
GITEA_CONFIG=${GITEA_CONFIG:-/etc/gitea/app.ini}
|
|
if [[ ! -r "$GITEA_CONFIG" ]]; then
|
|
echo "ERROR: Cannot read gitea app.ini in $GITEA_CONFIG"
|
|
return 4
|
|
fi
|
|
|
|
GITEA_USER=${GITEA_USER:-git}
|
|
GITEA_GROUP=${GITEA_GROUP:-git}
|
|
GITEA_HOME=${GITEA_HOME:-$(getent passwd ${GITEA_USER} | cut -f6 -d:)}
|
|
if [[ ! -d "$GITEA_HOME" ]]; then
|
|
echo "ERROR: Cannot find Gitea home directory"
|
|
return 5
|
|
fi
|
|
|
|
if [[ -n "$GITEA_BIN" ]]; then
|
|
if [[ -x "${GITEA_BIN}" ]]; then
|
|
echo "Found Gitea in $GITEA_BIN"
|
|
else
|
|
echo "FATAL: Cannot execute Gitea"
|
|
return 3
|
|
fi
|
|
else
|
|
if ! which gitea &>/dev/null; then
|
|
echo "Cannot find Gitea in PATH"
|
|
return 2
|
|
fi
|
|
if [[ -x "$(which gitea)" ]]; then
|
|
GITEA_BIN="$(which gitea)"
|
|
echo "Found Gitea in $GITEA_BIN"
|
|
else
|
|
echo "FATAL: Cannot execute Gitea"
|
|
return 3
|
|
fi
|
|
fi
|
|
|
|
if [[ -d "$giteaDir" ]]; then
|
|
echo "Cleaning out old Gitea backups..."
|
|
rm -f "$giteaDir"/* || return 1
|
|
else
|
|
mkdir -p "$giteaDir" | return 1
|
|
chgrp "$GITEA_GROUP" "$giteaDir"
|
|
chmod g+wx "$giteaDir"
|
|
fi
|
|
}
|
|
|
|
runBackups() {
|
|
local backupDate
|
|
|
|
backupDate=$(date +"%Y-%m-%d")
|
|
giteaHome=$(getent passwd git | cut -f6 -d:)
|
|
pushd "${giteaDir}" &>/dev/null
|
|
sudo -u "$GITEA_USER" "${GITEA_BIN}" dump --config "${GITEA_CONFIG}" --type tar.xz --file - > "${giteaDir}/gitea-dump-${backupDate}.tar.xz"
|
|
popd &>/dev/null
|
|
}
|
|
|
|
hook_before() {
|
|
check || exit $?
|
|
runBackups || exit $?
|
|
}
|
|
|
|
hook_after() {
|
|
:
|
|
}
|
|
|
|
hook_fail() {
|
|
:
|
|
}
|
|
|
|
hook_final() {
|
|
:
|
|
}
|
|
|
|
|
|
case "$1" in
|
|
before) hook_before || exit $?;;
|
|
after) hook_after || exit $?;;
|
|
fail) hook_fail || exit $?;;
|
|
finally) hook_final || exit $?;;
|
|
esac
|