improved check() and implemented basic backup feature (untested)
This commit is contained in:
197
src/sub/transfer.sh
Normal file → Executable file
197
src/sub/transfer.sh
Normal file → Executable file
@@ -1,17 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
check(){
|
||||
check_rsync(){
|
||||
if command -v rsync &>/dev/null
|
||||
then
|
||||
echo "rsync is installed. Check passed. Bye."
|
||||
exit 0;
|
||||
HAD_BEST_SUCCESS="true"
|
||||
else
|
||||
echo "Please install rsync."
|
||||
while [[ -z "$HAD_BEST_SUCCESS" ]]; do
|
||||
read -p "Install now? [y/N] " QUESTION
|
||||
if [[ -z "$QUESTION" ]] || [[ "$QUESTION" = "n" ]] || [[ "$QUESTION" = "N" ]]; then
|
||||
echo "Alright, bye."
|
||||
exit 0;
|
||||
HAD_BEST_SUCCESS="true"
|
||||
fi
|
||||
if [[ "$QUESTION" = "y" ]] || [[ "$QUESTION" = "Y" ]]; then
|
||||
HAD_BEST_SUCCESS="true"
|
||||
@@ -21,7 +21,6 @@ check(){
|
||||
sudo apt update
|
||||
sudo apt install rsync -y
|
||||
echo "Attempted to install rsync. Please execute the check again. Bye."
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if command -v dnf &>/dev/null
|
||||
@@ -29,14 +28,12 @@ check(){
|
||||
sudo dnf update
|
||||
sudo dnf install rsync -y
|
||||
echo "Attempted to install rsync. Please execute the check again. Bye."
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if command -v pacman &>/dev/null
|
||||
then
|
||||
sudo pacman -S rsync
|
||||
echo "Attempted to install rsync. Please execute the check again. Bye."
|
||||
exit 0;
|
||||
fi
|
||||
fi
|
||||
done
|
||||
@@ -46,10 +43,184 @@ check(){
|
||||
fi
|
||||
}
|
||||
|
||||
backup(){
|
||||
exit 0;
|
||||
check_openssl(){
|
||||
if command -v openssl &>/dev/null
|
||||
then
|
||||
echo "openssl is installed. Check passed. Bye."
|
||||
HAD_BEST_SUCCESS_O="true"
|
||||
else
|
||||
echo "Please install openssl."
|
||||
while [[ -z "$HAD_BEST_SUCCESS_O" ]]; do
|
||||
read -p "Install now? [y/N] " QUESTION
|
||||
if [[ -z "$QUESTION" ]] || [[ "$QUESTION" = "n" ]] || [[ "$QUESTION" = "N" ]]; then
|
||||
echo "Alright, bye."
|
||||
HAD_BEST_SUCCESS_O="true"
|
||||
fi
|
||||
if [[ "$QUESTION" = "y" ]] || [[ "$QUESTION" = "Y" ]]; then
|
||||
HAD_BEST_SUCCESS_O="true"
|
||||
echo "Trying to install openssl..."
|
||||
if command -v apt &>/dev/null
|
||||
then
|
||||
sudo apt update
|
||||
sudo apt install openssl -y
|
||||
echo "Attempted to install openssl. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v dnf &>/dev/null
|
||||
then
|
||||
sudo dnf update
|
||||
sudo dnf install openssl -y
|
||||
echo "Attempted to install openssl. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v pacman &>/dev/null
|
||||
then
|
||||
sudo pacman -S openssl
|
||||
echo "Attempted to install openssl. Please execute the check again. Bye."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
check_borg(){
|
||||
if command -v borg &>/dev/null
|
||||
then
|
||||
echo "borg is installed. Check passed. Bye."
|
||||
HAD_BEST_SUCCESS_B="true"
|
||||
else
|
||||
echo "Please install borg."
|
||||
while [[ -z "$HAD_BEST_SUCCESS_B" ]]; do
|
||||
read -p "Install now? [y/N] " QUESTION
|
||||
if [[ -z "$QUESTION" ]] || [[ "$QUESTION" = "n" ]] || [[ "$QUESTION" = "N" ]]; then
|
||||
echo "Alright, bye."
|
||||
HAD_BEST_SUCCESS_B="true"
|
||||
fi
|
||||
if [[ "$QUESTION" = "y" ]] || [[ "$QUESTION" = "Y" ]]; then
|
||||
HAD_BEST_SUCCESS_B="true"
|
||||
echo "Trying to install borg..."
|
||||
if command -v apt &>/dev/null
|
||||
then
|
||||
sudo apt update
|
||||
sudo apt install borg -y
|
||||
echo "Attempted to install borg. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v dnf &>/dev/null
|
||||
then
|
||||
sudo dnf update
|
||||
sudo dnf install borg -y
|
||||
echo "Attempted to install borg. Please execute the check again. Bye."
|
||||
fi
|
||||
|
||||
if command -v pacman &>/dev/null
|
||||
then
|
||||
sudo pacman -S borg
|
||||
echo "Attempted to install borg. Please execute the check again. Bye."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
backup_encrypt(){
|
||||
echo "Creating encrypted backup..."
|
||||
local GEN_PASSPHRASE="$1" # "gen" oder leer
|
||||
|
||||
if [[ -z "$SOURCE" || -z "$DESTINATION" ]]; then
|
||||
echo "SOURCE and DESTINATION must be set"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -e "$SOURCE" ]]; then
|
||||
echo "Source does not exist: $SOURCE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local PASSPHRASE=""
|
||||
if [[ "$GEN_PASSPHRASE" == "gen" ]]; then
|
||||
PASSPHRASE="$(openssl rand -base64 48)"
|
||||
|
||||
echo "======================================================"
|
||||
echo "BORG PASSPHRASE (please note down)"
|
||||
echo
|
||||
echo "$PASSPHRASE"
|
||||
echo
|
||||
echo "The phrase won't be shown again and will not be saved."
|
||||
echo "======================================================"
|
||||
echo
|
||||
fi
|
||||
|
||||
local ARCHIVE_NAME
|
||||
ARCHIVE_NAME="backup-$(date +%F_%H-%M-%S)"
|
||||
|
||||
BORG_PASSPHRASE="$PASSPHRASE" \
|
||||
borg create \
|
||||
--stats \
|
||||
--progress \
|
||||
--compression lz4 \
|
||||
"$DESTINATION::$ARCHIVE_NAME" \
|
||||
"$SOURCE"
|
||||
|
||||
local RC=$?
|
||||
unset BORG_PASSPHRASE
|
||||
|
||||
if [[ $RC -eq 0 ]]; then
|
||||
echo "Backup successful: $ARCHIVE_NAME"
|
||||
else
|
||||
echo "Backup failed (exit code $RC)"
|
||||
fi
|
||||
|
||||
exit 0;
|
||||
return $RC
|
||||
}
|
||||
|
||||
backup(){
|
||||
if [[ -z "$ENCRYPT" ]]; then
|
||||
backup_encrypt
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
echo "Creating unencrypted backup..."
|
||||
|
||||
if [[ -z "$SOURCE" || -z "$DESTINATION" ]]; then
|
||||
echo "SOURCE and DESTINATION must be set"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! -e "$SOURCE" ]]; then
|
||||
echo "Source does not exist: $SOURCE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ARCHIVE_NAME
|
||||
ARCHIVE_NAME="backup-$(date +%F_%H-%M-%S)"
|
||||
|
||||
borg create \
|
||||
--stats \
|
||||
--progress \
|
||||
--compression lz4 \
|
||||
"$DESTINATION::$ARCHIVE_NAME" \
|
||||
"$SOURCE"
|
||||
|
||||
local RC=$?
|
||||
|
||||
if [[ $RC -eq 0 ]]; then
|
||||
echo "Unencrypted backup successful: $ARCHIVE_NAME"
|
||||
else
|
||||
echo "Backup failed (exit code $RC)"
|
||||
fi
|
||||
|
||||
return $RC
|
||||
}
|
||||
|
||||
|
||||
transfer(){
|
||||
exit 0;
|
||||
}
|
||||
@@ -61,21 +232,21 @@ show_help(){
|
||||
echo " -s SOURCE | Source path (e.g. /srv/fileshare/main/)"
|
||||
echo " -d DESTINATION | Destination path (e.g. using ssh)"
|
||||
echo " -b | Transfer as backup"
|
||||
echo " -e | encrypt destination using a key"
|
||||
echo " -e | encrypt destination using a passphrase"
|
||||
echo " -h | Show this help text"
|
||||
echo " -v | Get Version Info"
|
||||
echo " -c | Check the usability of this tool"
|
||||
exit 0
|
||||
}
|
||||
|
||||
while getopts ":s:d:Bvhyc" opt; do
|
||||
while getopts ":s:d:Bvhyce" opt; do
|
||||
case $opt in
|
||||
s) SOURCE="$OPTARG";;
|
||||
d) DESTINATION="$OPTARG";;
|
||||
v) exit 0 ;;
|
||||
c) check ;;
|
||||
c) check_rsync; check_borg; check_openssl; exit 0 ;;
|
||||
e) ENCRYPT="1" ;;
|
||||
b) backup ;;
|
||||
B) backup ;;
|
||||
h) show_help ;;
|
||||
y) ALWAYS_YES="1" ;;
|
||||
\?) echo "Unknown option: -$OPTARG" >&2; exit 1 ;;
|
||||
@@ -83,7 +254,5 @@ while getopts ":s:d:Bvhyc" opt; do
|
||||
esac
|
||||
done
|
||||
|
||||
transfer
|
||||
|
||||
echo "Nothing to do."
|
||||
exit 0
|
||||
Reference in New Issue
Block a user