Index: /branches/amp_4_0/dev/README.md
===================================================================
--- /branches/amp_4_0/dev/README.md	(nonexistent)
+++ /branches/amp_4_0/dev/README.md	(working copy)
@@ -0,0 +1,5 @@
+### This directory is intended for developers
+
+``` Note: ```
+1. Never include the files / directories from this directory in the build process.
+2. It may contain sensitive information.
Index: /branches/amp_4_0/dev/build-machine/README.md
===================================================================
--- /branches/amp_4_0/dev/build-machine/README.md	(nonexistent)
+++ /branches/amp_4_0/dev/build-machine/README.md	(working copy)
@@ -0,0 +1,23 @@
+### Build machine setup
+1. Execute `install_python.sh` script to install the appropriate python version
+2. Execute the `dependency_installer.sh` script to install the library dependencies
+
+### References
+#### Export GPG Private Key
+1. Find your key's id:
+   1. gpg --list-secret-keys
+2. Export the private key:
+   1. gpg --export-secret-keys --armor C411E0C4854821EAE2C26397A2408D6321E7077D > private-key.asc
+3. Export the public key:
+   1. gpg --export --armor C411E0C4854821EAE2C26397A2408D6321E7077D > public-key.asc
+4. To import on the target machine:
+   1. gpg --import private-key.asc
+   2. gpg --import public-key.asc
+5. Set the RPM macro
+   1. echo '%_signature gpg' >> ~/.rpmmacros
+   2. echo '%_gpg_name Array Networks' >> ~/.rpmmacros
+   3. echo '%_gpg_path ~/.gnupg' >> ~/.rpmmacros
+   4. echo '%_gpg_digest_algo sha256' >> ~/.rpmmacros
+   5. echo '%_gpg_sign_cmd gpg --batch --yes --passphrase-fd 0 --pinentry-mode loopback -u' >> ~/.rpmmacros
+
+[//]: # (      %_gpg_sign_cmd gpg --batch --yes --pinentry-mode loopback --passphrase-fd 0 --armor)
Index: /branches/amp_4_0/dev/build-machine/dependency_installer.sh
===================================================================
--- /branches/amp_4_0/dev/build-machine/dependency_installer.sh	(nonexistent)
+++ /branches/amp_4_0/dev/build-machine/dependency_installer.sh	(working copy)
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+# Source custom path changes
+source /etc/profile.d/custom-path.sh
+
+sudo dnf install -y rpm-build rpmdevtools rpm-sign
+sudo dnf install -y svn
+sudo dnf install -y pinentry
Index: /branches/amp_4_0/dev/build-machine/rpm-signature/README.md
===================================================================
--- /branches/amp_4_0/dev/build-machine/rpm-signature/README.md	(nonexistent)
+++ /branches/amp_4_0/dev/build-machine/rpm-signature/README.md	(working copy)
@@ -0,0 +1 @@
+Use these private & public keys in the official build environment to sign the images.
Index: /branches/amp_4_0/dev/build-machine/rpm-signature/RPM-GPG-KEY-ARRAY
===================================================================
--- /branches/amp_4_0/dev/build-machine/rpm-signature/RPM-GPG-KEY-ARRAY	(nonexistent)
+++ /branches/amp_4_0/dev/build-machine/rpm-signature/RPM-GPG-KEY-ARRAY	(working copy)
@@ -0,0 +1,41 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGNBGgi/60BDADek8FkeJIkT/iJkkiciOSqsuUuW9mcD3+Fnf0BL58DhMgNPQbH
+6LpdRumFHi2AjJOeDNYsihcqZFYSEMn2b8M+CWybecuA2er6Hcrg0E7VVN6wSqE9
+uLDPYXzFBrEbQndD/YXfJS+RgGN6pIe5lDNYL44z6NpUWEZIUx1Og4MeK1cxbxZD
+G++b6K/MV32Mo5174LFKtv+9UoIeluWp1rE0AAvD2zvbX4d1XEzkhlxR4YTCWmYx
+f/5viI7GuhYE3yKwTmE6VEb+FFQVOe6DD+ZI8/SazVnaNzFl5+jSdjPSF/dN/5kS
+UwrM/NPchZM8bbGGdGVxuCGT4USwXhwl6YyOVc0LPE9UHDpGh1t19FbZQPTe+YOy
+T10dSHLihtB2qaS6+fKXVwjR0tjTsVHAzV+Hc3jXdjXpsW+zQF6hKcAm2cQAT5aF
+6FSP5FxlXxXBfZJCcmY3Dizq9WlLCF5Rdju2HPe7YAHOnhxDXe3qZW/kuxvT7rPJ
+YksCQxc91JodwS0AEQEAAbQqQXJyYXkgTmV0d29ya3MgPHN1cHBvcnRAYXJyYXlu
+ZXR3b3Jrcy5jb20+iQHYBBMBCABCFiEExBHgxIVIIeriwmOXokCNYyHnB30FAmgi
+/60CGwMFCQPCZwAFCwkIBwIDIgIBBhUKCQgLAgQWAgMBAh4HAheAAAoJEKJAjWMh
+5wd9epcL/3aupguNItwDzvPd1P9ZKGVu/H0H1KSqR1tlm49czpf3CSnO9AKusGuu
+qNImTP161dOy2HIwJa5j+EjAclFA3ngDJAFnCGX6ieQu55y+w8Gm7BfWyoBluzWe
+y9RpL04EbZUcrqhEtvoIInJuWPdpLelI+fsDi+7R73owx9rlDnRF7LcQ09Ld+rFd
+MCAGX8GImatgmv5MWseuHt8+NFGFWBRF6eQhRbfV/tAriou5o7gDYLTMbTVh4Vl8
+Z1okXiXIIm/WVhvyp64EJWrYYS3Aq7o7N7dBrRnPwJMyezmiqHVnh2i/TLgDKHL8
+utWCIisYIoTt2FqZsMHm9y1NB2WP3oyMFRDE8vtXKC/j+UmmR7JxE0v9L78psP9g
+1xescAO/8UTCathBTVn7wKbXt2UumMkYJ/mSsqtRh2mlJagKzQSd9hfOGT5lkaj8
+IqIMZ2YTDQ0z8pZR1Fnj7S6s+t1NxoMO00jjh3qNRtsJqoCZKPlGmSL14ttaxVQn
+8e19dd6zyrkBjQRoIv+tAQwAuQG24b7zK8qiAPNpSOmEkcx5CB0XD9jINcMOQPw6
+TRbUQpZU3v9Qe7m1NiIlVkxowXbKWvr21gwSiy0IoDBjYwCwCp4YvJYz8QrN+Pwj
+FdoHMmCo2PsPOMKaEt85/Af5LRG6HylM4VPMiAlYRl0oUjosZImLn6RwszvhTJTN
+529ewMxIV9aFx347TwXICqlJIddEh+wBPlKRAj01iNcAXbHK4yBTI8dUVyCXT2GF
+9JNGZh5WJTbDSeMjWxnIJmVgs3DNItI1YMmgfi8Tg6QXVkpRF2K8WbobtfAjNBSg
+z1lh8G0BZFyIIMK/ajoWM4M+Q4dWsT0RuJyJ65IyJ7hO0lICNKyDRBpaCa9QyxaV
+tZoglEITkgEQr5QnaaRvPDJRzdVe7lBN1BUJYK0cmyUQbKePQ2YRDGMfJHHoDFCF
+4q7lW9E9hoMNWRcguLxudL1WnIuUP+jghArNcUrxGa9Oskmfrv0OqzJou20Tq+z3
+2qxi2A0sXPij7KubM/K+iIitABEBAAGJAbwEGAEIACYWIQTEEeDEhUgh6uLCY5ei
+QI1jIecHfQUCaCL/rQIbDAUJA8JnAAAKCRCiQI1jIecHfXczC/9dW20+qKaSLPrq
+xJrOl3ql99i6BznrGSJ4UCBfKpAO/dxnzt5DkkJJUwz/8XTs/bppzI4NTXlHz71i
+UZjaeZxzp7FkUXhzwsKc8QlNVP3kdM+alCxQg2Crptos24zoHK/+kkxAvXgr+An0
+JlRYlX63vUk3OqusxhQRC0/T7WBw0ymDWLtp0EXGTfvN9OEB1BVbSY+I7qXqOteM
+++0ToLLVvRle/lf9a5+QzkC5L0UHAk4/zkaHGENGeAjg7XYcmrkLSqz7dRBLLTEI
+zAMKow5bMKg2tokSMRkHJXIhf1sJBQDPIreeC4Rcb4LyjDWAlBhZShzdmReGbnuS
+kBz8jMzyeY7fL6qRzbCsJ9MIbKiZqXcm/+FTlJqQgp6ZtWXN8ydaGuE/0Z57h7Uy
+BrngAXPOf6V58alFurijwL7n+9NGyGPJhUs6n7KWbGBBdE7A4r3KuYt9gE6Qj2ND
+FQG/CQIOPjNghRB03a/iQ2liq0IXsBWNKJAFhNAd1dIWGvhFkB4=
+=AWVz
+-----END PGP PUBLIC KEY BLOCK-----
Index: /branches/amp_4_0/dev/build-machine/rpm-signature/private-key.asc
===================================================================
--- /branches/amp_4_0/dev/build-machine/rpm-signature/private-key.asc	(nonexistent)
+++ /branches/amp_4_0/dev/build-machine/rpm-signature/private-key.asc	(working copy)
@@ -0,0 +1,84 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+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
+1dIWGvhFkB4=
+=PjPo
+-----END PGP PRIVATE KEY BLOCK-----
Index: /branches/amp_4_0/dev/build-machine/rpm-signature/public-key.asc
===================================================================
--- /branches/amp_4_0/dev/build-machine/rpm-signature/public-key.asc	(nonexistent)
+++ /branches/amp_4_0/dev/build-machine/rpm-signature/public-key.asc	(working copy)
@@ -0,0 +1,41 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=AWVz
+-----END PGP PUBLIC KEY BLOCK-----
Index: /branches/amp_4_0/extensions/auditing/build.sh
===================================================================
--- /branches/amp_4_0/extensions/auditing/build.sh	(revision 2567)
+++ /branches/amp_4_0/extensions/auditing/build.sh	(working copy)
@@ -1,5 +1,66 @@
-#! /usr/bin/env bash
-tar -zcf auditing.tar.gz syslogd webui start.sh stop.sh metadata.json
-mkdir -p rpm/SOURCES
-mv auditing.tar.gz rpm/SOURCES/
-rpmbuild -bb rpm.spec --define "_topdir `pwd`/rpm"
+#!/usr/bin/env bash
+
+set -e  # Exit on error
+
+# === Package Variables ===
+PKG_NAME="auditing"
+PKG_VERSION="4.0.0"
+TOP_DIR=$(pwd)
+RPM_DIR="${TOP_DIR}/rpm"
+SRC_DIR="${TOP_DIR}/${PKG_NAME}-${PKG_VERSION}"
+SPEC_FILE="${TOP_DIR}/${PKG_NAME}.spec"
+GPG_KEY_NAME="Array Networks"
+GPG_PASSPHRASE="arrayclick1"
+
+echo "Creating clean source tree for ${PKG_NAME} version ${PKG_VERSION}..."
+
+# === Clean up old source and build directories ===
+rm -rf "${SRC_DIR}"
+rm -rf "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz"
+
+# === Create the directory structure ===
+echo "Creating source structure..."
+mkdir -p "${SRC_DIR}/webui"
+mkdir -p "${SRC_DIR}/syslogd"
+
+# === Copy files to the source directory ===
+echo "Copying files into the source directory..."
+cp metadata.json "${SRC_DIR}/metadata.json"
+cp start.sh "${SRC_DIR}/start.sh"
+cp stop.sh "${SRC_DIR}/stop.sh"
+cp -r webui/* "${SRC_DIR}/webui/"
+cp -r syslogd/* "${SRC_DIR}/syslogd/"
+
+# === Ensure SOURCES directory exists ===
+mkdir -p "${RPM_DIR}/SOURCES"
+
+# === Create the tarball ===
+echo "Creating source tarball ${PKG_NAME}.tar.gz..."
+tar -czf "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz" -C "${SRC_DIR}" .
+
+# === Build RPM using external SPEC file ===
+echo "Building RPM using ${SPEC_FILE}..."
+mkdir -p "${RPM_DIR}/SPECS"
+cp "${SPEC_FILE}" "${RPM_DIR}/SPECS/"
+
+rpmbuild -bb "${RPM_DIR}/SPECS/$(basename ${SPEC_FILE})" --define "_topdir ${RPM_DIR}"
+
+echo "RPM build completed successfully."
+
+# === Sign the RPM with GPG key ===
+echo "Signing the RPM with GPG key: ${GPG_KEY_NAME} ..."
+RPM_FILES=$(find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm")
+
+for rpm_file in $RPM_FILES; do
+    echo "Signing $rpm_file ..."
+    echo "$GPG_PASSPHRASE" | rpmsign --addsign --define "_gpg_sign_cmd gpg --batch --yes --pinentry-mode loopback --no-tty --passphrase-fd 0 --armor" "$rpm_file"
+    if [ $? -eq 0 ]; then
+        echo "Successfully signed $rpm_file"
+    else
+        echo "Warning: Failed to sign $rpm_file"
+    fi
+done
+echo "RPM signing process completed."
+
+echo "RPM located at:"
+find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm"
Index: /branches/amp_4_0/extensions/auditing/auditing.spec
===================================================================
--- /branches/amp_4_0/extensions/auditing/rpm.spec	(nonexistent)
+++ /branches/amp_4_0/extensions/auditing/auditing.spec	(working copy)
@@ -0,0 +1,64 @@
+Name:           auditing
+Version:        4.0.0
+Release:        1%{?dist}
+Summary:        Log Analysis Module
+Group:          Applications/System
+License:        Proprietary
+URL:            https://www.arraynetworks.com
+Source0:        auditing.tar.gz
+Requires:       /bin/bash
+
+%global debug_package %{nil}
+
+%description
+Log Analysis Module for syslog collection and visualization through Kibana.
+
+%prep
+%setup -q -c -n %{name}-%{version}
+
+%build
+# No build steps needed
+
+%install
+install -d -m 0755 %{buildroot}/ca/extensions/auditing
+install -p -m 0755 metadata.json %{buildroot}/ca/extensions/auditing/metadata.json
+install -p -m 0755 start.sh %{buildroot}/ca/extensions/auditing/start.sh
+install -p -m 0755 stop.sh %{buildroot}/ca/extensions/auditing/stop.sh
+
+cp -a webui %{buildroot}/ca/extensions/auditing/
+cp -a syslogd %{buildroot}/ca/extensions/auditing/
+
+install -Dm 0644 syslogd/acm_syslogd.service %{buildroot}%{_unitdir}/acm_syslogd.service
+
+%pre
+if [ "$1" = "2" ]; then
+    rm -rf /ca/extensions/auditing
+fi
+
+%post
+# Copy Kibana config and start service
+cp -r /ca/extensions/auditing/syslogd/kibana.yml /etc/kibana/kibana.yml || echo "Warning: Failed to copy kibana.yml"
+/bin/bash /ca/extensions/auditing/start.sh || echo "Warning: Failed to execute start.sh"
+%systemd_post acm_syslogd.service
+
+%preun
+/bin/bash /ca/extensions/auditing/stop.sh || echo "Warning: Failed to execute stop.sh"
+%systemd_preun acm_syslogd.service
+
+%postun
+if [ "$1" = "0" ]; then
+    rm -rf /ca/extensions/auditing
+fi
+%systemd_postun_with_restart acm_syslogd.service
+
+%files
+%defattr(-,root,root,0755)
+/ca/extensions/auditing
+%attr(0644,root,root) %{_unitdir}/acm_syslogd.service
+
+%clean
+rm -rf %{buildroot}
+
+%changelog
+* Tue May 13 2025 AMP Dev - 4.x
+- Initial release
Index: /branches/amp_4_0/extensions/auditing/rpm.spec
===================================================================
--- /branches/amp_4_0/extensions/auditing/rpm.spec	(revision 2567)
+++ /branches/amp_4_0/extensions/auditing/rpm.spec	(nonexistent)
@@ -1,56 +0,0 @@
-Name:       auditing
-Version:    3.7.0
-Release:    1%{?dist}
-Summary:    Log Analysis Module
-
-Group:      TO
-License:    ARRAY LICENSE
-URL:        www.arraynetworks.com
-Source0:    auditing.tar.gz
-
-#BuildRequires:      gcc
-Requires:       /bin/bash
-
-%description
-Log Analysis Module
-
-%pre
-if [ "$1" = "2" ]; then
-    rm -rf /ca/extensions/auditing
-fi
-
-%post
-cp -r /ca/extensions/auditing/syslogd/kibana.yml /etc/kibana/kibana.yml
-bash /ca/extensions/auditing/start.sh
-/bin/systemctl enable acm_syslogd.service >/dev/null 2>&1 || :
-
-%preun
-bash /ca/extensions/auditing/stop.sh
-
-%postun
-if [ "$1" = "0" ]; then
-    rm -rf /ca/extensions/auditing
-fi
-
-%prep
-%setup -c -n %{name}-%{version}
-
-%build
-
-%install
-install -p -D -m 0755 metadata.json    %{buildroot}/ca/extensions/auditing/metadata.json
-install -p -D -m 0755 start.sh    %{buildroot}/ca/extensions/auditing/start.sh
-install -p -D -m 0755 stop.sh    %{buildroot}/ca/extensions/auditing/stop.sh
-cp -r webui %{buildroot}/ca/extensions/auditing/
-cp -r syslogd %{buildroot}/ca/extensions/auditing/
-install -Dm 0644 syslogd/acm_syslogd.service %{buildroot}%{_unitdir}/acm_syslogd.service
-cp -r %{buildroot} /home/wangjian
-
-%files
-%defattr (-,root,root,0755)
-/ca/extensions/auditing
-%attr (644,root,root)%{_unitdir}/acm_syslogd.service
-
-%changelog
-%clean 
-rm -rf %{buildroot}
Index: /branches/amp_4_0/extensions/avx_mgmt/build.sh
===================================================================
--- /branches/amp_4_0/extensions/avx_mgmt/build.sh	(revision 2567)
+++ /branches/amp_4_0/extensions/avx_mgmt/build.sh	(working copy)
@@ -1,5 +1,59 @@
-#! /usr/bin/env bash
-tar -zcf avx_mgmt.tar.gz webui start.sh stop.sh metadata.json avx_mgmt_db.py
-mkdir -p rpm/SOURCES
-mv avx_mgmt.tar.gz rpm/SOURCES/
-rpmbuild -bb rpm.spec --define "_topdir `pwd`/rpm"
+#!/usr/bin/env bash
+
+set -e  # Exit on error
+set -o pipefail
+
+# === Variables ===
+PKG_NAME="avx_mgmt"
+PKG_VERSION="4.0.0"
+TOP_DIR=$(pwd)
+RPM_DIR="${TOP_DIR}/rpm"
+SRC_DIR="${TOP_DIR}/${PKG_NAME}-${PKG_VERSION}"
+GPG_KEY_NAME="Array Networks"
+GPG_PASSPHRASE="arrayclick1"
+
+echo "=== Building ${PKG_NAME} version ${PKG_VERSION} ==="
+
+# === Clean old artifacts ===
+echo "Cleaning up old build files..."
+rm -rf "${SRC_DIR}" "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz"
+
+# === Prepare source tree ===
+echo "Preparing source tree..."
+mkdir -p "${SRC_DIR}/webui"
+cp metadata.json start.sh stop.sh avx_mgmt_db.py "${SRC_DIR}/"
+cp -r webui/* "${SRC_DIR}/webui/"
+
+# === Create SOURCES directory ===
+mkdir -p "${RPM_DIR}/SOURCES"
+
+# === Create tarball ===
+echo "Creating source tarball..."
+tar -czf "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz" -C "${SRC_DIR}" .
+
+# === Build RPM ===
+echo "Building RPM from avx_mgmt.spec..."
+rpmbuild -bb "${TOP_DIR}/avx_mgmt.spec" --define "_topdir ${RPM_DIR}"
+
+echo "RPM build completed successfully."
+
+# === Sign the RPM with GPG key ===
+echo "Signing the RPM with GPG key: ${GPG_KEY_NAME} ..."
+RPM_FILES=$(find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm")
+
+for rpm_file in $RPM_FILES; do
+    echo "Signing $rpm_file ..."
+    echo "$GPG_PASSPHRASE" | rpmsign --addsign --define "_gpg_sign_cmd gpg --batch --yes --pinentry-mode loopback --no-tty --passphrase-fd 0 --armor" "$rpm_file"
+    if [ $? -eq 0 ]; then
+        echo "Successfully signed $rpm_file"
+    else
+        echo "Warning: Failed to sign $rpm_file"
+    fi
+done
+echo "RPM signing process completed."
+
+# === Output location ===
+echo "Built RPM packages:"
+find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm"
+
+echo "=== Build & Signing completed ==="
Index: /branches/amp_4_0/extensions/avx_mgmt/avx_mgmt.spec
===================================================================
--- /branches/amp_4_0/extensions/avx_mgmt/rpm.spec	(nonexistent)
+++ /branches/amp_4_0/extensions/avx_mgmt/avx_mgmt.spec	(working copy)
@@ -0,0 +1,58 @@
+Name:           avx_mgmt
+Version:        4.0.0
+Release:        1%{?dist}
+Summary:        AVX Management Module
+Group:          Applications/System
+License:        Proprietary
+URL:            https://www.arraynetworks.com
+Source0:        avx_mgmt.tar.gz
+Requires:       /bin/bash
+
+%global debug_package %{nil}
+
+%description
+AVX Management Module
+
+%prep
+%setup -c -n %{name}-%{version}
+
+%build
+# No build steps needed
+
+%install
+install -p -D -m 0755 metadata.json    %{buildroot}/ca/extensions/avx_mgmt/metadata.json
+install -p -D -m 0755 start.sh         %{buildroot}/ca/extensions/avx_mgmt/start.sh
+install -p -D -m 0755 stop.sh          %{buildroot}/ca/extensions/avx_mgmt/stop.sh
+install -p -D -m 0755 avx_mgmt_db.py   %{buildroot}/ca/extensions/avx_mgmt/avx_mgmt_db.py
+cp -r webui %{buildroot}/ca/extensions/avx_mgmt/
+
+%pre
+if [ "$1" = "2" ]; then
+    rm -rf /ca/extensions/avx_mgmt
+fi
+
+%post
+python /ca/extensions/avx_mgmt/avx_mgmt_db.py -c
+bash /ca/extensions/avx_mgmt/start.sh
+
+%preun
+if [ "$1" = "0" ]; then
+    bash /ca/extensions/avx_mgmt/stop.sh
+    python /ca/extensions/avx_mgmt/avx_mgmt_db.py -d
+fi
+
+%postun
+if [ "$1" = "0" ]; then
+    rm -rf /ca/extensions/avx_mgmt
+fi
+
+%files
+%defattr(-,root,root,0755)
+/ca/extensions/avx_mgmt
+
+%clean
+rm -rf %{buildroot}
+
+%changelog
+* Tue May 13 2025 AMP Dev - 4.x
+- Initial release
Index: /branches/amp_4_0/extensions/avx_mgmt/rpm.spec
===================================================================
--- /branches/amp_4_0/extensions/avx_mgmt/rpm.spec	(revision 2567)
+++ /branches/amp_4_0/extensions/avx_mgmt/rpm.spec	(nonexistent)
@@ -1,51 +0,0 @@
-Name:       avx_mgmt
-Version:    3.7.0
-Release:    1%{?dist}
-Summary:    AVX Management Module
-
-Group:      TO
-License:    ARRAY LICENSE
-URL:        www.arraynetworks.com
-Source0:    avx_mgmt.tar.gz
-
-#BuildRequires:      gcc
-Requires:       /bin/bash
-
-%description
-AVX Management Module
-
-%pre
-if [ "$1" = "2" ]; then
-    rm -rf /ca/extensions/avx_mgmt
-fi
-%post
-python /ca/extensions/avx_mgmt/avx_mgmt_db.py -c
-bash /ca/extensions/avx_mgmt/start.sh
-%preun
-if [ "$1" = "0" ]; then
-    bash /ca/extensions/avx_mgmt/stop.sh
-    python /ca/extensions/avx_mgmt/avx_mgmt_db.py -d
-fi
-%postun
-if [ "$1" = "0" ]; then
-    rm -rf /ca/extensions/avx_mgmt
-fi
-%prep
-%setup -c -n %{name}-%{version}
-
-%build
-
-%install
-install -p -D -m 0755 metadata.json    %{buildroot}/ca/extensions/avx_mgmt/metadata.json
-install -p -D -m 0755 start.sh    %{buildroot}/ca/extensions/avx_mgmt/start.sh
-install -p -D -m 0755 stop.sh    %{buildroot}/ca/extensions/avx_mgmt/stop.sh
-install -p -D -m 0755 avx_mgmt_db.py    %{buildroot}/ca/extensions/avx_mgmt/avx_mgmt_db.py
-cp -r webui %{buildroot}/ca/extensions/avx_mgmt/
-
-%files
-%defattr (-,root,root,0755)
-/ca/extensions/avx_mgmt
-
-%changelog
-%clean 
-rm -rf %{buildroot}
Index: /branches/amp_4_0/extensions/monitoring/build.sh
===================================================================
--- /branches/amp_4_0/extensions/monitoring/build.sh	(revision 2567)
+++ /branches/amp_4_0/extensions/monitoring/build.sh	(working copy)
@@ -1,5 +1,54 @@
-#! /usr/bin/env bash
-tar -zcf monitoring.tar.gz webui start.sh stop.sh metadata.json monitor_db.py model
-mkdir -p rpm/SOURCES
-mv monitoring.tar.gz rpm/SOURCES/
-rpmbuild -bb rpm.spec --define "_topdir `pwd`/rpm"
+#!/usr/bin/env bash
+
+set -e
+set -o pipefail
+
+PKG_NAME="monitoring"
+PKG_VERSION="4.0.0"
+TOP_DIR=$(pwd)
+RPM_DIR="${TOP_DIR}/rpm"
+GPG_KEY_NAME="Array Networks"
+GPG_PASSPHRASE="arrayclick1"
+
+echo "=== Building ${PKG_NAME} version ${PKG_VERSION} ==="
+
+# === Create source tarball ===
+echo "Creating source tarball ${PKG_NAME}.tar.gz ..."
+tar -czf ${PKG_NAME}.tar.gz webui model metadata.json start.sh stop.sh monitor_db.py
+
+# === Ensure SOURCES directory exists ===
+mkdir -p ${RPM_DIR}/SOURCES
+
+# === Copy tarball to SOURCES ===
+cp ${PKG_NAME}.tar.gz ${RPM_DIR}/SOURCES/
+
+# === Build RPM ===
+echo "Running rpmbuild..."
+rpmbuild -bb "${TOP_DIR}/${PKG_NAME}.spec" --define "_topdir ${RPM_DIR}"
+
+echo "RPM build completed."
+
+# === Sign the RPM with GPG key ===
+echo "Signing the RPM with GPG key: ${GPG_KEY_NAME} ..."
+RPM_FILES=$(find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm")
+
+for rpm_file in $RPM_FILES; do
+    echo "Signing $rpm_file ..."
+    echo "$GPG_PASSPHRASE" | rpmsign --addsign --define "_gpg_sign_cmd gpg --batch --yes --pinentry-mode loopback --no-tty --passphrase-fd 0 --armor" "$rpm_file"
+    if [ $? -eq 0 ]; then
+        echo "Successfully signed $rpm_file"
+    else
+        echo "Warning: Failed to sign $rpm_file"
+    fi
+done
+echo "RPM signing process completed."
+
+# === Cleanup ===
+echo "Cleaning up..."
+rm -f ${PKG_NAME}.tar.gz
+
+# === Output Location ===
+echo "Built RPM files:"
+find ${RPM_DIR}/RPMS -name "${PKG_NAME}*.rpm"
+
+echo "=== Build & Signing completed ==="
Index: /branches/amp_4_0/extensions/monitoring/monitoring.spec
===================================================================
--- /branches/amp_4_0/extensions/monitoring/rpm.spec	(nonexistent)
+++ /branches/amp_4_0/extensions/monitoring/monitoring.spec	(working copy)
@@ -0,0 +1,57 @@
+Name:           monitoring
+Version:        4.0.0
+Release:        1%{?dist}
+Summary:        Monitoring Module
+Group:          Applications/System
+License:        Proprietary
+URL:            https://www.arraynetworks.com
+Source0:        monitoring.tar.gz
+Requires:       /bin/bash
+
+%global debug_package %{nil}
+
+%description
+Monitoring Module
+
+%prep
+%setup -c -n %{name}-%{version}
+
+%build
+# No build steps needed
+
+%install
+install -p -D -m 0755 metadata.json    %{buildroot}/ca/extensions/monitoring/metadata.json
+install -p -D -m 0755 start.sh    %{buildroot}/ca/extensions/monitoring/start.sh
+install -p -D -m 0755 stop.sh    %{buildroot}/ca/extensions/monitoring/stop.sh
+install -p -D -m 0755 monitor_db.py    %{buildroot}/ca/extensions/monitoring/monitor_db.py
+cp -r webui %{buildroot}/ca/extensions/monitoring/
+cp -r model %{buildroot}/ca/extensions/monitoring/
+
+%pre
+if [ "$1" = "2" ]; then
+    rm -rf /ca/extensions/monitoring
+fi
+
+%post
+bash /ca/extensions/monitoring/start.sh
+
+%preun
+if [ "$1" = "0" ]; then
+    bash /ca/extensions/monitoring/stop.sh
+fi
+
+%postun
+if [ "$1" = "0" ]; then
+    rm -rf /ca/extensions/monitoring
+fi
+
+%files
+%defattr (-,root,root,0755)
+/ca/extensions/monitoring
+
+%clean 
+rm -rf %{buildroot}
+
+%changelog
+* Tue May 13 2025 AMP Dev - 4.x
+- Initial release
Index: /branches/amp_4_0/extensions/monitoring/rpm.spec
===================================================================
--- /branches/amp_4_0/extensions/monitoring/rpm.spec	(revision 2567)
+++ /branches/amp_4_0/extensions/monitoring/rpm.spec	(nonexistent)
@@ -1,53 +0,0 @@
-Name:       monitoring
-Version:    3.7.0
-Release:    1%{?dist}
-Summary:    Monitoring Module
-
-Group:      TO
-License:    ARRAY LICENSE
-URL:        www.arraynetworks.com
-Source0:    monitoring.tar.gz
-
-Requires:       /bin/bash
-
-%description
-Monitoring Module
-
-%pre
-if [ "$1" = "2" ]; then
-    rm -rf /ca/extensions/monitoring
-fi
-
-%post
-bash /ca/extensions/monitoring/start.sh
-
-%preun
-if [ "$1" = "0" ]; then
-    bash /ca/extensions/monitoring/stop.sh
-fi
-
-%postun
-if [ "$1" = "0" ]; then
-    rm -rf /ca/extensions/monitoring
-fi
-
-%prep
-%setup -c -n %{name}-%{version}
-
-%build
-
-%install
-install -p -D -m 0755 metadata.json    %{buildroot}/ca/extensions/monitoring/metadata.json
-install -p -D -m 0755 start.sh    %{buildroot}/ca/extensions/monitoring/start.sh
-install -p -D -m 0755 stop.sh    %{buildroot}/ca/extensions/monitoring/stop.sh
-install -p -D -m 0755 monitor_db.py    %{buildroot}/ca/extensions/monitoring/monitor_db.py
-cp -r webui %{buildroot}/ca/extensions/monitoring/
-cp -r model %{buildroot}/ca/extensions/monitoring/
-
-%files
-%defattr (-,root,root,0755)
-/ca/extensions/monitoring
-
-%changelog
-%clean 
-rm -rf %{buildroot}
Index: /branches/amp_4_0/extensions/rs_api/build.sh
===================================================================
--- /branches/amp_4_0/extensions/rs_api/build.sh	(revision 2567)
+++ /branches/amp_4_0/extensions/rs_api/build.sh	(working copy)
@@ -1,6 +1,64 @@
-#! /usr/bin/env bash
-tar -cf rs_api.tar webui metadata.json start.sh stop.sh
-mkdir -p rpm/SOURCES
-cp rs_api.tar rpm/SOURCES/
-rpmbuild -bb rpm.spec --define "_topdir `pwd`/rpm"
-rm -rf rs_api.tar
+#!/usr/bin/env bash
+
+set -e  # Exit on error
+
+# === Package Variables ===
+PKG_NAME="rs_api"
+PKG_VERSION="4.0.0"
+TOP_DIR=$(pwd)
+RPM_DIR="${TOP_DIR}/rpm"
+SRC_DIR="${TOP_DIR}/${PKG_NAME}-${PKG_VERSION}"
+SPEC_FILE="${TOP_DIR}/${PKG_NAME}.spec"
+GPG_KEY_NAME="Array Networks"
+GPG_PASSPHRASE="arrayclick1"
+
+echo "Creating clean source tree for ${PKG_NAME} version ${PKG_VERSION}..."
+
+# === Clean up old source and build directories ===
+rm -rf "${SRC_DIR}"
+rm -rf "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz"
+
+# === Create the directory structure ===
+echo "Creating source structure..."
+mkdir -p "${SRC_DIR}/webui"
+
+# === Copy files to the source directory ===
+echo "Copying files into the source directory..."
+cp metadata.json "${SRC_DIR}/metadata.json"
+cp start.sh "${SRC_DIR}/start.sh"
+cp stop.sh "${SRC_DIR}/stop.sh"
+cp -r webui/* "${SRC_DIR}/webui/"
+
+# === Ensure SOURCES directory exists ===
+mkdir -p "${RPM_DIR}/SOURCES"
+
+# === Create the tarball ===
+echo "Creating source tarball ${PKG_NAME}.tar.gz..."
+tar -czf "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz" -C "${SRC_DIR}" .
+
+# === Build RPM using external SPEC file ===
+echo "Building RPM using ${SPEC_FILE}..."
+mkdir -p "${RPM_DIR}/SPECS"
+cp "${SPEC_FILE}" "${RPM_DIR}/SPECS/"
+
+rpmbuild -bb "${RPM_DIR}/SPECS/$(basename ${SPEC_FILE})" --define "_topdir ${RPM_DIR}"
+
+echo "RPM build completed successfully."
+
+# === Sign the RPM with GPG key ===
+echo "Signing the RPM with GPG key: ${GPG_KEY_NAME} ..."
+RPM_FILES=$(find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm")
+
+for rpm_file in $RPM_FILES; do
+    echo "Signing $rpm_file ..."
+    echo "$GPG_PASSPHRASE" | rpmsign --addsign --define "_gpg_sign_cmd gpg --batch --yes --pinentry-mode loopback --no-tty --passphrase-fd 0 --armor" "$rpm_file"
+    if [ $? -eq 0 ]; then
+        echo "Successfully signed $rpm_file"
+    else
+        echo "Warning: Failed to sign $rpm_file"
+    fi
+done
+echo "RPM signing process completed."
+
+echo "RPM located at:"
+find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm"
Index: /branches/amp_4_0/extensions/rs_api/rpm.spec
===================================================================
--- /branches/amp_4_0/extensions/rs_api/rpm.spec	(revision 2567)
+++ /branches/amp_4_0/extensions/rs_api/rpm.spec	(nonexistent)
@@ -1,49 +0,0 @@
-# rpm.spec
-Name:       rs_api
-Version:    3.7.0
-Release:    1%{?dist}
-Summary:    RS API
-
-Group:      TO
-License:    ARRAY LICENSE
-URL:        www.arraynetworks.com
-Source0:    rs_api.tar
-
-BuildRequires:      gcc
-Requires:       /bin/bash
-
-%description
-RS API
-
-%pre
-if [ "$1" = "2" ]; then
-    rm -rf /ca/extensions/rs_api
-fi
-%post
-
-%preun
-if [ "$1" = "0" ]; then
-    bash /ca/extensions/rs_api/stop.sh
-fi
-%postun
-
-fi
-%prep
-%setup -c -n %{name}-%{version}
-
-%build
-cd license_server && make
-
-%install
-install -p -D -m 0755 start.sh    %{buildroot}/ca/extensions/rs_api/start.sh
-install -p -D -m 0755 stop.sh    %{buildroot}/ca/extensions/rs_api/stop.sh
-install -p -D -m 0755 metadata.json     %{buildroot}/ca/extensions/rs_api/metadata.json
-cp -r webui     %{buildroot}/ca/extensions/rs_api/
-
-%files
-%defattr (-,root,root,0755)
-/ca/extensions/rs_api/
-
-%changelog
-%clean
-rm -rf %{buildroot}

Property changes on: extensions/rs_api/rpm.spec
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: /branches/amp_4_0/extensions/rs_api/rs_api.spec
===================================================================
--- /branches/amp_4_0/extensions/rs_api/rpm.spec	(nonexistent)
+++ /branches/amp_4_0/extensions/rs_api/rs_api.spec	(working copy)
@@ -0,0 +1,51 @@
+Name:               rs_api
+Version:            4.0.0
+Release:            1%{?dist}
+Summary:            RS API
+Group:              Applications/System
+License:            Proprietary
+URL:                https://www.arraynetworks.com
+Source0:            rs_api.tar.gz
+BuildRequires:      gcc
+Requires:           /bin/bash
+
+%global debug_package %{nil}
+
+%description
+RS API
+
+%prep
+%setup -c -n %{name}-%{version}
+
+%build
+# No build steps required
+
+%install
+install -p -D -m 0755 start.sh    %{buildroot}/ca/extensions/rs_api/start.sh
+install -p -D -m 0755 stop.sh    %{buildroot}/ca/extensions/rs_api/stop.sh
+install -p -D -m 0755 metadata.json     %{buildroot}/ca/extensions/rs_api/metadata.json
+cp -r webui     %{buildroot}/ca/extensions/rs_api/
+
+%pre
+if [ "$1" = "2" ]; then
+    rm -rf /ca/extensions/rs_api
+fi
+
+%post
+/bin/bash /ca/extensions/rs_api/start.sh || echo "Warning: Failed to execute start.sh"
+
+%preun
+if [ "$1" = "0" ]; then
+    bash /ca/extensions/rs_api/stop.sh
+fi
+
+%files
+%defattr (-,root,root,0755)
+/ca/extensions/rs_api/
+
+%clean
+rm -rf %{buildroot}
+
+%changelog
+* Tue May 13 2025 AMP Dev - 4.x
+- Initial release

Property changes on: extensions/rs_api/rs_api.spec
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: /branches/amp_4_0/extensions/vpn_mgmt/build.sh
===================================================================
--- /branches/amp_4_0/extensions/vpn_mgmt/build.sh	(revision 2567)
+++ /branches/amp_4_0/extensions/vpn_mgmt/build.sh	(working copy)
@@ -1,5 +1,62 @@
-#! /usr/bin/env bash
-tar -zcf vpn_mgmt.tar.gz webui start.sh stop.sh metadata.json
-mkdir -p rpm/SOURCES
-mv vpn_mgmt.tar.gz rpm/SOURCES/
-rpmbuild -bb rpm.spec --define "_topdir `pwd`/rpm"
+#!/usr/bin/env bash
+
+set -e  # Exit on error
+
+# === Package Variables ===
+PKG_NAME="vpn_mgmt"
+PKG_VERSION="4.0.0"
+TOP_DIR=$(pwd)
+RPM_DIR="${TOP_DIR}/rpm"
+SRC_DIR="${TOP_DIR}/${PKG_NAME}-${PKG_VERSION}"
+SPEC_FILE="${TOP_DIR}/${PKG_NAME}.spec"
+GPG_KEY_NAME="Array Networks"
+
+
+echo "Creating clean source tree for ${PKG_NAME} version ${PKG_VERSION}..."
+
+# === Clean up old source and build directories ===
+rm -rf "${SRC_DIR}"
+rm -rf "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz"
+
+# === Create the directory structure ===
+echo "Creating source structure..."
+mkdir -p "${SRC_DIR}/webui"
+
+# === Copy files to the source directory ===
+echo "Copying files into the source directory..."
+cp metadata.json "${SRC_DIR}/metadata.json"
+cp start.sh "${SRC_DIR}/start.sh"
+cp stop.sh "${SRC_DIR}/stop.sh"
+cp -r webui/* "${SRC_DIR}/webui/"
+
+# === Ensure SOURCES directory exists ===
+mkdir -p "${RPM_DIR}/SOURCES"
+
+# === Create the tarball ===
+echo "Creating source tarball ${PKG_NAME}.tar.gz..."
+tar -czf "${RPM_DIR}/SOURCES/${PKG_NAME}.tar.gz" -C "${SRC_DIR}" .
+
+# === Build RPM using external SPEC file ===
+echo "Building RPM using ${SPEC_FILE}..."
+mkdir -p "${RPM_DIR}/SPECS"
+cp "${SPEC_FILE}" "${RPM_DIR}/SPECS/"
+
+rpmbuild -bb "${RPM_DIR}/SPECS/$(basename ${SPEC_FILE})" --define "_topdir ${RPM_DIR}"
+
+echo "RPM build completed successfully."
+
+# === Sign the RPM with GPG key ===
+echo "Signing the RPM with GPG key: ${GPG_KEY_NAME} ..."
+RPM_FILES=$(find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm")
+
+for rpm_file in $RPM_FILES; do
+    echo "Signing $rpm_file ..."
+    echo "$GPG_PASSPHRASE" | rpmsign --addsign --define "_gpg_sign_cmd gpg --batch --yes --pinentry-mode loopback --passphrase-fd 0 --armor" "$rpm_file" || {
+        echo "Warning: Failed to sign $rpm_file"
+    }
+done
+
+echo "RPM signing process completed."
+
+echo "RPM located at:"
+find "${RPM_DIR}/RPMS" -name "${PKG_NAME}*.rpm"
Index: /branches/amp_4_0/extensions/vpn_mgmt/rpm.spec
===================================================================
--- /branches/amp_4_0/extensions/vpn_mgmt/rpm.spec	(revision 2567)
+++ /branches/amp_4_0/extensions/vpn_mgmt/rpm.spec	(nonexistent)
@@ -1,48 +0,0 @@
-Name:       vpn_mgmt
-Version:    3.7.0
-Release:    1%{?dist}
-Summary:    VPN Management Module
-
-Group:      TO
-License:    ARRAY LICENSE
-URL:        www.arraynetworks.com
-Source0:    vpn_mgmt.tar.gz
-
-#BuildRequires:      gcc
-Requires:       /bin/bash
-
-%description
-VPN Management Module
-
-%pre
-if [ "$1" = "2" ]; then
-    rm -rf /ca/extensions/vpn_mgmt
-fi
-%post
-bash /ca/extensions/vpn_mgmt/start.sh
-%preun
-if [ "$1" = "0" ]; then
-    bash /ca/extensions/vpn_mgmt/stop.sh
-fi
-%postun
-if [ "$1" = "0" ]; then
-    rm -rf /ca/extensions/vpn_mgmt
-fi
-%prep
-%setup -c -n %{name}-%{version}
-
-%build
-
-%install
-install -p -D -m 0755 metadata.json    %{buildroot}/ca/extensions/vpn_mgmt/metadata.json
-install -p -D -m 0755 start.sh    %{buildroot}/ca/extensions/vpn_mgmt/start.sh
-install -p -D -m 0755 stop.sh    %{buildroot}/ca/extensions/vpn_mgmt/stop.sh
-cp -r webui %{buildroot}/ca/extensions/vpn_mgmt/
-
-%files
-%defattr (-,root,root,0755)
-/ca/extensions/vpn_mgmt
-
-%changelog
-%clean 
-rm -rf %{buildroot}

Property changes on: extensions/vpn_mgmt/rpm.spec
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: /branches/amp_4_0/extensions/vpn_mgmt/vpn_mgmt.spec
===================================================================
--- /branches/amp_4_0/extensions/vpn_mgmt/rpm.spec	(nonexistent)
+++ /branches/amp_4_0/extensions/vpn_mgmt/vpn_mgmt.spec	(working copy)
@@ -0,0 +1,56 @@
+Name:           vpn_mgmt
+Version:        4.0.0
+Release:        1%{?dist}
+Summary:        VPN Management Module
+Group:          Applications/System
+License:        Proprietary
+URL:            https://www.arraynetworks.com
+Source0:        vpn_mgmt.tar.gz
+
+Requires:       /bin/bash
+
+%global debug_package %{nil}
+
+%description
+VPN Management Module
+
+%prep
+%setup -c -n %{name}-%{version}
+
+%build
+# No build steps required
+
+%install
+install -p -D -m 0755 metadata.json %{buildroot}/ca/extensions/vpn_mgmt/metadata.json
+install -p -D -m 0755 start.sh %{buildroot}/ca/extensions/vpn_mgmt/start.sh
+install -p -D -m 0755 stop.sh %{buildroot}/ca/extensions/vpn_mgmt/stop.sh
+cp -r webui %{buildroot}/ca/extensions/vpn_mgmt/
+
+%pre
+if [ "$1" = "2" ]; then
+    rm -rf /ca/extensions/vpn_mgmt
+fi
+
+%post
+/bin/bash /ca/extensions/vpn_mgmt/start.sh || echo "Warning: Failed to execute start.sh"
+
+%preun
+if [ "$1" = "0" ]; then
+    /bin/bash /ca/extensions/vpn_mgmt/stop.sh
+fi
+
+%postun
+if [ "$1" = "0" ]; then
+    rm -rf /ca/extensions/vpn_mgmt
+fi
+
+%files
+%defattr (-,root,root,0755)
+/ca/extensions/vpn_mgmt/
+
+%clean
+rm -rf %{buildroot}
+
+%changelog
+* Tue May 13 2025 AMP Dev - 4.x
+- Initial release

Property changes on: extensions/vpn_mgmt/vpn_mgmt.spec
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: /branches/amp_4_0/platform/config/init_db.sql
===================================================================
--- /branches/amp_4_0/platform/config/init_db.sql	(revision 2567)
+++ /branches/amp_4_0/platform/config/init_db.sql	(working copy)
@@ -113,7 +113,7 @@
     connection varchar(16) NOT NULL DEFAULT 'unconnected',
     status varchar(16) NOT NULL DEFAULT 'new',
     version varchar(8192) DEFAULT NULL,
-    license_key varchar(128) DEFAULT NULL,
+    license_key varchar(256) DEFAULT NULL,
     gateway_domain varchar(128) DEFAULT NULL,
     location varchar(128) NOT NULL,
     firewall_ip varchar(64) NOT NULL,
Index: /branches/amp_4_0/platform/signature/README.md	(added)
===================================================================
--- /branches/amp_4_0/platform/signature/README.md	(revision 0)
+++ /branches/amp_4_0/platform/signature/README.md	(revision 0)
Index: /branches/amp_4_0/platform/signature/RPM-GPG-KEY-ARRAY
===================================================================
--- /branches/amp_4_0/platform/signature/RPM-GPG-KEY-ARRAY	(nonexistent)
+++ /branches/amp_4_0/platform/signature/RPM-GPG-KEY-ARRAY	(working copy)
@@ -0,0 +1,41 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=AWVz
+-----END PGP PUBLIC KEY BLOCK-----
