|
|
@@ -10,9 +10,7 @@ BACKUP_REPO=${BACKUP_REPO:-borg/${HOSTNAME}} |
|
|
|
BORG_DIR="$(realpath "$(dirname "$0")")" |
|
|
|
cd "${BORG_DIR}" |
|
|
|
|
|
|
|
# This is named with uppercase so that it doesn't tab-complete for |
|
|
|
# "./b<tab>", which should give us "./borg.sh" |
|
|
|
BORG_BIN="${BORG_DIR}/Borg.bin" |
|
|
|
BORG_BIN="${BORG_DIR}/bin/borg.$(uname -m)" |
|
|
|
|
|
|
|
# Use stable host ID in case MAC address changes |
|
|
|
HOSTID="${HOSTNAME}@$(python -c 'import uuid;print(uuid.getnode())')" |
|
|
@@ -27,6 +25,46 @@ trap 'error_handler ${BASH_SOURCE} ${LINENO} $?' ERR |
|
|
|
set -o errexit |
|
|
|
set -o errtrace |
|
|
|
|
|
|
|
# Create pip environment |
|
|
|
setup_venv() |
|
|
|
{ |
|
|
|
if ! which pipenv >/dev/null 2>&1 ; then |
|
|
|
echo "pipenv not found, try: sudo apt install pipenv" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
mkdir -p .venv |
|
|
|
pipenv install |
|
|
|
} |
|
|
|
|
|
|
|
# Create shell script with environment variables |
|
|
|
create_borg_vars() |
|
|
|
{ |
|
|
|
VARS=${BORG_DIR}/vars.sh |
|
|
|
|
|
|
|
# These variables are used elsewhere in this script |
|
|
|
BORG_REPO="ssh://${BACKUP_USER}@${BACKUP_HOST}/./${BACKUP_REPO}" |
|
|
|
BORG=${BORG_DIR}/borg.sh |
|
|
|
SSH=$BORG_DIR/ssh |
|
|
|
|
|
|
|
cat >"$VARS" <<EOF |
|
|
|
export BACKUP_USER=${BACKUP_USER} |
|
|
|
export BACKUP_HOST=${BACKUP_HOST} |
|
|
|
export BACKUP_REPO=${BACKUP_REPO} |
|
|
|
export HOSTNAME=${HOSTNAME} |
|
|
|
export BORG_REPO=${BORG_REPO} |
|
|
|
export BORG_HOST_ID=${HOSTID} |
|
|
|
export BORG_PASSCOMMAND="cat ${BORG_DIR}/passphrase" |
|
|
|
export BORG_DIR=${BORG_DIR} |
|
|
|
export SSH=${SSH} |
|
|
|
export BORG=${BORG} |
|
|
|
export BORG_BIN=${BORG_BIN} |
|
|
|
EOF |
|
|
|
if ! "$BORG" -h >/dev/null ; then |
|
|
|
error "Can't run the borg wrapper; does borg work?" |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# Update paths in README and backup.py |
|
|
|
update_paths() |
|
|
|
{ |
|
|
|
sed -i \ |
|
|
@@ -42,13 +80,16 @@ update_paths() |
|
|
|
backup.py |
|
|
|
} |
|
|
|
|
|
|
|
if [ "$1" == "--update-paths" ] ; then |
|
|
|
# See if we're just supposed to update an existing install |
|
|
|
if [ "$1" == "--update-paths" ] || [ "$1" == "--update" ] ; then |
|
|
|
if [ -e "vars.sh" ]; then |
|
|
|
echo "Updating paths" |
|
|
|
echo "Updating paths and variables" |
|
|
|
update_paths |
|
|
|
setup_venv |
|
|
|
update_vars |
|
|
|
exit 0 |
|
|
|
else |
|
|
|
echo "Can't update paths, not set up yet" |
|
|
|
echo "Can't update, not set up yet" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
fi |
|
|
@@ -92,46 +133,6 @@ notice() { msg 32 "$@" ; } |
|
|
|
warn() { msg 31 "$@" ; } |
|
|
|
error() { msg 31 "Error:" "$@" ; exit 1 ; } |
|
|
|
|
|
|
|
# Create pip environment |
|
|
|
setup_venv() |
|
|
|
{ |
|
|
|
if ! which pipenv >/dev/null 2>&1 ; then |
|
|
|
echo "pipenv not found, try: sudo apt install pipenv" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
mkdir .venv |
|
|
|
pipenv install |
|
|
|
} |
|
|
|
|
|
|
|
# Create shell script with environment variables |
|
|
|
create_borg_vars() |
|
|
|
{ |
|
|
|
VARS=${BORG_DIR}/vars.sh |
|
|
|
|
|
|
|
# These variables are used elsewhere in this script |
|
|
|
BORG_REPO="ssh://${BACKUP_USER}@${BACKUP_HOST}/./${BACKUP_REPO}" |
|
|
|
BORG=${BORG_DIR}/borg.sh |
|
|
|
SSH=$BORG_DIR/ssh |
|
|
|
|
|
|
|
cat >"$VARS" <<EOF |
|
|
|
export BACKUP_USER=${BACKUP_USER} |
|
|
|
export BACKUP_HOST=${BACKUP_HOST} |
|
|
|
export BACKUP_REPO=${BACKUP_REPO} |
|
|
|
export HOSTNAME=${HOSTNAME} |
|
|
|
export BORG_REPO=${BORG_REPO} |
|
|
|
export BORG_HOST_ID=${HOSTID} |
|
|
|
export BORG_PASSCOMMAND="cat ${BORG_DIR}/passphrase" |
|
|
|
export BORG_DIR=${BORG_DIR} |
|
|
|
export SSH=${SSH} |
|
|
|
export BORG=${BORG} |
|
|
|
export BORG_BIN=${BORG_BIN} |
|
|
|
EOF |
|
|
|
if ! "$BORG" -h >/dev/null ; then |
|
|
|
error "Can't run the borg wrapper; does borg work?" |
|
|
|
fi |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
print_random_key() |
|
|
|
{ |
|
|
|
dd if=/dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 16 |
|
|
|