mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2026-02-17 12:06:47 +01:00
- Install: monolithic install script, venvsetup_modules and venvsetup_monolithic, install_modules (parse_main, menus, actions, etc.), remove legacy email-configs and php-configs from repo, add install/snappymail and Rainloop->SnappyMail migration script - CyberPanel: urls.py, cyberpanel.sh, cyberpanel_upgrade_monolithic.sh tweaks - Firewall: firewall.js and firewall.html updates - plogical: mailUtilities.py, upgrade.py; upgrade_modules 10_post_tweak.sh - pluginHolder: deploy-plugins-template.sh - to-do: docs (git conflicts, HTTP 500 recovery, phpMyAdmin, plugins, SnappyMail rename, install/upgrade OS support, security whitelist, etc.) - upgrade_modules: 02_checks_part1/part2.txt
248 lines
9.8 KiB
Bash
248 lines
9.8 KiB
Bash
#!/usr/bin/env bash
|
||
# CyberPanel install – parse_arguments, main. Sourced by cyberpanel.sh.
|
||
|
||
parse_arguments() {
|
||
while [[ $# -gt 0 ]]; do
|
||
case $1 in
|
||
-b|--branch)
|
||
if [ -n "$2" ]; then
|
||
# Convert version number to branch name if needed
|
||
if [[ "$2" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
|
||
if [[ "$2" == *"-"* ]]; then
|
||
# Already has suffix like 2.5.5-dev, add v prefix
|
||
BRANCH_NAME="v$2"
|
||
else
|
||
# Add v prefix and dev suffix for development versions
|
||
BRANCH_NAME="v$2-dev"
|
||
fi
|
||
elif [[ "$2" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
|
||
# Already has v prefix, use as is
|
||
BRANCH_NAME="$2"
|
||
else
|
||
# Assume it's already a branch name or commit hash
|
||
BRANCH_NAME="$2"
|
||
fi
|
||
shift 2
|
||
else
|
||
echo "ERROR: -b/--branch requires a version number or branch name"
|
||
echo "Example: -b 2.5.5-dev or -b v2.5.5-dev"
|
||
exit 1
|
||
fi
|
||
;;
|
||
-v|--version)
|
||
if [ -n "$2" ]; then
|
||
# Convert version number to branch name if needed
|
||
if [[ "$2" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
|
||
if [[ "$2" == *"-"* ]]; then
|
||
# Already has suffix like 2.5.5-dev, add v prefix
|
||
BRANCH_NAME="v$2"
|
||
else
|
||
# Add v prefix and dev suffix for development versions
|
||
BRANCH_NAME="v$2-dev"
|
||
fi
|
||
elif [[ "$2" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
|
||
# Already has v prefix, use as is
|
||
BRANCH_NAME="$2"
|
||
else
|
||
# Assume it's already a branch name or commit hash
|
||
BRANCH_NAME="$2"
|
||
fi
|
||
shift 2
|
||
else
|
||
echo "ERROR: -v/--version requires a version number or branch name"
|
||
echo "Example: -v 2.5.5-dev or -v v2.5.5-dev"
|
||
exit 1
|
||
fi
|
||
;;
|
||
--debug)
|
||
DEBUG_MODE=true
|
||
set -x
|
||
shift
|
||
;;
|
||
--mariadb-version)
|
||
if [ -n "$2" ] && [ "$2" = "10.11" ]; then
|
||
MARIADB_VER="10.11"
|
||
shift 2
|
||
elif [ -n "$2" ] && [ "$2" = "11.8" ]; then
|
||
MARIADB_VER="11.8"
|
||
shift 2
|
||
elif [ -n "$2" ] && [ "$2" = "12.1" ]; then
|
||
MARIADB_VER="12.1"
|
||
shift 2
|
||
else
|
||
echo "ERROR: --mariadb-version requires 10.11, 11.8 or 12.1"
|
||
exit 1
|
||
fi
|
||
;;
|
||
--auto)
|
||
AUTO_INSTALL=true
|
||
shift
|
||
;;
|
||
-h|--help)
|
||
echo "Usage: $0 [OPTIONS]"
|
||
echo "Options:"
|
||
echo " -b, --branch BRANCH Install from specific branch/commit"
|
||
echo " -v, --version VER Install specific version (auto-adds v prefix)"
|
||
echo " --mariadb-version VER MariaDB version: 10.11, 11.8 or 12.1 (asked after web server)"
|
||
echo " --debug Enable debug mode"
|
||
echo " --auto Auto mode: OpenLiteSpeed + MariaDB 11.8 unless --mariadb-version set"
|
||
echo " -h, --help Show this help message"
|
||
echo ""
|
||
echo "Examples:"
|
||
echo " $0 # Interactive installation"
|
||
echo " $0 --debug # Debug mode installation"
|
||
echo " $0 --auto # Auto installation"
|
||
echo " $0 -b v2.5.5-dev # Install development version"
|
||
echo " $0 -v 2.5.5-dev # Install version 2.5.5-dev"
|
||
echo " $0 -v 2.4.3 # Install version 2.4.3"
|
||
echo " $0 -b main # Install from main branch"
|
||
echo " $0 -b a1b2c3d4 # Install from specific commit"
|
||
echo " $0 --mariadb-version 10.11 # Use MariaDB 10.11 (same as v2.4.4 style)"
|
||
echo " $0 --mariadb-version 12.1 # Use MariaDB 12.1 (no prompt)"
|
||
echo " $0 --auto --mariadb-version 11.8 # Fully non-interactive with MariaDB 11.8"
|
||
echo ""
|
||
echo "Standard CyberPanel Installation Methods:"
|
||
echo " sh <(curl https://cyberpanel.net/install.sh)"
|
||
echo " bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/cyberpanel_upgrade.sh) -b 2.4.3"
|
||
echo " bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/cyberpanel_upgrade.sh) -b 2.5.5-dev"
|
||
exit 0
|
||
;;
|
||
*)
|
||
print_status "WARNING: Unknown option: $1"
|
||
shift
|
||
;;
|
||
esac
|
||
done
|
||
}
|
||
|
||
# Function to detect installation mode
|
||
detect_installation_mode() {
|
||
# Check if this is being called as an upgrade script
|
||
if [[ "$0" == *"cyberpanel_upgrade.sh"* ]] || [[ "$0" == *"upgrade"* ]]; then
|
||
INSTALLATION_TYPE="upgrade"
|
||
return 0
|
||
fi
|
||
|
||
# Check if this is being called as a pre-upgrade script
|
||
if [[ "$0" == *"preUpgrade.sh"* ]] || [[ "$0" == *"preupgrade"* ]]; then
|
||
INSTALLATION_TYPE="preupgrade"
|
||
return 0
|
||
fi
|
||
|
||
# Check if this is being called as a standard install script
|
||
if [[ "$0" == *"install.sh"* ]] || [[ "$0" == *"cyberpanel.sh"* ]]; then
|
||
INSTALLATION_TYPE="install"
|
||
return 0
|
||
fi
|
||
|
||
# Default to install mode
|
||
INSTALLATION_TYPE="install"
|
||
return 0
|
||
}
|
||
|
||
# Function to create standard CyberPanel aliases
|
||
create_standard_aliases() {
|
||
print_status "Creating standard CyberPanel installation aliases..."
|
||
|
||
# Create symbolic links for standard installation methods
|
||
local script_dir="/usr/local/bin"
|
||
local script_name="cyberpanel_enhanced.sh"
|
||
|
||
# Copy this script to /usr/local/bin
|
||
if cp "$0" "$script_dir/$script_name" 2>/dev/null; then
|
||
chmod +x "$script_dir/$script_name"
|
||
|
||
# Create aliases for standard CyberPanel methods
|
||
ln -sf "$script_dir/$script_name" "$script_dir/cyberpanel_upgrade.sh" 2>/dev/null || true
|
||
ln -sf "$script_dir/$script_name" "$script_dir/preUpgrade.sh" 2>/dev/null || true
|
||
ln -sf "$script_dir/$script_name" "$script_dir/install.sh" 2>/dev/null || true
|
||
|
||
print_status "✓ Standard CyberPanel aliases created"
|
||
print_status " - cyberpanel_upgrade.sh"
|
||
print_status " - preUpgrade.sh"
|
||
print_status " - install.sh"
|
||
else
|
||
print_status "WARNING: Could not create standard aliases (permission denied)"
|
||
fi
|
||
}
|
||
|
||
# Main installation function
|
||
main() {
|
||
# Initialize log directory and file
|
||
mkdir -p "/var/log/CyberPanel"
|
||
touch "/var/log/CyberPanel/install.log"
|
||
|
||
print_status "CyberPanel Enhanced Installer Starting..."
|
||
print_status "Log file: /var/log/CyberPanel/install.log"
|
||
|
||
# Detect installation mode
|
||
detect_installation_mode
|
||
|
||
# Parse command line arguments
|
||
parse_arguments "$@"
|
||
|
||
# Handle different installation modes
|
||
case "$INSTALLATION_TYPE" in
|
||
"upgrade")
|
||
print_status "Running in upgrade mode..."
|
||
if [ -n "$BRANCH_NAME" ]; then
|
||
print_status "Upgrading to version: $BRANCH_NAME"
|
||
fi
|
||
start_upgrade
|
||
;;
|
||
"preupgrade")
|
||
print_status "Running in pre-upgrade mode..."
|
||
start_preupgrade
|
||
;;
|
||
"install"|*)
|
||
if [ "$AUTO_INSTALL" = true ]; then
|
||
# Run auto mode
|
||
print_status "Starting auto mode..."
|
||
|
||
# Detect OS
|
||
if ! detect_os; then
|
||
print_status "ERROR: Failed to detect operating system"
|
||
exit 1
|
||
fi
|
||
|
||
# Install dependencies
|
||
install_dependencies
|
||
|
||
# Install CyberPanel
|
||
if ! install_cyberpanel; then
|
||
print_status "ERROR: CyberPanel installation failed"
|
||
echo ""
|
||
echo "Would you like to see troubleshooting help? (y/n) [y]: "
|
||
read -r show_help
|
||
case $show_help in
|
||
[nN]|[nN][oO])
|
||
echo "Installation failed. Check logs at /var/log/CyberPanel/"
|
||
;;
|
||
*)
|
||
show_error_help
|
||
;;
|
||
esac
|
||
exit 1
|
||
fi
|
||
|
||
# Apply fixes
|
||
apply_fixes
|
||
|
||
# Create standard aliases
|
||
create_standard_aliases
|
||
|
||
# Show status summary
|
||
show_status_summary
|
||
|
||
print_status "SUCCESS: Installation completed successfully!"
|
||
else
|
||
# Run interactive mode - ensure stdin is the terminal for prompts (e.g. when script was piped from curl)
|
||
if [ ! -t 0 ]; then
|
||
exec 0</dev/tty
|
||
fi
|
||
show_main_menu
|
||
fi
|
||
;;
|
||
esac
|
||
}
|