Hi there, today I manage to update automation script for auto backup TrueNAS config to my Raspberry Pi 5 on my local network. Script is from old forum [Script to AutoBackup TrueNAS config]
#!/bin/sh
# Script to backup TrueNAS SCALE configuration file
# WARNING: DOES NOT CHECK IF A VALID BACKUP IS ACTUALLY CREATED
#
# If a valid backup file is not created then there is something wrong with the API call
# Check that your URL and API Key are both correct
#
# # # # # # # # # # # # # # # #
# USER CONFIGURABLE VARIABLES #
# # # # # # # # # # # # # # # #
# Server IP or URL (include http(s)://)
serverURL="http://xxx.xxx.x.xxx"
# Remote Server IP (include ftp://xxx.xxx.x.xx/folder/)
serverFTP="ftp://xxx.xxx.x.xx/"
# Remote Server Login and Password (format login:password)
login="pass:pass"
# TrueNAS API key (Generate from 'User Icon' -> 'API Keys' in TrueNAS WebGUI)
apiKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Include Secret Seed (true| false)
secSeed=true
# Path on server to store backups
backuploc="/mnt/poolname/foldername"
# Max number of backups to keep (set as 0 to never delete anything)
maxnrOfFiles=5
# # # # # # # # # # # # # # # # # #
# END USER CONFIGURABLE VARIABLES #
# # # # # # # # # # # # # # # # # #
echo
echo "Backing up current TrueNAS config"
# Check current TrueNAS version number
versiondir=`cat /etc/version | cut -d' ' -f1`
# Set directory for backups to: 'path on server' / 'current version number'
backupMainDir="${backuploc}/${versiondir}"
# Create directory for for backups (Location/Version)
mkdir -p $backupMainDir
# Use appropriate extension if we are exporting the secret seed
if [ $secSeed = true ]
then
fileExt="tar"
echo "Secret Seed will be included"
else
fileExt="db"
echo "Secret Seed will NOT be included"
fi
# Generate file name
fileName=$(hostname)-config-$(date +%Y%m%d-%H%M%S).$fileExt
# API call to backup config and include secret seed
curl --no-progress-meter \
-X 'POST' \
$serverURL'/api/v2.0/config/save' \
-H 'Authorization: Bearer '$apiKey \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-d '{"secretseed": '$secSeed'}' \
--output $backupMainDir/$fileName
#### NEW SECTION 1 STARTS ####
# compare new file to old file, delete new if identical to last one
cmpFile="$( ls -t ${backupMainDir} | tail -1 )"
if cmp $fileName $cmpFile ; then
echo deleting "${backupMainDir}/${fileName}"
rm $backupMainDir/$fileName
echo "Config has not changed, no action taken. Quitting"
exit
fi
#
#### NEW SECTION 1 ENDS ####
echo
echo "Config saved to ${backupMainDir}/${fileName}"
#### NEW SECTION 2 STARTS ####
# This copies the config file off the server and onto fastmail files
curl -T ${backupMainDir}/${fileName} -u ${login} ${serverFTP}
echo
echo "Config copied to <off-site server>."
#### NEW SECTION 2 ENDS ####
#
# The next section checks for and deletes old backups
#
# Will not run if $maxnrOfFiles is set to zero (0)
#
if [ ${maxnrOfFiles} -ne 0 ]
then
echo
echo "Checking for old backups to delete"
echo "Number of files to keep: ${maxnrOfFiles}"
# Get number of files in the backup directory
nrOfFiles="$(ls -l ${backupMainDir} | grep -c "^-.*")"
echo "Current number of files: ${nrOfFiles}"
# Only do something if the current number of files is greater than $maxnrOfFiles
if [ ${maxnrOfFiles} -lt ${nrOfFiles} ]
then
nFileToRemove="$((nrOfFiles - maxnrOfFiles))"
echo "Removing ${nFileToRemove} file(s)"
while [ $nFileToRemove -gt 0 ]
do
fileToRemove="$(ls -t ${backupMainDir} | tail -1)"
echo "Removing file ${fileToRemove}"
nFileToRemove="$((nFileToRemove - 1))"
rm ${backupMainDir}/${fileToRemove}
done
fi
# Inform the user that no files will be deleted if $maxnrOfFiles is set to zero (0)
else
echo
echo "NOT deleting old backups because '\$maxnrOfFiles' is set to 0"
fi
#All Done
echo
echo "DONE!"
echo
All seems to be working, but if someone can take a look if I did miss something?
This is my output from the script:
# ./config_backup.sh
Backing up current TrueNAS config
Secret Seed will be included
cmp: TrueNAS.local-config-20241104-130128.tar: No such file or directory
Config saved to /mnt/WebData/Config_Backup/TrueNAS-13.0-U6.2/TrueNAS.local-config-20241104-130128.tar
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 730k 0 0 100 730k 0 7847k --:--:-- --:--:-- --:--:-- 7934k
Config copied to <off-site server>.
Checking for old backups to delete
Number of files to keep: 5
Current number of files: 4
DONE!