Create restore.sh
This commit is contained in:
103
core/scripts/hysteria2/restore.sh
Normal file
103
core/scripts/hysteria2/restore.sh
Normal file
@ -0,0 +1,103 @@
|
||||
#!/bin/bash
|
||||
source /etc/hysteria/core/scripts/path.sh
|
||||
|
||||
# Usage: ./restore.sh <backup_zip_file>
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_ZIP_FILE="$1"
|
||||
RESTORE_DIR="/tmp/hysteria_restore_$(date +%Y%m%d_%H%M%S)"
|
||||
TARGET_DIR="/etc/hysteria"
|
||||
|
||||
if [ -z "$BACKUP_ZIP_FILE" ]; then
|
||||
echo "Error: Backup file path is required."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$BACKUP_ZIP_FILE" ]; then
|
||||
echo "Error: Backup file not found: $BACKUP_ZIP_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$BACKUP_ZIP_FILE" != *.zip ]]; then
|
||||
echo "Error: Backup file must be a .zip file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$RESTORE_DIR"
|
||||
|
||||
unzip -l "$BACKUP_ZIP_FILE" >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Invalid ZIP file."
|
||||
rm -rf "$RESTORE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
unzip -o "$BACKUP_ZIP_FILE" -d "$RESTORE_DIR" >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Could not extract the ZIP file."
|
||||
rm -rf "$RESTORE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
expected_files=(
|
||||
"ca.key"
|
||||
"ca.crt"
|
||||
"users.json"
|
||||
"config.json"
|
||||
".configs.env"
|
||||
)
|
||||
|
||||
for file in "${expected_files[@]}"; do
|
||||
if [ ! -f "$RESTORE_DIR/$file" ]; then
|
||||
echo "Error: Required file '$file' is missing from the backup."
|
||||
rm -rf "$RESTORE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f "$RESTORE_DIR/$file" ]; then
|
||||
echo "Error: '$file' in the backup is not a regular file."
|
||||
rm -rf "$RESTORE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
timestamp=$(date +%Y%m%d_%H%M%S)
|
||||
existing_backup_dir="/opt/hysbackup/restore_pre_backup_$timestamp"
|
||||
mkdir -p "$existing_backup_dir"
|
||||
for file in "${expected_files[@]}"; do
|
||||
if [ -f "$TARGET_DIR/$file" ]; then
|
||||
cp -p "$TARGET_DIR/$file" "$existing_backup_dir/$file"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error creating backup file before restore from '$TARGET_DIR/$file'."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
for file in "${expected_files[@]}"; do
|
||||
cp -p "$RESTORE_DIR/$file" "$TARGET_DIR/$file"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: replace Configuration Files '$file'."
|
||||
rm -rf "$existing_backup_dir"
|
||||
rm -rf "$RESTORE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
rm -rf "$RESTORE_DIR"
|
||||
echo "Hysteria configuration restored successfully."
|
||||
|
||||
|
||||
python3 "$CLI_PATH" restart-hysteria2 > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Restart service failed'."
|
||||
rm -rf "$existing_backup_dir"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$existing_backup_dir" != "" ]]; then
|
||||
rm -rf "$existing_backup_dir"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user