Files
api/plugin/source/dynamix.unraid.net/etc/rc.d/rc.unraid-api
google-labs-jules[bot] 6947b5d4af fix(rc.unraid-api): remove profile sourcing (#1622)
This change removes the line that sources `/etc/profile` from the
`rc.unraid-api` script. This is done to prevent unexpected side effects
and improve the script's isolation.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-08-26 13:11:16 -04:00

153 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# unraid-api-handler
unraid_binary_path="/usr/local/bin/unraid-api"
api_base_dir="/usr/local/unraid-api"
scripts_dir="/usr/local/share/dynamix.unraid.net/scripts"
# Ensure script permissions
if [ -d "$scripts_dir" ]; then
chmod +x "$scripts_dir"/*.sh 2>/dev/null
fi
# Placeholder functions for plugin installation/uninstallation
install() {
true
}
uninstall() {
true
}
# Service control functions
start() {
echo "Starting Unraid API service..."
# Restore vendored API plugins if they were installed
if [ -x "$scripts_dir/dependencies.sh" ]; then
"$scripts_dir/dependencies.sh" restore || {
echo "Failed to restore API plugin dependencies! Continuing with start, but API plugins may be unavailable."
}
else
echo "Warning: dependencies.sh script not found or not executable"
fi
# Create log directory if it doesn't exist
mkdir -p /var/log/unraid-api
# Copy env file if needed
if [ -f "${api_base_dir}/.env.production" ] && [ ! -f "${api_base_dir}/.env" ]; then
cp "${api_base_dir}/.env.production" "${api_base_dir}/.env"
fi
# Start the flash backup service if available and connect plugin is enabled
if [ -x "/etc/rc.d/rc.flash_backup" ]; then
# Check if connect plugin is enabled before starting flash backup
if [ -x "$scripts_dir/api_utils.sh" ] && "$scripts_dir/api_utils.sh" is_api_plugin_enabled "unraid-api-plugin-connect"; then
echo "Starting flash backup service..."
/etc/rc.d/rc.flash_backup start
fi
fi
# Start the API service
if [ -x "${unraid_binary_path}" ]; then
"${unraid_binary_path}" start
return $?
else
echo "Error: Unraid API binary not found or not executable at ${unraid_binary_path}"
return 1
fi
}
stop() {
echo "Stopping Unraid API service..."
if [ -x "${unraid_binary_path}" ]; then
"${unraid_binary_path}" stop
return $?
else
echo "Error: Unraid API binary not found or not executable at ${unraid_binary_path}"
return 1
fi
}
restart() {
stop
sleep 2
start
}
status() {
if [ -x "${unraid_binary_path}" ]; then
"${unraid_binary_path}" status
return $?
else
echo "Error: Unraid API binary not found or not executable at ${unraid_binary_path}"
return 1
fi
}
case "$1" in
'start')
start
;;
'stop')
stop
;;
'restart' | 'reload')
restart
;;
'status')
status
;;
'install')
install "$2"
;;
'uninstall')
uninstall
;;
'ensure')
if [ -x "$scripts_dir/dependencies.sh" ]; then
# First clean up old dependencies
"$scripts_dir/dependencies.sh" cleanup
# Then ensure new dependencies are installed
"$scripts_dir/dependencies.sh" ensure "$2"
else
echo "Error: dependencies.sh script not found or not executable"
exit 1
fi
;;
'cleanup-dependencies')
if [ -x "$scripts_dir/dependencies.sh" ]; then
"$scripts_dir/dependencies.sh" cleanup
else
echo "Error: dependencies.sh script not found or not executable"
exit 1
fi
;;
'archive-dependencies')
if [ -x "$scripts_dir/dependencies.sh" ]; then
"$scripts_dir/dependencies.sh" archive
else
echo "Error: dependencies.sh script not found or not executable"
exit 1
fi
;;
'redownload-vendor-archive')
if [ -x "$scripts_dir/dependencies.sh" ]; then
if [ -n "$2" ] && [ -n "$3" ]; then
"$scripts_dir/dependencies.sh" redownload "$2" "$3"
else
echo "Usage: $0 redownload-vendor-archive <archive_path> <version>"
exit 1
fi
else
echo "Error: dependencies.sh script not found or not executable"
exit 1
fi
;;
*)
# Pass all other commands to unraid-api
"${unraid_binary_path}" "$@"
;;
esac