From ec27eef6b32ecdcce03a6644b6ebfaf2255cea95 Mon Sep 17 00:00:00 2001 From: Alexey Berezhok Date: Sat, 18 Jul 2026 11:34:35 +0300 Subject: [PATCH] Fixes --- ...nager-plugin-nginx_mod_rewrite_plugin.spec | 2 +- utils/build_mod_rewrite.py | 85 +++++++++++++++++-- 2 files changed, 81 insertions(+), 6 deletions(-) diff --git a/ispmanager-plugin-nginx_mod_rewrite_plugin.spec b/ispmanager-plugin-nginx_mod_rewrite_plugin.spec index 83f9e3d..c78420d 100644 --- a/ispmanager-plugin-nginx_mod_rewrite_plugin.spec +++ b/ispmanager-plugin-nginx_mod_rewrite_plugin.spec @@ -28,7 +28,7 @@ mkdir -p %{buildroot}/usr/local/ispmanager-mod_rewrite/patches cp payload/* %{buildroot}/usr/local/ispmanager-mod_rewrite/patches/ %triggerin -- nginx -/usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py +/usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py --nodeps %posttrans killall core diff --git a/utils/build_mod_rewrite.py b/utils/build_mod_rewrite.py index a26a94c..b6d3c5a 100644 --- a/utils/build_mod_rewrite.py +++ b/utils/build_mod_rewrite.py @@ -11,18 +11,71 @@ import shutil import subprocess import zipfile import datetime +import re + + +def _get_nginx_version(log_file): + """ + Detect nginx version from /usr/sbin/nginx -V output. + + Args: + log_file: File object to write log messages to + + Returns: + str or None: Version string (e.g., '1.30.2') if found, None otherwise + """ + nginx_binary = '/usr/sbin/nginx' + if not os.path.exists(nginx_binary): + log_file.write('Nginx binary not found at /usr/sbin/nginx, using default version detection.\n') + return None + + try: + result = subprocess.run([nginx_binary, '-V'], capture_output=True, text=True, timeout=30) + if result.returncode != 0: + log_file.write(f'Failed to run nginx -V with exit code {result.returncode}\n') + if result.stderr: + log_file.write(f'nginx stderr: {result.stderr.strip()}\n') + return None + + log_file.write(f'nginx stdout:\n{result.stderr.strip()}\n') + + # First line contains "nginx version: nginx/X.Y.Z" + first_line = result.stderr.strip().split('\n')[0] + + # Parse the version from the first line + # Expected format: "nginx version: nginx/1.30.2 ..." + match = re.search(r'nginx/(\d+\.\d+\.?\d*)', first_line) + if match: + version = match.group(1) + log_file.write(f'Detected nginx version: {version}\n') + return version + else: + log_file.write(f'Could not parse nginx version from: {first_line}\n') + return None + except subprocess.TimeoutExpired: + log_file.write('nginx -V command timed out.\n') + return None + except Exception as e: + log_file.write(f'Error running nginx -V: {e}\n') + return None def build_mod_rewrite(): """ Build and install the nginx mod_rewrite module. - + Returns: str: Error message on failure, None on success """ tmp_dir = '/tmp/nginx-mod-rewrite' log_path = '/usr/local/mgr5/var/nginx-mod-rewrite-plugin.log' + # Check for --nodeps argument - skip installdeps stage if provided + nodeps = False + args = sys.argv[1:] + if '--nodeps' in args: + nodeps = True + try: # Ensure log directory exists log_dir = os.path.dirname(log_path) @@ -66,12 +119,34 @@ def build_mod_rewrite(): log_file.write(f'Using extracted root: {extracted_root}\n') # Define the sequence of commands to run - commands = [ - ['bash', 'package_preparer.sh', 'installdeps'], - ['bash', 'package_preparer.sh', 'download', '.', 'system'], + if nodeps: + commands = [] + else: + commands = [['bash', 'package_preparer.sh', 'installdeps']] + + # Detect nginx version and decide on download target + nginx_version_to_use = '.' # Default fallback + + detected_version = _get_nginx_version(log_file) + if detected_version is not None: + nginx_version_to_use = detected_version + log_file.write(f'Using detected nginx version: {nginx_version_to_use} for download\n') + else: + log_file.write('Nginx version detection failed, using default (.).\n') + + if nginx_version_to_use == '.': + commands.extend([ + ['bash', 'package_preparer.sh', 'download', nginx_version_to_use, 'system'] + ]) + else: + commands.extend([ + ['bash', 'package_preparer.sh', 'download', nginx_version_to_use] + ]) + + commands.extend([ ['bash', 'package_preparer.sh', 'build'], ['bash', 'package_preparer.sh', 'installmod'] - ] + ]) for cmd in commands: log_file.write(f'Running command: {" ".join(cmd)}\n')