From 2fe3c0c5cbb1165492bfe4bfd089a86244353de4 Mon Sep 17 00:00:00 2001
From: Alexey Berezhok
Date: Thu, 2 Jul 2026 00:18:50 +0300
Subject: [PATCH] Update
---
...nager-plugin-nginx_mod_rewrite_plugin.spec | 7 +-
.../mgr5/addon/nginx_mod_rewrite_plugin.py | 45 +++++++-
utils/build_mod_rewrite.py | 105 ++++++++++++++++++
3 files changed, 155 insertions(+), 2 deletions(-)
create mode 100644 utils/build_mod_rewrite.py
diff --git a/ispmanager-plugin-nginx_mod_rewrite_plugin.spec b/ispmanager-plugin-nginx_mod_rewrite_plugin.spec
index a61db18..4976731 100644
--- a/ispmanager-plugin-nginx_mod_rewrite_plugin.spec
+++ b/ispmanager-plugin-nginx_mod_rewrite_plugin.spec
@@ -21,14 +21,19 @@ mkdir -p %{buildroot}/usr/local/mgr5/etc/plugins/ispmgr
mkdir -p %{buildroot}/usr/local/mgr5/addon
cp -a ispmgr/* %{buildroot}/usr/local/mgr5/etc/plugins/ispmgr/
cp -a nginx_mod_rewrite_plugin.py %{buildroot}/usr/local/mgr5/addon/
-mkdir -p %{buildroot}/usr/local/ispmanager-mod_rewrite
+mkdir -p %{buildroot}/usr/local/ispmanager-mod_rewrite/utils
wget -O %{buildroot}/usr/local/ispmanager-mod_rewrite/mod_rewrite.zip https://github.com/bayrepo/ngx_http_apache_rewrite_module/archive/refs/heads/main.zip
+cp utils/build_mod_rewrite.py %{buildroot}/usr/local/ispmanager-mod_rewrite/utils
+
+%triggerin -- nginx
+/usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py
%files
/usr/local/mgr5/etc/xml/ispmgr_mod_nginx_mod_rewrite_plugin.xml
/usr/local/mgr5/etc/plugins/ispmgr/nginx_mod_rewrite_plugin.xml
%attr(700, root, root) /usr/local/mgr5/addon/nginx_mod_rewrite_plugin.py
%attr(600, root, root) /usr/local/ispmanager-mod_rewrite/mod_rewrite.zip
+%attr(700, root, root) /usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py
%changelog
* Mon Jun 29 2026 Alexey BayRepo - 0.0.1-1
diff --git a/usr/local/mgr5/addon/nginx_mod_rewrite_plugin.py b/usr/local/mgr5/addon/nginx_mod_rewrite_plugin.py
index fbf2f0e..6b9a355 100755
--- a/usr/local/mgr5/addon/nginx_mod_rewrite_plugin.py
+++ b/usr/local/mgr5/addon/nginx_mod_rewrite_plugin.py
@@ -3,6 +3,8 @@
import os
import xml.etree.ElementTree as etree
from sys import stdin
+import subprocess
+import datetime
def CheckModuleExists():
@@ -11,8 +13,49 @@ def CheckModuleExists():
return 'mod_rewrite already installed'
return None
+def BuildModule():
+ """
+ Build and install the nginx mod_rewrite module by calling the utility script.
+
+ Returns:
+ str: Error message if the utility failed, None on success
+ """
+ utils_dir = '/usr/local/ispmanager-mod_rewrite/utils'
+ build_script = os.path.join(utils_dir, 'build_mod_rewrite.py')
+ log_path = '/usr/local/mgr5/var/nginx-mod-rewrite-plugin.log'
+
+ try:
+ with open(log_path, 'a') as log_file:
+ log_file.write(f'=== Starting module build via utility: {datetime.datetime.now()} ===\n')
+ log_file.write(f'Executing: python3 {build_script}\n')
+
+ result = subprocess.run(
+ ['python3', build_script],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True
+ )
+
+ # Log the result
+ log_file.write(f'Build script exit code: {result.returncode}\n')
+ if result.stdout:
+ log_file.write(f'Stdout:\n{result.stdout}')
+
+ if result.returncode != 0:
+ # Extract error message from stderr (already captured in stdout due to redirect)
+ return f'Build utility failed with exit code {result.returncode}'
+ except Exception as exc:
+ log_path_error = os.path.join(os.path.dirname(log_path), 'error.log')
+ with open(log_path_error, 'a') as error_file:
+ error_file.write(f'Unexpected error calling build utility: {exc}\n')
+ return f'Unexpected error: {exc}'
+
+ return None
+
def InstallModule():
- #Todo func
+ result = BuildModule()
+ if result is not None:
+ return result
return None
# Обработка нажатия на кнопку "Сохранить"
diff --git a/utils/build_mod_rewrite.py b/utils/build_mod_rewrite.py
new file mode 100644
index 0000000..a26a94c
--- /dev/null
+++ b/utils/build_mod_rewrite.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python3
+"""
+Utility for building and installing nginx mod_rewrite module.
+This script handles downloading, extracting, building, and installing the module.
+Returns None on success, or error message string on failure.
+"""
+
+import os
+import sys
+import shutil
+import subprocess
+import zipfile
+import datetime
+
+
+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'
+
+ try:
+ # Ensure log directory exists
+ log_dir = os.path.dirname(log_path)
+ if log_dir and not os.path.exists(log_dir):
+ os.makedirs(log_dir, exist_ok=True)
+
+ # Setup temporary directory: create or clean
+ if os.path.isdir(tmp_dir):
+ shutil.rmtree(tmp_dir)
+ os.makedirs(tmp_dir, exist_ok=True)
+
+ with open(log_path, 'a') as log_file:
+ log_file.write(f'=== Starting module download and install: {datetime.datetime.now()} ===\n')
+
+ # Copy the ZIP file into the temporary directory
+ src_zip = '/usr/local/ispmanager-mod_rewrite/mod_rewrite.zip'
+ dst_zip = os.path.join(tmp_dir, 'mod_rewrite.zip')
+ try:
+ shutil.copy(src_zip, dst_zip)
+ log_file.write(f'Copied zip to {dst_zip}\n')
+ except Exception as e:
+ return f'Failed to copy zip: {e}'
+
+ # Extract the ZIP file
+ try:
+ with zipfile.ZipFile(dst_zip, 'r') as zip_ref:
+ zip_ref.extractall(tmp_dir)
+ log_file.write('Extracted zip contents.\n')
+ except Exception as e:
+ return f'Failed to extract zip: {e}'
+
+ # Locate the extracted root directory
+ extracted_root = None
+ for entry in os.listdir(tmp_dir):
+ full_path = os.path.join(tmp_dir, entry)
+ if os.path.isdir(full_path):
+ extracted_root = full_path
+ break
+ if not extracted_root:
+ return 'Extracted folder not found.'
+ 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'],
+ ['bash', 'package_preparer.sh', 'build'],
+ ['bash', 'package_preparer.sh', 'installmod']
+ ]
+
+ for cmd in commands:
+ log_file.write(f'Running command: {" ".join(cmd)}\n')
+ result = subprocess.run(cmd, cwd=extracted_root, stdout=log_file, stderr=log_file)
+ if result.returncode != 0:
+ return f'Command {" ".join(cmd)} failed with exit code {result.returncode}'
+
+ log_file.write('All commands executed successfully.\n')
+ except Exception as exc:
+ return f'Unexpected error: {exc}'
+ finally:
+ # Clean up temporary directory
+ try:
+ if os.path.isdir(tmp_dir):
+ shutil.rmtree(tmp_dir)
+ except Exception:
+ pass
+
+ return None
+
+
+if __name__ == '__main__':
+ # Run the build process and output result to stdout
+ result = build_mod_rewrite()
+ if result is not None:
+ # On error, write error message to stderr
+ print(result, file=sys.stderr)
+ sys.exit(1)
+ else:
+ # On success, exit with 0 (no output)
+ sys.exit(0)