mirror of
https://github.com/rootzoll/raspiblitz.git
synced 2025-02-24 14:51:03 +01:00
Implement Nextcloud backups (optional) (#2354)
* Implement Nextcloud backups (optional) * Add menu option for Nextcloud backups * Create backup directory automatically * Fix potential issue with url substitution * Remove unused variable * Ectract actions to functions with scoped vars
This commit is contained in:
parent
e7e4b003d7
commit
ca69e4c5ad
3 changed files with 142 additions and 0 deletions
|
@ -32,6 +32,10 @@ echo "# map dropboxbackup to on/off"
|
|||
DropboxBackup="off"
|
||||
if [ ${#dropboxBackupTarget} -gt 0 ]; then DropboxBackup="on"; fi
|
||||
|
||||
echo "map nextcloudbackup to on/off"
|
||||
NextcloudBackup="off"
|
||||
if [ $nextcloudBackupServer ] && [ $nextcloudBackupUser ] && [ $nextcloudBackupPassword ]; then NextcloudBackup="on"; fi
|
||||
|
||||
echo "# map localbackup to on/off"
|
||||
LocalBackup="off"
|
||||
if [ ${#localBackupDeviceUUID} -gt 0 ] && [ "${localBackupDeviceUUID}" != "off" ]; then LocalBackup="on"; fi
|
||||
|
@ -110,6 +114,7 @@ if [ "${lndNode}" == "on" ]; then
|
|||
OPTIONS+=(k '-LND Accept Keysend' ${keysend})
|
||||
OPTIONS+=(c '-LND Circuitbreaker (firewall)' ${circuitbreaker})
|
||||
OPTIONS+=(u '-LND Auto-Unlock' ${autoUnlock})
|
||||
OPTIONS+=(x '-LND StaticChannelBackup on Nextcloud' ${NextcloudBackup})
|
||||
OPTIONS+=(d '-LND StaticChannelBackup DropBox' ${DropboxBackup})
|
||||
OPTIONS+=(e '-LND StaticChannelBackup USB Drive' ${LocalBackup})
|
||||
OPTIONS+=(l '-LND UPnP (AutoNAT)' ${autoNatDiscovery})
|
||||
|
@ -306,6 +311,22 @@ else
|
|||
echo "Dropbox backup setting unchanged."
|
||||
fi
|
||||
|
||||
# Nextcloud process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "x")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
if [ "${NextcloudBackup}" != "${choice}" ]; then
|
||||
echo "Nextcloud Setting changed .."
|
||||
anychange=1
|
||||
sudo -u admin /home/admin/config.scripts/nextcloud.upload.sh ${choice}
|
||||
if [ "${choice}" = "on" ]; then
|
||||
# doing initial upload so that user can see result
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
sudo /home/admin/config.scripts/nextcloud.upload.sh upload /mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup
|
||||
fi
|
||||
else
|
||||
echo "Nextcloud backup setting unchanged."
|
||||
fi
|
||||
|
||||
# LocalBackup process choice
|
||||
choice="off"; check=$(echo "${CHOICES}" | grep -c "e")
|
||||
if [ ${check} -eq 1 ]; then choice="on"; fi
|
||||
|
|
|
@ -368,6 +368,18 @@ do
|
|||
fi
|
||||
fi
|
||||
|
||||
# check if Nextcloud backups are enabled
|
||||
if [ $nextcloudBackupServer ] && [ $nextcloudBackupUser ] && [ $nextcloudBackupPassword ]; then
|
||||
echo "--> Offsite-Backup Nextcloud"
|
||||
source <(sudo /home/admin/config.scripts/nextcloud.upload.sh upload ${localBackupPath})
|
||||
source <(sudo /home/admin/config.scripts/nextcloud.upload.sh upload ${localTimestampedPath})
|
||||
if [ ${#err} -gt 0 ]; then
|
||||
echo "FAIL - ${err}"
|
||||
else
|
||||
echo "OK - ${upload}"
|
||||
fi
|
||||
fi
|
||||
|
||||
#else
|
||||
# echo "Channel Backup File not changed."
|
||||
fi
|
||||
|
|
109
home.admin/config.scripts/nextcloud.upload.sh
Executable file
109
home.admin/config.scripts/nextcloud.upload.sh
Executable file
|
@ -0,0 +1,109 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
|
||||
echo "# script to upload a file to Nextcloud"
|
||||
echo "# nextcloud.upload.sh on [server] [user] [password]"
|
||||
echo "# nextcloud.upload.sh off"
|
||||
echo "# nextcloud.upload.sh upload [filepath]"
|
||||
echo "err='just informational output'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source /mnt/hdd/raspiblitz.conf
|
||||
|
||||
on() {
|
||||
local server="${1}"
|
||||
local user="${2}"
|
||||
local password="${3}"
|
||||
|
||||
sudo touch /home/admin/.tmp
|
||||
sudo chmod 777 /home/admin/.tmp
|
||||
|
||||
if [ -z "${server}" ]; then
|
||||
whiptail --title "Static Channel Backup on Nextcloud" --inputbox "Enter your Nextcloud server URL\nExample: https://cloud.johnsmith.com" 11 70 2>/home/admin/.tmp
|
||||
server=$(cat /home/admin/.tmp)
|
||||
fi
|
||||
|
||||
if [ -z "${user}" ]; then
|
||||
whiptail --title "Static Channel Backup on Nextcloud" --inputbox "Enter your Nextcloud username" 11 70 2>/home/admin/.tmp
|
||||
user=$(cat /home/admin/.tmp)
|
||||
fi
|
||||
|
||||
if [ -z "${password}" ]; then
|
||||
whiptail --title "Static Channel Backup on Nextcloud" --inputbox "Enter your Nextcloud password" 11 70 2>/home/admin/.tmp
|
||||
password=$(cat /home/admin/.tmp)
|
||||
fi
|
||||
|
||||
shred -u /home/admin/.tmp
|
||||
|
||||
if [ "${server}" ] && [ "${user}" ] && [ "${password}" ]; then
|
||||
sudo sed -i '/nextcloudBackupServer=.*/d' /mnt/hdd/raspiblitz.conf
|
||||
echo "nextcloudBackupServer=${server}" >> /mnt/hdd/raspiblitz.conf
|
||||
|
||||
sudo sed -i '/nextcloudBackupUser=.*/d' /mnt/hdd/raspiblitz.conf
|
||||
echo "nextcloudBackupUser=${user}" >> /mnt/hdd/raspiblitz.conf
|
||||
|
||||
sudo sed -i '/nextcloudBackupPassword=.*/d' /mnt/hdd/raspiblitz.conf
|
||||
echo "nextcloudBackupPassword=${password}" >> /mnt/hdd/raspiblitz.conf
|
||||
else
|
||||
echo "Please provide nextcloud server, username and password"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
off() {
|
||||
sudo sed -i '/nextcloudBackupServer=.*/d' /mnt/hdd/raspiblitz.conf
|
||||
sudo sed -i '/nextcloudBackupUser=.*/d' /mnt/hdd/raspiblitz.conf
|
||||
sudo sed -i '/nextcloudBackupPassword=.*/d' /mnt/hdd/raspiblitz.conf
|
||||
}
|
||||
|
||||
upload() {
|
||||
local filepath="${1}"
|
||||
|
||||
if [ -z "${filepath}" ]; then
|
||||
echo "err='Missing argument: filepath'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${nextcloudBackupServer}" ] || [ -z "${nextcloudBackupUser}" ] || [ -z "${nextcloudBackupPassword}" ]; then
|
||||
echo "err='Nextcloud credentials are missing'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local remoteDirUrl="$nextcloudBackupServer/remote.php/dav/files/$nextcloudBackupUser/raspiblitz/"
|
||||
|
||||
# checking if remote directory exists
|
||||
local response
|
||||
response=$(curl "${remoteDirUrl}" \
|
||||
--user "${nextcloudBackupUser}:${nextcloudBackupPassword}" \
|
||||
--request PROPFIND \
|
||||
--silent)
|
||||
|
||||
# if remote directory doesn't exist, we need to create it
|
||||
if [[ "${response}" = *DAV\\Exception\\NotFound* ]]; then
|
||||
curl "${remoteDirUrl}" \
|
||||
--user "${nextcloudBackupUser}:${nextcloudBackupPassword}" \
|
||||
--request MKCOL \
|
||||
--silent
|
||||
fi
|
||||
|
||||
if curl "${remoteDirUrl}" \
|
||||
--user "${nextcloudBackupUser}:${nextcloudBackupPassword}" \
|
||||
--upload-file "${filepath}" \
|
||||
--silent;
|
||||
then
|
||||
echo "File ${filepath} has been uploaded"
|
||||
echo "upload=1"
|
||||
else
|
||||
echo "err='File upload failed'"
|
||||
echo "upload=0"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
case "${1}" in
|
||||
on) on "${2}" "${3}" "${4}" ;;
|
||||
off) off ;;
|
||||
upload) upload "${2}" ;;
|
||||
*) echo "err=Unknown action: ${1}" ; exit 1 ;;
|
||||
esac
|
Loading…
Add table
Reference in a new issue