Files
EndGame/nginx-update.sh

128 lines
3.6 KiB
Bash
Executable File

#!/bin/bash
# A script to compile NGINX dynamic modules against the currently installed NGINX version.
set -e #
# Update system packages and install build dependencies
apt-get update
apt-get -y upgrade
apt-get -y install build-essential cmake
# Get installed NGINX version
nginx -V
command="nginx -v"
nginxv=$( ${command} 2>&1 )
NGINXVERSION=$(echo $nginxv | grep -o '[0-9.]*$')
echo "Detected NGINX version: $NGINXVERSION"
# Check for a cached tarball of the modules to avoid re-compiling
modulecache=$NGINXVERSION-modules.tar.gz
if test -f $modulecache; then
echo "Found cached modules for this version. Installing from cache."
rm -rf /etc/nginx/modules
mkdir -p /etc/nginx/modules
tar zxvf $modulecache
mv modules/* /etc/nginx/modules/
rm -R modules
echo "Testing NGINX configuration..."
nginx -t
echo "Cached modules installed successfully."
exit 0
else
echo "No cached modules found. Starting fresh build."
rm -f *-modules.tar.gz
fi
# Download NGINX source matching the installed version
wget https://nginx.org/download/nginx-$NGINXVERSION.tar.gz
tar -xzvf nginx-$NGINXVERSION.tar.gz
# Copy module dependencies into the source directory
cp -R dependencies/* nginx-$NGINXVERSION/
cd nginx-$NGINXVERSION
echo "Compiling Brotli dependency libraries..."
cd ngx_brotli/deps/brotli
mkdir -p out
cd out
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=./installed ..
make
cd ../../../../
echo "Brotli libraries compiled."
# Configure the build environment for LuaJIT
export LUAJIT_LIB=/usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1
# Configure the build with all dynamic modules
./configure \
--with-ld-opt="-Wl,-rpath,/usr/local/lib" \
--with-compat \
--add-dynamic-module=naxsi/naxsi_src \
--add-dynamic-module=headers-more-nginx-module \
--add-dynamic-module=echo-nginx-module \
--add-dynamic-module=ngx_devel_kit \
--add-dynamic-module=lua-nginx-module \
--add-dynamic-module=ngx_brotli
# Compile the modules
echo "Compiling NGINX modules..."
make -j$(nproc) modules
echo "Compilation finished. Preparing to install and test..."
# Backup existing modules, if they exist
if [ -d "/etc/nginx/modules" ]; then
echo "Backing up existing modules to /etc/nginx/modules.bak..."
mv /etc/nginx/modules /etc/nginx/modules.bak
fi
echo "Installing new modules..."
mkdir -p /etc/nginx/modules
cp -r objs/*.so /etc/nginx/modules/
# Test the NGINX configuration
echo "Testing new modules with 'nginx -t'..."
if nginx -t; then
echo "SUCCESS: 'nginx -t' passed."
echo "Creating cache for future use..."
tar -zcvf $modulecache -C /etc/nginx modules
cd ..
mv nginx-$NGINXVERSION/$modulecache .
if [ -d "/etc/nginx/modules.bak" ]; then
echo "Removing backup of old modules..."
rm -rf /etc/nginx/modules.bak
fi
echo "Build and installation complete!"
else
echo "------------------------------------------------------------"
echo "ERROR: 'nginx -t' FAILED. The new modules are broken!"
echo "Reverting to previous module configuration."
echo "------------------------------------------------------------"
rm -rf /etc/nginx/modules
if [ -d "/etc/nginx/modules.bak" ]; then
mv /etc/nginx/modules.bak /etc/nginx/modules
echo "Previous modules have been restored."
fi
echo "Cache was NOT created. Please check the build logs for errors."
cd ..
rm -rf nginx-$NGINXVERSION*
exit 1
fi
echo "Cleaning up build directory..."
cd .. # Should already be here from the success path, but being safe
rm -rf nginx-*.tar.gz
rm -rf nginx-$NGINXVERSION
exit 0