OLS 1.8.5+ and LSWS 6.3.4: LiteSpeed repo, version check, LSWS fallback and sed

- Install: add LiteSpeed repo (repo.litespeed.sh), install openlitespeed; keep official binary if >= 1.8.5, else optional custom binary overlay
- Upgrade: add repo, upgrade openlitespeed package; only run installCustomOLSBinaries if version < 1.8.5
- LSWS: fallback to 6.3.4 when API empty in cyberpanel_upgrade.sh and venvsetup.sh; sed lsws-6.0 and lsws-6.3.4 to latest stable
- plogical/upgrade: add_litespeed_repo(), get_installed_ols_version(); install.py: add_litespeed_repo(), get_installed_ols_version()
This commit is contained in:
master3395
2026-02-03 20:45:55 +01:00
parent 1685c79139
commit bbe91c34a4
5 changed files with 168 additions and 11 deletions

View File

@@ -72,6 +72,10 @@ LSWS_Latest_URL="https://cyberpanel.sh/update.litespeedtech.com/ws/latest.php"
LSWS_Tmp=$(curl --silent --max-time 30 -4 "$LSWS_Latest_URL")
LSWS_Stable_Line=$(echo "$LSWS_Tmp" | grep "LSWS_STABLE")
LSWS_Stable_Version=$(expr "$LSWS_Stable_Line" : '.*LSWS_STABLE=\(.*\) BUILD .*')
# Fallback to LSWS 6.3.4 (Stable) if fetch failed or empty
if [ -z "$LSWS_Stable_Version" ]; then
LSWS_Stable_Version="6.3.4"
fi
#grab the LSWS latest stable version.
Debug_Log2 "Starting Upgrade...1"
@@ -1285,6 +1289,8 @@ Post_Upgrade_System_Tweak() {
sed -i "s|lsws-5.3.8|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i "s|lsws-5.4.2|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i "s|lsws-5.3.5|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i "s|lsws-6.0|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i "s|lsws-6.3.4|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
if [[ "$Server_Country" = "CN" ]] ; then
sed -i 's|https://www.litespeedtech.com/|https://cyberpanel.sh/www.litespeedtech.com/|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py

View File

@@ -78,6 +78,47 @@ class preFlightsChecks:
def is_debian_family(self):
"""Check if distro is Ubuntu or Debian 12"""
return self.distro in [ubuntu, debian12]
def add_litespeed_repo(self):
"""Add LiteSpeed repository so OpenLiteSpeed 1.8.5+ is available (repo.litespeed.sh)"""
try:
self.stdOut("Adding LiteSpeed repository for OpenLiteSpeed 1.8.5+...", 1)
cmd = 'wget -q -O - https://repo.litespeed.sh | bash'
ret = subprocess.run(cmd, shell=True, timeout=120, capture_output=True, universal_newlines=True)
if ret.returncode != 0 and ret.stderr:
self.stdOut(f"LiteSpeed repo script warning: {ret.stderr[:200]}", 1)
if ret.returncode == 0:
self.stdOut("LiteSpeed repository added", 1)
return True
# Non-fatal: distro openlitespeed may still be used
self.stdOut("Could not add LiteSpeed repo; using distro package", 1)
return False
except Exception as e:
self.stdOut(f"LiteSpeed repo add failed: {e}", 1)
return False
def get_installed_ols_version(self):
"""Return installed OpenLiteSpeed version as (major, minor, patch) or None"""
try:
for binary in ('/usr/local/lsws/bin/lshttpd', '/usr/local/lsws/bin/openlitespeed'):
if not os.path.exists(binary):
continue
result = subprocess.run(
[binary, '-v'],
capture_output=True,
timeout=5,
universal_newlines=True,
env=dict(os.environ, PATH=os.environ.get('PATH', '/usr/bin:/bin'))
)
out = (result.stdout or '') + (result.stderr or '')
# e.g. "OpenLiteSpeed/1.8.5" or "1.8.5"
import re
m = re.search(r'(\d+)\.(\d+)\.(\d+)', out)
if m:
return (int(m.group(1)), int(m.group(2)), int(m.group(3)))
return None
except Exception:
return None
def detect_os_info(self):
"""Detect OS information for all supported platforms"""
@@ -1172,7 +1213,7 @@ class preFlightsChecks:
platform = self.detectPlatform()
self.stdOut(f"Detected platform: {platform}", 1)
# Platform-specific URLs and checksums (OpenLiteSpeed v1.8.4.1 - v2.0.5 Static Build)
# Platform-specific URLs and checksums (OpenLiteSpeed 1.8.5+ preferred from repo; fallback static build)
# Module Build Date: December 28, 2025 - v2.2.0 Brute Force with Progressive Throttle
BINARY_CONFIGS = {
'rhel8': {
@@ -1381,16 +1422,20 @@ module cyberpanel_ols {
self.stdOut("Installing LiteSpeed Web Server...", 1)
if ent == 0:
# Install OpenLiteSpeed
self.stdOut("Installing OpenLiteSpeed...", 1)
if self.distro == ubuntu:
# Install OpenLiteSpeed 1.8.5+ from LiteSpeed repo when possible
self.stdOut("Installing OpenLiteSpeed (target 1.8.5+)...", 1)
self.add_litespeed_repo()
if self.distro == ubuntu or self.distro == debian12:
self.install_package('openlitespeed')
else:
self.install_package('openlitespeed')
# Install custom binaries with PHP config support
# This replaces the standard binary with enhanced version
self.installCustomOLSBinaries()
# Use official OLS 1.8.5+ when available; only overlay custom binary if older
ols_ver = self.get_installed_ols_version()
if ols_ver and ols_ver >= (1, 8, 5):
self.stdOut("Using official OpenLiteSpeed 1.8.5+ (no custom binary overlay)", 1)
else:
# Install custom binaries with PHP config support (for pre-1.8.5 or when repo not used)
self.installCustomOLSBinaries()
# Configure OpenLiteSpeed
self.fix_ols_configs()

View File

@@ -116,6 +116,10 @@ LATEST_URL="https://update.litespeedtech.com/ws/latest.php"
curl --silent -o /tmp/lsws_latest $LATEST_URL 2>/dev/null
LSWS_STABLE_LINE=`cat /tmp/lsws_latest | grep LSWS_STABLE`
LSWS_STABLE_VER=`expr "$LSWS_STABLE_LINE" : '.*LSWS_STABLE=\(.*\) BUILD .*'`
# Fallback to LSWS 6.3.4 (Stable) if fetch failed or empty
if [ -z "$LSWS_STABLE_VER" ]; then
LSWS_STABLE_VER="6.3.4"
fi
if [[ $SERVER_COUNTRY == "CN" ]] ; then
#line1="$(grep -n "github.com/usmannasir/cyberpanel" install.py | head -n 1 | cut -d: -f1)"
@@ -890,6 +894,8 @@ fi
sed -i 's|lsws-5.4.2|lsws-'$LSWS_STABLE_VER'|g' installCyberPanel.py
sed -i 's|lsws-5.3.5|lsws-'$LSWS_STABLE_VER'|g' installCyberPanel.py
sed -i 's|lsws-6.0|lsws-'$LSWS_STABLE_VER'|g' installCyberPanel.py
sed -i 's|lsws-6.3.4|lsws-'$LSWS_STABLE_VER'|g' installCyberPanel.py
#this sed must be done after license validation
echo -e "Preparing..."
@@ -1229,6 +1235,8 @@ fi
sed -i 's|lsws-5.3.8|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|lsws-5.4.2|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|lsws-5.3.5|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|lsws-6.0|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|lsws-6.3.4|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
if [[ $SILENT != "ON" ]] ; then
printf "%s" "Would you like to restart your server now? [y/N]: "

View File

@@ -500,6 +500,33 @@ class Upgrade:
except:
return False
@staticmethod
def add_litespeed_repo():
"""Add LiteSpeed repository so OpenLiteSpeed 1.8.5+ is available (repo.litespeed.sh)."""
return Upgrade.executioner_silent('wget -q -O - https://repo.litespeed.sh | bash', 'LiteSpeed repo', 0, shell=True)
@staticmethod
def get_installed_ols_version():
"""Return installed OpenLiteSpeed version as (major, minor, patch) or None."""
try:
for binary in ('/usr/local/lsws/bin/lshttpd', '/usr/local/lsws/bin/openlitespeed'):
if not os.path.exists(binary):
continue
result = subprocess.run(
[binary, '-v'],
capture_output=True,
timeout=5,
universal_newlines=True,
env=dict(os.environ, PATH=os.environ.get('PATH', '/usr/bin:/bin'))
)
out = (result.stdout or '') + (result.stderr or '')
m = re.search(r'(\d+)\.(\d+)\.(\d+)', out)
if m:
return (int(m.group(1)), int(m.group(2)), int(m.group(3)))
return None
except Exception:
return None
@staticmethod
def updateRepoURL():
command = "sed -i 's|sgp.cyberpanel.sh|cdn.cyberpanel.sh|g' /etc/yum.repos.d/MariaDB.repo"
@@ -939,7 +966,7 @@ class Upgrade:
platform = Upgrade.detectPlatform()
Upgrade.stdOut(f"Detected platform: {platform}", 0)
# Platform-specific URLs and checksums (OpenLiteSpeed v1.8.4.1 with PHPConfig + Header unset fix + Static Linking)
# Platform-specific URLs and checksums (OpenLiteSpeed 1.8.5+ preferred from repo; fallback static build)
# Module Build Date: December 28, 2025 - v2.2.0 Brute Force with Progressive Throttle
BINARY_CONFIGS = {
'rhel8': {
@@ -5684,9 +5711,18 @@ slowlog = /var/log/php{version}-fpm-slow.log
Upgrade.setupPHPSymlink()
Upgrade.setupComposer()
# Install custom OpenLiteSpeed binaries if OLS is installed
# OpenLiteSpeed: ensure 1.8.5+ (add LiteSpeed repo, upgrade package); only overlay custom binary if still < 1.8.5
if os.path.exists('/usr/local/lsws/bin/openlitespeed'):
Upgrade.installCustomOLSBinaries()
Upgrade.add_litespeed_repo()
if os.path.exists(Upgrade.CentOSPath) or os.path.exists(Upgrade.openEulerPath):
Upgrade.executioner('dnf install -y openlitespeed || yum install -y openlitespeed', 'Upgrade OpenLiteSpeed package', 0)
else:
Upgrade.executioner('DEBIAN_FRONTEND=noninteractive apt-get -y install --only-upgrade openlitespeed 2>/dev/null || DEBIAN_FRONTEND=noninteractive apt-get -y install openlitespeed', 'Upgrade OpenLiteSpeed package', 0, shell=True)
ols_ver = Upgrade.get_installed_ols_version()
if ols_ver and ols_ver >= (1, 8, 5):
Upgrade.stdOut("OpenLiteSpeed 1.8.5+ detected; keeping official binary (no custom overlay).")
else:
Upgrade.installCustomOLSBinaries()
##

View File

@@ -0,0 +1,62 @@
# OpenLiteSpeed and LSWS Version Used by CyberPanel (Install & Upgrade)
**Updated:** OLS target 1.8.5+ (LiteSpeed repo); LSWS fallback 6.3.4.
## Summary
- **Install:** OpenLiteSpeed is installed via the **OS package manager** (no fixed version in code), then optionally replaced by CyberPanels **custom static binary** (based on **OpenLiteSpeed 1.8.5 v2.0.5**).
- **Upgrade:** The CyberPanel **upgrade script does not change the OpenLiteSpeed version**. It only updates **LiteSpeed Enterprise** version references. During upgrade, **custom OLS binaries** (same 1.8.5-based build) are (re)installed if OLS is present.
---
## Install
1. **Package install**
- `install/install.py``installLiteSpeed(ent=0)``install_package('openlitespeed')`.
- So the **base** install is whatever **openlitespeed** version the distro provides (yum/dnf or apt). There is **no fixed OLS version** in the installer for this step.
2. **Custom binary (optional)**
- Right after that, `installCustomOLSBinaries()` runs (in both `install/install.py` and `plogical/upgrade.py`).
- It downloads a **static binary** from `https://cyberpanel.net/` (e.g. `openlitespeed-phpconfig-x86_64-rhel8-static`) and replaces `/usr/local/lsws/bin/openlitespeed`.
- Comments in code state this is **OpenLiteSpeed 1.8.5** (upgrade.py) or **1.8.5 v2.0.5** (install.py). The download URLs do not include a version; the binary is a fixed build hosted by CyberPanel.
So on **install**, you get either:
- **Distro OLS** (version = whatever the OS repo has), or
- **CyberPanel custom OLS** (based on **1.8.5 / v2.0.5** static build) if the custom binary install succeeds.
---
## Upgrade
1. **cyberpanel_upgrade.sh**
- Fetches **LiteSpeed Enterprise** latest version from:
- `LSWS_Latest_URL="https://cyberpanel.sh/update.litespeedtech.com/ws/latest.php"`
- Parses `LSWS_Stable_Version` from the `LSWS_STABLE` line.
- Uses `LSWS_Stable_Version` only to **sed**-replace hardcoded Enterprise version strings (e.g. `lsws-5.3.8`, `lsws-5.4.2`, `lsws-5.3.5`) in `/usr/local/CyberCP/serverStatus/serverStatusUtil.py`.
- So the **upgrade script does not install or upgrade OpenLiteSpeed**; it only updates **Enterprise** version references.
2. **plogical/upgrade.py**
- During upgrade, if OpenLiteSpeed is present (`/usr/local/lsws/bin/openlitespeed` exists), it runs:
- `Upgrade.installCustomOLSBinaries()`
- That (re)installs the **same custom static OLS binary** (1.8.5-based, from cyberpanel.net). So **upgrade** does not pull a “new” OLS version from upstream; it only refreshes CyberPanels custom binary if OLS is in use.
---
## References (in repo)
| What | Where |
|------|--------|
| OLS package install (no version) | `install/install.py``install_package('openlitespeed')` in `installLiteSpeed()` |
| Custom OLS binary (1.8.5 / 1.8.5v2.0.5) | `install/install.py` and `plogical/upgrade.py``installCustomOLSBinaries()` and `BINARY_CONFIGS` comments |
| LSWS version used in upgrade (Enterprise only) | `cyberpanel_upgrade.sh``LSWS_Latest_URL`, `LSWS_Stable_Version`, and sed to `serverStatusUtil.py` |
| Custom OLS on upgrade | `plogical/upgrade.py``if os.path.exists('/usr/local/lsws/bin/openlitespeed'): Upgrade.installCustomOLSBinaries()` |
---
## Short answers
- **What OpenLiteSpeed version does install use?**
Package: **distro default**. If custom binary is used: **OpenLiteSpeed 1.8.5 (or 1.8.5v2.0.5)** static build from cyberpanel.net.
- **What OpenLiteSpeed version does upgrade use?**
Upgrade does **not** change OLS version from upstream. It only (re)installs the **same custom 1.8.5-based** binary when OLS is present. **LiteSpeed Enterprise** version is the one fetched from `cyberpanel.sh/update.litespeedtech.com/ws/latest.php` and written into `serverStatusUtil.py`.