mirror of
https://github.com/unraid/api.git
synced 2026-04-27 18:51:05 -05:00
6cf7c88242
- Improved validation logic for mounted elements to ensure stable DOM connections and prevent manipulation issues. - Added cleanup step to clear existing unraid-components directory before installation, ensuring a clean setup. This update aims to enhance the reliability of component mounting and reduce potential UI issues.
451 lines
16 KiB
XML
Executable File
451 lines
16 KiB
XML
Executable File
<?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 name="&name;" author="&author;" version="&version;" pluginURL="&plugin_url;"
|
|
launch="&launch;" min="6.12.15" 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 supported version
|
|
// - Must be 6.12.15 or higher
|
|
// - Must 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\\.0-/', $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 will not function correctly on this system.\n";
|
|
|
|
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>
|