Files
api/plugin/plugins/dynamix.unraid.net.plg

546 lines
21 KiB
XML
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version='1.0' standalone='yes'?>
<!DOCTYPE PLUGIN [
<!ENTITY name "dynamix.unraid.net">
<!ENTITY launch "Connect">
<!ENTITY author "limetech">
<!ENTITY version "">
<!ENTITY plugin_url "">
<!ENTITY source "/boot/config/plugins/dynamix.my.servers/&txz_name;">
<!ENTITY txz_sha256 "">
<!ENTITY txz_url "">
<!ENTITY txz_name "">
<!ENTITY arch "x86_64">
<!ENTITY build "1">
<!ENTITY tag "">
<!ENTITY api_version "">
]>
<!-- Plugin min version is lower than the actual min version of Connect (6.12.0) to facilitate cleanup on newly unsupported versions. -->
<PLUGIN name="&name;" author="&author;" version="&version;" pluginURL="&plugin_url;"
launch="&launch;" min="6.9.0-rc1" icon="globe">
<CHANGES>
##a long time ago in a galaxy far far away
- initial release
</CHANGES>
<!-- Check disk space before installation -->
<FILE Run="/bin/bash" Method="install">
<INLINE>
<![CDATA[
# Check available disk space on /usr
echo -n "Checking disk space on /usr... "
FREE_SPACE=$(df -m /usr | awk 'NR==2 {print $4}')
if [ -z "$FREE_SPACE" ]; then
echo "⚠️ Error: Unable to determine free space on /usr"
exit 1
fi
if [ "$FREE_SPACE" -lt 300 ]; then
echo "⚠️ Error: Insufficient disk space on /usr. Need at least 300MB free, only ${FREE_SPACE}MB available"
exit 1
fi
echo "ok. (${FREE_SPACE}MB free)"
exit 0
]]>
</INLINE>
</FILE>
<!-- download main txz -->
<FILE Name="&source;">
<URL>&txz_url;</URL>
<SHA256>&txz_sha256;</SHA256>
</FILE>
<!-- Check for compatible Unraid version -->
<FILE Run="/usr/bin/php" Method="install">
<INLINE>
<![CDATA[
<?php
// Check Unraid version
$version = @parse_ini_file('/etc/unraid-version', true)['version'];
// Check if this is a recommended version
// - Should be 6.12.15 or higher
// - Should not be a 6.12.15 beta/rc version
$is_stable_6_12_or_higher = version_compare($version, '6.12.15', '>=') && !preg_match('/^6\\.12\\.15-/', $version);
if ($is_stable_6_12_or_higher) {
echo "Running on supported version {$version}\n";
exit(0);
}
echo "Warning: Unsupported Unraid version {$version}. This plugin requires Unraid 6.12.15 or higher.\n";
echo "The plugin may not function correctly on this system. It may stop working entirely in the future.\n";
echo "⚠️ Please uninstall this plugin or upgrade to a newer version of Unraid to enjoy Unraid Connect\n";
// early escape handled via unraid_connect_cleanup_for_unsupported_os_versions step
exit(0);
]]>
</INLINE>
</FILE>
<!-- cleanup script for Unraid 6.12.0 and earlier. when run, it will exit the plugin install with an error status. -->
<!-- See the version of dynamix.unraid.net.plg in commit a240a031a for the original implementation of this code. -->
<FILE Name="/tmp/unraid_connect_cleanup_for_unsupported_os_versions.sh" Run="/bin/bash" Method="install" Max="6.12.0">
<INLINE>
<![CDATA[
# Inlined copy of perform_connect_cleanup from
# /usr/local/share/dynamix.unraid.net/install/scripts/cleanup.sh
# to avoid the need to decompress the plugin tarball just to run the cleanup script
# Handle flash backup deactivation and Connect signout
perform_connect_cleanup() {
printf "\n**********************************\n"
printf "🧹 CLEANING UP - may take a minute\n"
printf "**********************************\n"
# Handle git-based flash backups
if [ -f "/boot/.git" ]; then
if [ -f "/etc/rc.d/rc.flash_backup" ]; then
printf "\nStopping flash backup service. Please wait...\n"
/etc/rc.d/rc.flash_backup stop >/dev/null 2>&1
fi
if [ -f "/usr/local/emhttp/plugins/dynamix.my.servers/include/UpdateFlashBackup.php" ]; then
printf "\nDeactivating flash backup. Please wait...\n"
/usr/bin/php /usr/local/emhttp/plugins/dynamix.my.servers/include/UpdateFlashBackup.php deactivate
fi
fi
# Check if connect.json or myservers.cfg exists
if [ -f "/boot/config/plugins/dynamix.my.servers/configs/connect.json" ] || [ -f "/boot/config/plugins/dynamix.my.servers/myservers.cfg" ]; then
# Stop unraid-api
printf "\nStopping unraid-api. Please wait...\n"
if [ -f "/etc/rc.d/rc.unraid-api" ]; then
/etc/rc.d/rc.unraid-api stop 2>&1
elif command -v unraid-api >/dev/null 2>&1; then
unraid-api stop 2>&1
else
echo "⚠️ Warning: Neither /etc/rc.d/rc.unraid-api nor unraid-api command found"
fi
# Sign out of Unraid Connect (we'll use curl directly from shell)
# We need to extract the username from connect.json or myservers.cfg and the registration key
has_username=false
# Check connect.json first (newer format)
if [ -f "/boot/config/plugins/dynamix.my.servers/configs/connect.json" ] && command -v jq >/dev/null 2>&1; then
username=$(jq -r '.username' "/boot/config/plugins/dynamix.my.servers/configs/connect.json" 2>/dev/null)
if [ -n "$username" ] && [ "$username" != "null" ]; then
has_username=true
fi
fi
# Fallback to myservers.cfg (legacy format)
if [ "$has_username" = false ] && [ -f "/boot/config/plugins/dynamix.my.servers/myservers.cfg" ]; then
if grep -q 'username' "/boot/config/plugins/dynamix.my.servers/myservers.cfg"; then
has_username=true
fi
fi
if [ "$has_username" = true ]; then
printf "\nSigning out of Unraid Connect\n"
# Check if regFILE exists in var.ini
if [ -f "/var/local/emhttp/var.ini" ]; then
regfile=$(grep "regFILE" "/var/local/emhttp/var.ini" | cut -d= -f2)
if [ -n "$regfile" ] && [ -f "$regfile" ]; then
# Base64 encode the key file and send to server
encoded_key=$(base64 "$regfile" | tr -d '\n')
if [ -n "$encoded_key" ]; then
curl -s -X POST "https://keys.lime-technology.com/account/server/unregister" \
-d "keyfile=$encoded_key" >/dev/null 2>&1
fi
fi
fi
fi
# Remove config files
rm -f /boot/config/plugins/dynamix.my.servers/myservers.cfg
rm -f /boot/config/plugins/dynamix.my.servers/configs/connect.json
# Reload nginx to disable Remote Access
printf "\n⚠ Reloading Web Server. If this window stops updating for two minutes please close it.\n"
/etc/rc.d/rc.nginx reload >/dev/null 2>&1
fi
}
perform_connect_cleanup
echo "Done. Please uninstall the Connect plugin to complete the cleanup."
# Exit with error to clarify that further user action--either uninstalling the plugin or upgrading to a newer version of Unraid--is required.
exit 1;
]]>
</INLINE>
</FILE>
<!-- Backup files before installation -->
<FILE Run="/bin/bash" Method="install">
<INLINE>
<![CDATA[
echo "Backing up original files..."
# Define files to backup in a shell variable
FILES_TO_BACKUP=(
"/usr/local/emhttp/plugins/dynamix/DisplaySettings.page"
"/usr/local/emhttp/plugins/dynamix/Registration.page"
"/usr/local/emhttp/plugins/dynamix/include/DefaultPageLayout.php"
"/usr/local/emhttp/plugins/dynamix/include/ProvisionCert.php"
"/usr/local/emhttp/plugins/dynamix/include/UpdateDNS.php"
"/usr/local/emhttp/plugins/dynamix/include/ReplaceKey.php"
"/usr/local/emhttp/plugins/dynamix/include/Wrappers.php"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/Downgrade.page"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/Update.page"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/include/ShowChanges.php"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/scripts/showchanges"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/scripts/unraidcheck"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/include/UnraidCheck.php"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/include/UnraidCheckExec.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/Connect.page"
"/usr/local/emhttp/plugins/dynamix.my.servers/MyServers.page"
"/usr/local/emhttp/plugins/dynamix.my.servers/Registration.page"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/myservers1.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/myservers2.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/state.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/data/server-state.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/reboot-details.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/translations.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/web-components-extractor.php"
"/usr/local/emhttp/update.htm"
"/usr/local/emhttp/logging.htm"
"/etc/nginx/nginx.conf"
"/etc/rc.d/rc.nginx"
"/usr/share/mozilla/firefox/9n35r0i1.default/user.js"
)
# Backup each file if it exists and doesn't already have a backup
for FILE in "${FILES_TO_BACKUP[@]}"; do
if [ -f "$FILE" ] && [ ! -f "$FILE-" ]; then
cp -p "$FILE" "$FILE-"
echo "Backed up: $FILE"
fi
done
# Handle the unraid-components directory
DIR=/usr/local/emhttp/plugins/dynamix.my.servers/unraid-components
if [ -d "$DIR" ] && [ ! -d "$DIR-" ]; then
mv "$DIR" "$DIR-"
echo "Moved directory: $DIR to $DIR-"
fi
echo "Backup complete."
exit 0
]]>
</INLINE>
</FILE>
<FILE Run="/bin/bash" Method="install">
<INLINE>
<![CDATA[
echo "Patching header logo if necessary..."
# We do this here instead of via API FileModification to avoid undesirable
# rollback when the API is stopped.
#
# This is necessary on < 7.2 because the unraid-header-os-version web component
# that ships with the base OS only displayes the version, not the logo as well.
#
# Rolling back in this case (i.e when stopping the API) yields a duplicate logo
# that blocks interaction with the navigation menu.
# Remove the old header logo from DefaultPageLayout.php if present
if [ -f "/usr/local/emhttp/plugins/dynamix/include/DefaultPageLayout.php" ]; then
sed -i 's|<a href="https://unraid.net" target="_blank"><?readfile("$docroot/webGui/images/UN-logotype-gradient.svg")?></a>||g' "/usr/local/emhttp/plugins/dynamix/include/DefaultPageLayout.php"
# Add unraid-modals element if not already present
if ! grep -q '<unraid-modals>' "/usr/local/emhttp/plugins/dynamix/include/DefaultPageLayout.php"; then
sed -i 's|<body>|<body>\n<unraid-modals></unraid-modals>|' "/usr/local/emhttp/plugins/dynamix/include/DefaultPageLayout.php"
fi
fi
]]>
</INLINE>
</FILE>
<FILE Run="/bin/bash" Method="remove">
<INLINE>
MAINNAME="&name;"
<![CDATA[
echo "Removing Plugin"
# Check Unraid version
UNRAID_VERSION=""
is_7_2_or_higher=false
# Check if version file exists and is readable
if [ -f "/etc/unraid-version" ] && [ -r "/etc/unraid-version" ]; then
UNRAID_VERSION=$(cat /etc/unraid-version | grep "^version=" | cut -d'"' -f2 2>/dev/null)
if [ -z "$UNRAID_VERSION" ]; then
echo "Warning: Unable to parse version from /etc/unraid-version"
echo "Using safe removal method (plugin file removal + reboot)"
is_7_2_or_higher=true # Default to safe method
else
# Check if this is Unraid 7.2 or higher (including RCs and prereleases)
if [[ "$UNRAID_VERSION" =~ ^7\.([2-9]|[1-9][0-9]+)\. ]] || [[ "$UNRAID_VERSION" =~ ^([8-9]|[1-9][0-9]+)\. ]]; then
is_7_2_or_higher=true
fi
fi
else
echo "Warning: /etc/unraid-version file not found or not readable"
echo "Using safe removal method (plugin file removal + reboot)"
is_7_2_or_higher=true # Default to safe method
fi
if [ "$is_7_2_or_higher" = true ]; then
echo "Unraid 7.2+ detected. Using safe removal method."
if ! /etc/rc.d/rc.unraid-api plugins remove unraid-api-plugin-connect -b; then
echo "Warning: Failed to remove connect API plugin"
fi
# Send notification to user
/usr/local/emhttp/webGui/scripts/notify \
-e "Unraid Connect" \
-s "Reboot Required for Unraid Connect Removal" \
-d "Unraid Connect plugin has been marked for removal. Please reboot your server to complete the uninstallation." \
-i "warning"
# Remove the plugin file so it won't be installed on reboot
PLUGIN_FILE="/boot/config/plugins/${MAINNAME}.plg"
if [ -f "$PLUGIN_FILE" ]; then
echo "Removing plugin file: $PLUGIN_FILE"
rm -f "$PLUGIN_FILE"
fi
echo "Plugin marked for removal. Reboot required to complete uninstallation."
else
# Original removal method for older versions
# Find any installed dynamix.unraid.net package
pkg_installed=$(ls -1 /var/log/packages/dynamix.unraid.net* 2>/dev/null | head -1)
if [ -n "$pkg_installed" ]; then
pkg_basename=$(basename "$pkg_installed")
echo "Removing package: $pkg_basename"
removepkg --terse "$pkg_basename"
else
echo "No dynamix.unraid.net package found. Trying with basic package name."
removepkg --terse "${MAINNAME}"
fi
fi
# File restoration function
echo "Restoring files..."
# Define files to restore in a shell variable - must match backup list
FILES_TO_RESTORE=(
"/usr/local/emhttp/plugins/dynamix/DisplaySettings.page"
"/usr/local/emhttp/plugins/dynamix/Registration.page"
"/usr/local/emhttp/plugins/dynamix/include/DefaultPageLayout.php"
"/usr/local/emhttp/plugins/dynamix/include/ProvisionCert.php"
"/usr/local/emhttp/plugins/dynamix/include/UpdateDNS.php"
"/usr/local/emhttp/plugins/dynamix/include/ReplaceKey.php"
"/usr/local/emhttp/plugins/dynamix/include/Wrappers.php"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/Downgrade.page"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/Update.page"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/include/ShowChanges.php"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/scripts/showchanges"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/scripts/unraidcheck"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/include/UnraidCheck.php"
"/usr/local/emhttp/plugins/dynamix.plugin.manager/include/UnraidCheckExec.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/Connect.page"
"/usr/local/emhttp/plugins/dynamix.my.servers/MyServers.page"
"/usr/local/emhttp/plugins/dynamix.my.servers/Registration.page"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/myservers1.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/myservers2.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/state.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/data/server-state.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/reboot-details.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/translations.php"
"/usr/local/emhttp/plugins/dynamix.my.servers/include/web-components-extractor.php"
"/usr/local/emhttp/update.htm"
"/usr/local/emhttp/logging.htm"
"/etc/nginx/nginx.conf"
"/etc/rc.d/rc.nginx"
"/usr/share/mozilla/firefox/9n35r0i1.default/user.js"
)
# Restore each file if backup exists
for FILE in "${FILES_TO_RESTORE[@]}"; do
[ -f "$FILE-" ] && mv -f "$FILE-" "$FILE"
done
# Restore CSS files from backup
echo "Restoring original CSS files..."
CSS_DIR="/usr/local/emhttp/plugins/dynamix/styles"
BACKUP_DIR="$CSS_DIR/.unraid-api-backup"
if [ -d "$BACKUP_DIR" ]; then
for backup_file in "$BACKUP_DIR"/*.css; do
if [ -f "$backup_file" ]; then
filename=$(basename "$backup_file")
original_file="$CSS_DIR/$filename"
echo " Restoring $filename..."
cp "$backup_file" "$original_file"
fi
done
# Remove backup directory after restoration
rm -rf "$BACKUP_DIR"
echo "CSS restoration complete."
else
echo "No CSS backup found, skipping restoration."
fi
# Handle the unraid-components directory
DIR=/usr/local/emhttp/plugins/dynamix.my.servers/unraid-components
# Remove the archive's contents before restoring
if [ -d "$DIR" ]; then
rm -rf "$DIR"
fi
if [ -d "$DIR-" ]; then
mv "$DIR-" "$DIR"
echo "Restored directory: $DIR- to $DIR"
fi
]]>
</INLINE>
</FILE>
<!-- install api package and all necessary files -->
<FILE Run="/bin/bash" Method="install">
<INLINE>
TAG="&tag;"
PKG_FILE="&source;" # Full path to the package file including .txz extension
PKG_URL="&txz_url;" # URL where package was downloaded from
PKG_NAME="&txz_name;" # Name of the package file
<![CDATA[
# Install the Slackware package
echo "Installing package..."
# Clean up any old package txz files if they don't match our current version
for txz_file in /boot/config/plugins/dynamix.my.servers/dynamix.unraid.net-*.txz; do
if [ -f "$txz_file" ] && [ "$txz_file" != "${PKG_FILE}" ]; then
echo "Removing old package file: $txz_file"
rm -f "$txz_file"
fi
done
# Remove existing node_modules directory
echo "Cleaning up existing node_modules directory..."
if [ -d "/usr/local/unraid-api/node_modules" ]; then
echo "Removing: /usr/local/unraid-api/node_modules"
rm -rf "/usr/local/unraid-api/node_modules"
fi
# Clear existing unraid-components directory contents to ensure clean installation
echo "Cleaning up existing unraid-components directory..."
DIR="/usr/local/emhttp/plugins/dynamix.my.servers/unraid-components"
if [ -d "$DIR" ]; then
echo "Clearing contents of: $DIR"
rm -rf "$DIR"/*
fi
# Install the package using the explicit file path
upgradepkg --install-new --reinstall "${PKG_FILE}"
if [ $? -ne 0 ]; then
echo "⚠️ Package installation failed"
exit 1
fi
if [[ -n "$TAG" && "$TAG" != "" ]]; then
printf -v sedcmd 's@^\*\*Unraid Connect\*\*@**Unraid Connect (%s)**@' "$TAG"
sed -i "${sedcmd}" "/usr/local/emhttp/plugins/dynamix.unraid.net/README.md"
fi
exit 0
]]>
</INLINE>
</FILE>
<!-- port of the old doinst.sh script -->
<FILE Run="/bin/bash" Method="install">
<INLINE>
<![CDATA[
SCRIPTS_DIR="/usr/local/share/dynamix.unraid.net/install/scripts"
# Log file for debugging
mkdir -p "/var/log/unraid-api"
echo "Starting Unraid Connect installation..."
# Move settings on flash drive
CFG_OLD=/boot/config/plugins/Unraid.net
CFG_NEW=/boot/config/plugins/dynamix.my.servers
[ -d "$CFG_OLD" ] && [ ! -d "$CFG_NEW" ] && mv "$CFG_OLD" "$CFG_NEW"
# Setup the API (but don't start it yet)
if [ -x "$SCRIPTS_DIR/setup_api.sh" ]; then
echo "Setting up Unraid API..."
echo "Running setup_api.sh"
# Run and show output to user
"$SCRIPTS_DIR/setup_api.sh"
else
echo "ERROR: setup_api.sh not found or not executable"
echo "ERROR: setup_api.sh not found or not executable"
fi
# Run post-installation verification
if [ -x "$SCRIPTS_DIR/verify_install.sh" ]; then
echo "Running post-installation verification..."
echo "Running verify_install.sh"
# Run and show output to user
"$SCRIPTS_DIR/verify_install.sh"
else
echo "ERROR: verify_install.sh not found or not executable"
echo "ERROR: verify_install.sh not found or not executable"
fi
echo "Installation completed at $(date)"
]]>
</INLINE>
</FILE>
<!-- start the unraid api service -->
<FILE Run="/bin/bash" Method="install">
<INLINE>
<![CDATA[
# Clean up any old node_modules archives (on the boot drive) that don't match our current version
#
# Must run after package installation because the package provides an update api config file,
# which determines the current API version and vendor archive to keep.
/etc/rc.d/rc.unraid-api cleanup-dependencies
echo "Starting Unraid API service"
echo "DEBUG: Checking PATH: $PATH"
echo "DEBUG: Checking if unraid-api files exist:"
ls -la /usr/local/unraid-api/dist/
echo "DEBUG: Checking symlink:"
ls -la /usr/local/bin/unraid-api
echo "DEBUG: Checking Node.js version:"
node --version
echo "DEBUG: Checking if cli.js is executable:"
ls -la /usr/local/unraid-api/dist/cli.js
echo "DEBUG: Attempting to run unraid-api directly:"
/usr/local/unraid-api/dist/cli.js version || echo "Direct execution failed"
echo "If no additional messages appear within 30 seconds, it is safe to refresh the page."
/etc/rc.d/rc.unraid-api plugins add unraid-api-plugin-connect -b --no-restart
/etc/rc.d/rc.unraid-api start
echo "Unraid API service started"
echo "✅ Installation is complete, it is safe to close this window"
echo
exit 0
]]>
</INLINE>
</FILE>
<!-- uninstall cleanup message -->
<FILE Run="/bin/bash" Method="remove">
<INLINE>
<![CDATA[
echo
echo "✅ Uninstall is complete, it is safe to close this window"
echo
exit 0
]]>
</INLINE>
</FILE>
</PLUGIN>