fix: OEM plugin issues (#1288)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- The file synchronization tool now requires an explicitly defined
destination and offers a new option to remove remote password files
before syncing. Additionally, synchronization now omits ownership,
group, and permission metadata for smoother transfers.
- The activation flow has been refined, with legacy authentication
modifications removed to deliver a cleaner welcome modal experience.
- A new variable has been introduced to enhance server state management.

- **Refactor**
- Internal configuration adjustments have been made to enhance component
delivery and streamline system actions.

- **Bug Fixes**
- Updated handling of remote user and host parameters in the
synchronization script for improved functionality.
- Simplified the activation code removal process by focusing solely on
the `.set-password.php` file restoration.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Zack Spear <hi@zackspear.com>
This commit is contained in:
Eli Bosley
2025-03-28 16:39:15 -04:00
committed by GitHub
parent 2266139742
commit d5a3d0dfac
5 changed files with 43 additions and 74 deletions

View File

@@ -2,24 +2,14 @@
# Bash script to sync local activation code directory to the correct location on the Unraid server's boot device
# Usage: ./sync_files.sh --local-directory <local_directory> [--remote-user <remote_user>] [--remote-host <remote_host>] [--remote-path <remote_path>]
# Usage: ./sync_files.sh --local-directory <local_directory> --remote-host <remote_host> [--remote-path <remote_path>] [--remove-password]
# Example usage 0
# ./plugin/scripts/rsync-activation-dir.sh --local-directory /Users/zack/Downloads/activation_code_pdfs_12_19_2024_1436
# Path to store the last used remote host
state_file="$HOME/.deploy_state"
# Read the last used remote host from the state file
if [[ -f "$state_file" ]]; then
LAST_REMOTE_HOST=$(cat "$state_file")
else
LAST_REMOTE_HOST=""
fi
# Example usage:
# ./plugin/scripts/rsync-activation-dir.sh --local-directory /Users/zack/Downloads/activation_code_pdfs_12_19_2024_1436 --remote-host unraid.local --remove-password
# Default values
REMOTE_USER="root"
REMOTE_PATH="/boot/config/activation"
REMOVE_PASSWORD=false
# Parse named flag parameters
while [[ $# -gt 0 ]]; do
@@ -28,10 +18,6 @@ while [[ $# -gt 0 ]]; do
LOCAL_DIRECTORY="$2"
shift 2
;;
--remote-user)
REMOTE_USER="$2"
shift 2
;;
--remote-host)
REMOTE_HOST="$2"
shift 2
@@ -40,32 +26,29 @@ while [[ $# -gt 0 ]]; do
REMOTE_PATH="$2"
shift 2
;;
--remove-password)
REMOVE_PASSWORD=true
shift
;;
*)
echo "Unknown option: $1"
echo "Usage: $0 --local-directory <local_directory> [--remote-user <remote_user>] [--remote-host <remote_host>] [--remote-path <remote_path>]"
echo "Usage: $0 --local-directory <local_directory> --remote-host <remote_host> [--remote-path <remote_path>] [--remove-password]"
exit 1
;;
esac
done
# Validate required parameter
# Validate required parameters
if [[ -z "$LOCAL_DIRECTORY" ]]; then
echo "Error: --local-directory is required."
exit 1
fi
# Use last remote host if none is provided
REMOTE_HOST=${REMOTE_HOST:-$LAST_REMOTE_HOST}
# Check if remote host is provided
if [[ -z "$REMOTE_HOST" ]]; then
echo "Please provide the remote host using --remote-host."
echo "Error: --remote-host is required."
exit 1
fi
# Save the current remote host to the state file
echo "$REMOTE_HOST" > "$state_file"
# Check if local directory ends with a slash
if [[ "$LOCAL_DIRECTORY" != */ ]]; then
echo "The local directory does not end with a slash."
@@ -75,8 +58,31 @@ if [[ "$LOCAL_DIRECTORY" != */ ]]; then
fi
fi
# First, remove any existing password files on the remote server
ssh "root@$REMOTE_HOST" "rm -rf $REMOTE_PATH/*" || {
echo "Error: Failed to clean remote directory"
exit 1
}
# Remove Unraid password file if requested
if [[ "$REMOVE_PASSWORD" == true ]]; then
read -p "Do you want to remove any existing Unraid license keys on the server? (y/n): " REMOVE_KEYS
if [[ "$REMOVE_KEYS" =~ ^[Yy]$ ]]; then
ssh "root@$REMOTE_HOST" "rm -f /boot/config/*.key" || {
echo "Error: Failed to remove Unraid license keys"
exit 1
}
echo "Removed Unraid license keys"
fi
ssh "root@$REMOTE_HOST" "rm -f /boot/config/passwd /boot/config/shadow /boot/config/super.dat" || {
echo "Error: Failed to remove Unraid password file"
exit 1
}
echo "Removed Unraid password file"
fi
# Execute the rsync command and capture its output
RSYNC_OUTPUT=$(rsync -av -e ssh "$LOCAL_DIRECTORY" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" 2>&1)
RSYNC_OUTPUT=$(rsync -av --no-owner --no-group --no-perms -e ssh "$LOCAL_DIRECTORY" "root@$REMOTE_HOST:$REMOTE_PATH" 2>&1)
RSYNC_EXIT_CODE=$?
# Output the rsync command's output