diff --git a/Readme.md b/Readme.md index 6c8b6f3..a7d7d86 100644 --- a/Readme.md +++ b/Readme.md @@ -10,4 +10,19 @@ Modules for plain file backup, mysql and postgresql backup exists. ## PostgreSQL backup settings +DATABASE_FULL_DUMP=""; +DATABASE_USER=""; + ## MySQL backup settings + +DATABASE_FULL_DUMP=""; +MYSQL_DB_CONFIG=""; + +## gitea backup settings + +``` +GIT_USER=""; +GITEA_TMP=""; +GITEA_BIN=""; +GITEA_CONFIG=""; +``` diff --git a/borg.backup.file.sh b/borg.backup.file.sh index 399fbce..af26040 100755 --- a/borg.backup.file.sh +++ b/borg.backup.file.sh @@ -14,6 +14,7 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi # include and exclude file INCLUDE_FILE="borg.backup.file.include"; EXCLUDE_FILE="borg.backup.file.exclude"; +# init check file BACKUP_INIT_CHECK="borg.backup.file.init"; . "${DIR}/borg.backup.functions.check.sh"; diff --git a/borg.backup.functions.init.sh b/borg.backup.functions.init.sh index 217a0cc..c271cc3 100644 --- a/borg.backup.functions.init.sh +++ b/borg.backup.functions.init.sh @@ -94,6 +94,11 @@ DATABASE_USER=""; # only for mysql old config file MYSQL_DB_CONFIG=""; MYSQL_DB_CONFIG_PARAM=""; +# gitea module +GIT_USER=""; +GITEA_TMP=""; +GITEA_BIN=""; +GITEA_CONFIG=""; # default keep 7 days, 4 weeks, 6 months # if set 0, ignore # note that for last/hourly it is needed to create a different diff --git a/borg.backup.gitea.settings-default b/borg.backup.gitea.settings-default new file mode 100644 index 0000000..8a2f098 --- /dev/null +++ b/borg.backup.gitea.settings-default @@ -0,0 +1,11 @@ +# Borg backup wrapper scripts settings: gitea + +# rename to borg.backup.gitea.settings to use + +# override settings in borg.backup.settings with SUB_ prefix +# valid for BACKUP_FILE, BACKUP_SET, COMPRESSION*, KEEP_* + +GIT_USER=""; +GITEA_TMP=""; +GITEA_BIN=""; +GITEA_CONFIG=""; diff --git a/borg.backup.gitea.sh b/borg.backup.gitea.sh new file mode 100644 index 0000000..94a84cb --- /dev/null +++ b/borg.backup.gitea.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +MODULE="gitea" +MODULE_VERSION="0.1.0"; + +DIR="${BASH_SOURCE%/*}" +if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi +# init system +. "${DIR}/borg.backup.functions.init.sh"; + +# init check file +BACKUP_INIT_CHECK="borg.backup.gitea.init"; + +# check valid data +. "${DIR}/borg.backup.functions.check.sh"; +# if info print info and then abort run +. "${DIR}/borg.backup.functions.info.sh"; + +# set git user +if [ -z "${GIT_USER}" ]; then + GIT_USER="git"; +fi; +# set GITEA_* if not set +if [ -z "${GITEA_TMP}" ]; then + # run gitea backup (user mktemp?) + GITEA_TMP="/tmp/gitea/"; +fi; +if [ -z "${GITEA_BIN}" ]; then + GITEA_BIN="/usr/local/bin/gitea"; +fi; +if [ -z "${GITEA_CONFIG}" ]; then + GITEA_CONFIG="/etc/gitea/app.ini" +fi; +if [ ! -f "${GITEA_BIN}" ]; then + echo "[! $(date +'%F %T')] Cannot find gitea binary"; + exit 1; +fi; +if [ ! -f "${GITEA_CONFIG}" ]; then + echo "[! $(date +'%F %T')] Cannot find gitea config"; + exit 1; +fi; +# Filename +FILENAME="gitea.backup.zip"; +# backup set and prefix +BACKUP_SET_NAME="gitea-${BACKUP_SET}"; +BACKUP_SET_PREFIX="gitea-"; + +# borg call, replace ##...## parts +_BORG_CALL="borg create ${OPT_REMOTE} -v ${OPT_LIST} ${OPT_PROGRESS} ${OPT_COMPRESSION} -s --stdin-name ##FILENAME## ${REPOSITORY}::##BACKUP_SET## -"; +_BORG_PRUNE="borg prune ${OPT_REMOTE} -v -s --list ${PRUNE_DEBUG} -P ##BACKUP_SET_PREFIX## ${KEEP_OPTIONS[*]} ${REPOSITORY}"; +# borg call +BORG_CALL=$(echo "${_BORG_CALL}" | sed -e "s/##FILENAME##/${FILENAME}/" | sed -e "s|##REPOSITORY##|${REPOSITORY}|" | sed -e "s/##BACKUP_SET##/${BACKUP_SET}/"); +BORG_PRUNE=$(echo "${_BORG_PRUNE}" | sed -e "s|##REPOSITORY##|${REPOSITORY}|" | sed -e "s/##BACKUP_SET_PREFIX##/${BACKUP_SET_PREFIX}/"); +echo "--- [git data and database: $(date +'%F %T')] --[${MODULE}]------------------------------------>"; +if [ ${DEBUG} -eq 1 ] || [ ${DRYRUN} -eq 1 ]; then + echo "sudo -u ${GIT_USER} ${GITEA_BIN} dump -c ${GITEA_CONFIG} -w ${GITEA_TMP} -L -f - | ${BORG_CALL}"; + echo "${BORG_PRUNE}"; +fi; +if [ ${DRYRUN} -eq 0 ]; then + ( + # make sure temp folder is there and is set as git. user + if [ ! -d "${GITEA_TMP}" ]; then + mkdir -p "${GITEA_TMP}"; + fi; + chown -R ${GIT_USER}. "${GITEA_TMP}"; + # this needs to be run in a folder that can be stat by git user + cd "${GITEA_TMP}"; + sudo -u ${GIT_USER} ${GITEA_BIN} dump -c ${GITEA_CONFIG} -w ${GITEA_TMP} -L -f - | ${BORG_CALL}; + ) +fi; +echo "Prune repository with keep${KEEP_INFO:1}"; +${BORG_PRUNE}; + +. "${DIR}/borg.backup.functions.close.sh"; + +# __END__ diff --git a/borg.backup.mysql.sh b/borg.backup.mysql.sh index 32925ca..55fc75a 100755 --- a/borg.backup.mysql.sh +++ b/borg.backup.mysql.sh @@ -21,6 +21,7 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi INCLUDE_FILE="borg.backup.mysql.include"; EXCLUDE_FILE="borg.backup.mysql.exclude"; SCHEMA_ONLY_FILE="borg.backup.mysql.schema-only"; +# init check file BACKUP_INIT_CHECK="borg.backup.mysql.init"; # check valid data diff --git a/borg.backup.pgsql.sh b/borg.backup.pgsql.sh index 1a9dedf..93b3235 100755 --- a/borg.backup.pgsql.sh +++ b/borg.backup.pgsql.sh @@ -22,6 +22,7 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi INCLUDE_FILE="borg.backup.pgsql.include"; EXCLUDE_FILE="borg.backup.pgsql.exclude"; SCHEMA_ONLY_FILE="borg.backup.pgsql.schema-only"; +# init check file BACKUP_INIT_CHECK="borg.backup.pgsql.init"; # check valid data