@@ -32,15 +32,30 @@ readonly C_MODULES_ENABLED="/etc/nginx/modules-enabled"
3232readonly C_MODSEC_PATH=" /etc/nginx/modsec"
3333readonly C_MODSEC_CONF_PATH=" $C_MODSEC_PATH /modsecurity.conf"
3434readonly C_MAIN_CONF_PATH=" $C_MODSEC_PATH /main.conf"
35-
36- # TODO: ERROR CATCHING ELSE WILL JUST FAIL SILENTLY IF NGINX IS NOT INSTALLED OR NOT IN PATH
37- C_NGINX_VERSION=" $( nginx -V 2>&1 | sed -n ' s/^nginx version: nginx\/\([0-9.]\+\).*/\1/p' ) "
38- C_NGINX_CONFIG_ARGS=" $( nginx -V 2>&1 | awk -F' : ' ' /configure arguments/ {print $2}' ) "
39- C_MODULES_PATH=" $( sed -n ' s/.*--modules-path=\([^ ]*\).*/\1/p' <<< " $C_NGINX_CONFIG_ARGS" | head -n 1) "
40- readonly C_NGINX_VERSION C_NGINX_CONFIG_ARGS C_MODULES_PATH
35+ readonly C_REQUIRED_PKGS=(
36+ git
37+ autoconf
38+ automake
39+ build-essential
40+ libcurl4-openssl-dev
41+ libgeoip-dev
42+ libpcre2-dev
43+ libtool
44+ libxml2-dev
45+ libyajl-dev
46+ pkgconf
47+ wget
48+ zlib1g-dev
49+ )
50+
51+ C_NGINX_VERSION=" "
52+ C_NGINX_CONFIG_ARGS=" "
53+ C_MODULES_PATH=" "
4154
4255modsecurity_clone_exists=false
4356coreruleset_clone_exists=false
57+ required_pkgs=(" ${C_REQUIRED_PKGS[@]} " )
58+ missing_pkgs=()
4459
4560
4661# ###[Functions]#############################################################################
@@ -66,15 +81,57 @@ require_non_empty() {
6681 [[ -n " $var_value " ]] || error_exit " Required value '${var_name} ' is empty"
6782}
6883
84+ require_pkg () {
85+ local required_pkg=" $1 "
86+
87+ for pkg in " ${required_pkgs[@]} " ; do
88+ [[ $pkg == " $required_pkg " ]] && return 0
89+ done
90+
91+ required_pkgs+=(" $required_pkg " )
92+ }
93+
6994
7095# ###[ Trapping & Initial Checks ]###########################################################
7196
7297
7398trap on_err ERR
7499
75- require_non_empty " C_NGINX_VERSION" " $C_NGINX_VERSION "
76- require_non_empty " C_NGINX_CONFIG_ARGS" " $C_NGINX_CONFIG_ARGS "
77- require_non_empty " C_MODULES_PATH" " $C_MODULES_PATH "
100+
101+ # ###[ Initial Checks ]######################################################################
102+
103+
104+ if (( EUID != 0 )) ; then
105+ error_exit " This script must be run with root privileges"
106+ fi
107+
108+ if command -v nginx & > /dev/null; then
109+ C_NGINX_VERSION=" $( nginx -V 2>&1 | sed -n ' s/^nginx version: nginx\/\([0-9.]\+\).*/\1/p' ) "
110+ C_NGINX_CONFIG_ARGS=" $( nginx -V 2>&1 | awk -F' : ' ' /configure arguments/ {print $2}' ) "
111+ C_MODULES_PATH=" $( sed -n ' s/.*--modules-path=\([^ ]*\).*/\1/p' <<< " $C_NGINX_CONFIG_ARGS" | head -n 1) "
112+ require_non_empty " C_NGINX_VERSION" " $C_NGINX_VERSION "
113+ require_non_empty " C_NGINX_CONFIG_ARGS" " $C_NGINX_CONFIG_ARGS "
114+ require_non_empty " C_MODULES_PATH" " $C_MODULES_PATH "
115+ else
116+ error_exit " Nginx is not installed or not in PATH"
117+ fi
118+
119+ [[ $C_NGINX_CONFIG_ARGS == * --with-http_image_filter_module* ]] && require_pkg " libgd-dev"
120+ [[ $C_NGINX_CONFIG_ARGS == * --with-http_perl_module* ]] && require_pkg " libperl-dev"
121+ [[ $C_NGINX_CONFIG_ARGS == * --with-http_xslt_module* ]] && require_pkg " libxslt1-dev"
122+ [[ $C_NGINX_CONFIG_ARGS == * ssl* ]] && require_pkg " libssl-dev"
123+
124+ for pkg in " ${required_pkgs[@]} " ; do
125+ if ! dpkg -s " $pkg " & > /dev/null; then
126+ missing_pkgs+=(" $pkg " )
127+ fi
128+ done
129+
130+ if (( ${# missing_pkgs[@]} > 0 )) ; then
131+ echo " ${C_INFO} Installing missing packages: ${missing_pkgs[*]} "
132+ apt-get update
133+ apt-get install -y " ${missing_pkgs[@]} "
134+ fi
78135
79136
80137# ###[ Main ]################################################################################
0 commit comments