Files
PTS-Team/menu/functions/pgvault.func
MrDoobPG d95c167e7b 11
push
2019-08-10 11:42:48 +02:00

560 lines
22 KiB
Bash

#!/bin/bash
#
# Title: PGBlitz (Reference Title File)
# Author(s): Admin9705
# URL: https://pgblitz.com - http://github.pgblitz.com
# GNU: General Public License v3.0
################################################################################
runningcheck() {
initial2
runcheck5=$(docker ps | grep ${program_var})
if [ "$runcheck5" != "" ]; then running=1; else running=0; fi
}
initial() {
rm -rf /var/plexguide/pgvault.output 1>/dev/null 2>&1
rm -rf /var/plexguide/pgvault.buildup 1>/dev/null 2>&1
rm -rf /var/plexguide/program.temp 1>/dev/null 2>&1
rm -rf /var/plexguide/app.list 1>/dev/null 2>&1
rm -rf /var/plexguide/pgvault.output 1>/dev/null 2>&1
touch /var/plexguide/pgvault.output
touch /var/plexguide/program.temp
touch /var/plexguide/app.list
touch /var/plexguide/pgvault.buildup
touch /var/plexguide/pgvault.output
touch /var/plexguide/rclone.size
space=$(cat /var/plexguide/data.location)
# To Get Used Space
used=$(df -h /opt/appdata/plexguide | tail -n +2 | awk '{print $3}')
# To Get All Space
capacity=$(df -h /opt/appdata/plexguide | tail -n +2 | awk '{print $2}')
# Percentage
percentage=$(df -h /opt/appdata/plexguide | tail -n +2 | awk '{print $5}')
}
initial2() {
path=$(cat /var/plexguide/server.hd.path)
tarlocation=$(cat /var/plexguide/data.location)
program_size=$(cat /var/plexguide/rclone.size)
program_var=$(cat /tmp/program_var)
server_id=$(cat /var/plexguide/server.id)
}
final() {
echo
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
read -p '✅ Process Complete! | PRESS [ENTER] ' typed </dev/tty
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
bash /opt/pgvault/pgvault.sh
exit
}
queued() {
echo
read -p '⛔️ ERROR - APP Already Queued! | Press [ENTER] ' typed </dev/tty
}
badserver() {
echo
read -p '⛔️ ERROR - Type an Exact Server Name | Press [ENTER] ' typed </dev/tty
}
#not used yet
rclonelist() {
ls -l /mnt/gdrive/plexguide/backup | grep "^d" | awk '{print $9}' >pgvault.serverlist
}
pgboxrecall() {
ls -p /opt/coreapps/apps | grep -v / >/var/plexguide/pgvault.apprecall
while read p; do
sed -i "/^$p\b/Id" /var/plexguide/pgvault.apprecall
done </opt/pgvault/exempt.list
while read p; do
sed -i "/^$p\b/Id" /var/plexguide/pgvault.apprecall
basename "$p" .yml >>/var/plexguide/pgvault.apprecall
done </var/plexguide/pgvault.apprecall
}
mathprime() {
### List Out Apps In Readable Order (One's Not Installed)
num=0
rm -rf /var/plexguide/program.temp 1>/dev/null 2>&1
while read p; do
echo -n $p >>/var/plexguide/program.temp
echo -n " " >>/var/plexguide/program.temp
num=$((num + 1))
if [ "$num" == 7 ]; then
num=0
echo " " >>/var/plexguide/program.temp
fi
done </var/plexguide/pgvault.apprecall
}
################################################ FOR BACKUP - START
apprecall() {
tree -d -L 1 /opt/appdata | awk '{print $2}' | tail -n +2 | head -n -2 >/var/plexguide/pgvault.apprecall
while read p; do
sed -i "/^$p\b/Id" /var/plexguide/pgvault.apprecall
done </opt/pgvault/exempt.list
### Blank Out Temp List
rm -rf /var/plexguide/program.temp && touch /var/plexguide/program.temp
mathprime
}
buildup() {
echo "$typed" >>/var/plexguide/pgvault.buildup
sed -i "/^$typed\b/Id" /var/plexguide/pgvault.apprecall
num=0
rm -rf /var/plexguide/pgvault.output 1>/dev/null 2>&1
while read p; do
echo -n $p >>/var/plexguide/pgvault.output
echo -n " " >>/var/plexguide/pgvault.output
if [ "$num" == 7 ]; then
num=0
echo " " >>/var/plexguide/pgvault.output
fi
done </var/plexguide/pgvault.buildup
mathprime
vaultbackup
}
################################################ FOR BACKUP - END
serverprime() {
tree -d -L 1 /mnt/gdrive/plexguide/backup | awk '{print $2}' | tail -n +2 | head -n -2 >/tmp/server.list
### List Out Apps In Readable Order (One's Not Installed)
num=0
rm -rf /var/plexguide/program.temp 1>/dev/null 2>&1
while read p; do
echo -n $p >>/var/plexguide/program.temp
echo -n " " >>/var/plexguide/program.temp
num=$((num + 1))
if [ "$num" == 7 ]; then
num=0
echo " " >>/var/plexguide/program.temp
fi
done </tmp/server.list
servers=$(cat /var/plexguide/program.temp)
server_id=$(cat /var/plexguide/server.id)
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 PG Vault ~ Server Recall 📓 Reference: pgvault.pgblitz.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📂 Current [${server_id}] & Prior Servers Detected:
$servers
💬 [Z] Exit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
read -p '🌍 Type Server Name | Press [ENTER]: ' server </dev/tty
echo $server >/tmp/server.select
if [[ "$server" == "exit" || "$server" == "Exit" || "$server" == "EXIT" || "$server" == "z" || "$server" == "Z" ]]; then exit; fi
current2=$(cat /tmp/server.list | grep "\<$server\>")
if [ "$current2" == "" ]; then
badserver
serverprime
fi
tempserver=$server
ls -l /mnt/gdrive/plexguide/backup/$tempserver | awk '{print $9}' | tail -n +2 >/var/plexguide/pgvault.restoreapps
### Blank Out Temp List
rm -rf /var/plexguide/pgvault.apprecall 1>/dev/null 2>&1
touch /var/plexguide/pgvault.apprecall
while read p; do
basename "$p" .tar >>/var/plexguide/pgvault.apprecall
done </var/plexguide/pgvault.restoreapps
### Blank Out Temp List
rm -rf /var/plexguide/program.temp 1>/dev/null 2>&1
touch /var/plexguide/program.temp
mathprime
}
buildup2() {
echo "$typed" >>/var/plexguide/pgvault.buildup
sed -i "/^$typed\b/Id" /var/plexguide/pgvault.apprecall
num=0
rm -rf /var/plexguide/pgvault.output 1>/dev/null 2>&1
while read p; do
echo -n $p >>/var/plexguide/pgvault.output
echo -n " " >>/var/plexguide/pgvault.output
if [ "$num" == 7 ]; then
num=0
echo " " >>/var/plexguide/pgvault.output
fi
done </var/plexguide/pgvault.buildup
mathprime
vaultrestore
}
################################################ FOR RESTORE - START
################################################ FOR RESTORE - END
######################################################## START - PG Vault Backup
backup_start() {
while read p; do
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PG Vault - Backing Up: $p
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
sleep 2.5
# Store Used Program
echo $p >/tmp/program_var
# Execute Main Program
backup_process
sleep 2
done </var/plexguide/pgvault.buildup
final
}
backup_process() {
initial2
#tee <<-EOF
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#↘️ Determining Initial File Size - $program_var
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#EOF
#size=$(du -sh --apparent-size /opt/appdata/$program_var | /usr/bin/awk '{print $1}')
#sleep 2
#echo "Initial File Size: $size"
#sleep 2
##### Stop Docker Container if Running
runningcheck
if [ "$running" == "1" ]; then
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Stopping Docker Container - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
sleep 1
docker stop $program_var 1>/dev/null 2>&1
fi
###### Start the Backup Process - Backup Locally First
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Zipping Data Locally - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
path=$(cat /var/plexguide/server.hd.path)
tarlocation=$(cat /var/plexguide/data.location)
server_id=$(cat /var/plexguide/server.id)
tar \
--warning=no-file-changed --ignore-failed-read --absolute-names --warning=no-file-removed \
--exclude-from=/opt/pgvault/exclude.list \
-C /opt/appdata/${program_var} -cvf /opt/appdata/plexguide/${program_var}.tar ./
#tar \
#--warning=no-file-changed --ignore-failed-read --absolute-names --warning=no-file-removed \
#--exclude-from=/opt/pgvault/exclude.list \
#-cfv ${program_var}.tar /opt/appdata/${program_var}
##### Restart Docker Application if was Running Prior
if [ "$running" == "1" ]; then
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Restarting Docker Application - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
sleep 2
docker restart $program_var 1>/dev/null 2>&1
fi
###### Backing Up Files to GDrive
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Sending Zipped Data to Google Drive - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
rclone --config /opt/appdata/plexguide/rclone.conf mkdir gdrive:/plexguide/backup/${server_id} 1>/dev/null 2>&1
rclone --config /opt/appdata/plexguide/rclone.conf \
--stats-one-line --stats 1s --progress \
moveto ${tarlocation}/${program_var}.tar \
gdrive:/plexguide/backup/${server_id}/${program_var}.tar \
-v --checksum --drive-chunk-size=64M --transfers=8 --user-agent="backup"
##### Remove File Incase
rm -rf ${tarlocation}/${program_var}.tar 1>/dev/null 2>&1
}
######################################################## END - PG Vault Backup
#
##################################################### START - PG Vault Restore
restore_start() {
while read p; do
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PG Vault - Restoring: $p
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
sleep 2.5
# Store Used Program
echo $p >/tmp/program_var
# Execute Main Program
restore_process
sleep 2
done </var/plexguide/pgvault.buildup
final
}
restore_process() {
initial2
srecall=$(cat /tmp/server.select)
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Determining Initial File Size - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
size=$(du -sh --apparent-size /mnt/gdrive/plexguide/backup/${srecall}/${program_var}.tar | /usr/bin/awk '{print $1}')
sleep 2
echo "Initial File Size: $size"
sleep 2
###### Backing Up Files to GDrive
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Downloading Data From Google Drive - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
rclone --config /opt/appdata/plexguide/rclone.conf --stats-one-line \
--stats 1s --progress \
copy gdrive:/plexguide/backup/${srecall}/${program_var}.tar \
${tarlocation} \
-v --checksum --drive-chunk-size=64M --transfers=8 --user-agent="backup"
##### Stop Docker Container if Running
runningcheck
if [ "$running" == "1" ]; then
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Stopping Docker Container - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
sleep 1
docker stop $program_var 1>/dev/null 2>&1
fi
###### Start the Backup Process - Backup Locally First
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ UnZipping & Restoring Data - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
mkdir -p "/opt/appdata/${program_var}"
rm -rf "/opt/appdata/${program_var}/*"
chown -R 1000:1000 "/opt/appdata/${program_var}"
chmod -R 775 "/opt/appdata/${program_var}"
tar -C /opt/appdata/${program_var} -xvf ${tarlocation}/${program_var}.tar
chown -R 1000:1000 "/opt/appdata/${program_var}"
chmod -R 775 "/opt/appdata/${program_var}"
##### Restart Docker Application if was Running Prior
if [ "$running" == "1" ]; then
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
↘️ Restarting Docker Application - $program_var
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
sleep 2
docker restart $program_var 1>/dev/null 2>&1
fi
##### Remove File Incase
rm -rf ${tarlocation}/${program_var}.tar 1>/dev/null 2>&1
}
##################################################### END - PG Vault Restore
#
##################################################### START - Backup Interface
vaultbackup() {
### List Out Apps In Readable Order (One's Not Installed)
notrun=$(cat /var/plexguide/program.temp)
buildup=$(cat /var/plexguide/pgvault.output)
if [ "$buildup" == "" ]; then buildup="NONE"; fi
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 PG Vault ~ Data Storage 📓 Reference: pgvault.pgblitz.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📂 Potential Data to Backup
$notrun
💾 Apps Queued for Backup
$buildup
[A] Backup
[Z] Exit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
read -p '🌍 Type APP for QUEUE | Press [ENTER]: ' typed </dev/tty
if [[ "$typed" == "backup" || "$typed" == "a" || "$typed" == "A" ]]; then backup_start; fi
if [[ "$typed" == "exit" || "$typed" == "Exit" || "$typed" == "EXIT" || "$typed" == "z" || "$typed" == "Z" ]]; then exit; fi
current2=$(cat /var/plexguide/pgvault.buildup | grep "\<$typed\>")
if [ "$current2" != "" ]; then
queued
vaultbackup
fi
cat /var/plexguide/pgvault.buildup >/tmp/appcheck.5
cat /var/plexguide/pgvault.apprecall >>/tmp/appcheck.5
current1=$(cat /tmp/appcheck.5 | grep "\<$typed\>")
if [ "$current1" == "" ]; then badinput && vaultbackup; fi
buildup
}
##################################################### END - Backup Interface
#
##################################################### START - Restore Interface
vaultrestore() {
notrun=$(cat /var/plexguide/program.temp)
buildup=$(cat /var/plexguide/pgvault.output)
if [ "$buildup" == "" ]; then buildup="NONE"; fi
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 PG Vault ~ Data Recall 📓 Reference: pgvault.pgblitz.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📂 Potential Data to Restore
$notrun
💾 Apps Queued for Restore
$buildup
[A] Restore
[Z] Exit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
read -p '🌍 Type APP for QUEUE | Press [ENTER]: ' typed </dev/tty
if [[ "$typed" == "restore" || "$typed" == "a" || "$typed" == "A" ]]; then restore_start; fi
if [[ "$typed" == "exit" || "$typed" == "Exit" || "$typed" == "EXIT" || "$typed" == "z" || "$typed" == "Z" ]]; then exit; fi
current2=$(cat /var/plexguide/pgvault.buildup | grep "\<$typed\>")
if [ "$current2" != "" ]; then
queued
vaultrestore
fi
cat /var/plexguide/pgvault.buildup >/tmp/appcheck.5
cat /var/plexguide/pgvault.apprecall >>/tmp/appcheck.5
current1=$(cat /tmp/appcheck.5 | grep "\<$typed\>")
if [ "$current1" == "" ]; then badinput && vaultrestore; fi
buildup2
}
##################################################### START Primary Interface
primaryinterface() {
initial2
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 PG Vault - Main Interface 📓 Reference: pgvault.pgblitz.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🌵 PG Disk Used Space: $used of $capacity | $percentage Used Capacity
[1] Data Backup
[2] Data Restore
[3] Current Server ID : $server_id
[4] Processing Location: $tarlocation
[Z] Exit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
read -p 'Type a Number | Press [ENTER]: ' typed </dev/tty
if [ "$typed" == "1" ]; then
vaultbackup
primaryinterface
elif [ "$typed" == "2" ]; then
serverprime
vaultrestore
primaryinterface
elif [ "$typed" == "3" ]; then
echo "0" >/var/plexguide/server.id.stored
bash /opt/plexguide/menu/interface/serverid.sh
primaryinterface
elif [ "$typed" == "4" ]; then
bash /opt/plexguide/menu/data/location.sh
primaryinterface
elif [[ "$typed" == "Z" || "$typed" == "z" ]]; then
exit
else
badinput
primaryinterface
fi
}
##################################################### END Primary Interface
restorecheck() {
if [ "$restoreid" == "[NOT-SET]" ]; then
tee <<-EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⛔️ WARNING! - You Must Set Your Recovery ID First! Restarting Process!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
EOF
read -n 1 -s -r -p "Press [ANY] Key to Continue "
echo
primaryinterface
exit
fi
}