nginx: fix problem with migration of uci conf template

Fix some problem with migration of uci conf template and include of
module.d directive.

Fix 2 case:
- uci.conf.template not versioned but with the include module.d
  resulting in double include module.d

- uci.conf.template version 1.1 with the include module.d at the end
  of the config. This is problematic for nginx as modules must be
  included before any http directive.

Handle this 2 case to restore a working uci.conf.template configuration
on migrated config.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
Christian Marangi 2023-06-11 04:29:54 +02:00
parent 15271cb467
commit add3cbfcd3
No known key found for this signature in database
GPG Key ID: AC001D09ADBFEAD7
2 changed files with 19 additions and 4 deletions

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=nginx
PKG_VERSION:=1.24.0
PKG_RELEASE:=2
PKG_RELEASE:=3
PKG_SOURCE:=nginx-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://nginx.org/download/

View File

@ -9,7 +9,7 @@ G_OPTS="daemon off;"
NGINX_UTIL="/usr/bin/nginx-util"
UCI_CONF_TEMPLATE="/etc/nginx/uci.conf.template"
LATEST_UCI_CONF_VERSION="1.1"
LATEST_UCI_CONF_VERSION="1.2"
eval $("${NGINX_UTIL}" get_env)
@ -23,10 +23,25 @@ nginx_check_luci_template() {
return
fi
# Fix wrong entry for the module.d include
if [ "$UCI_CONF_VERSION" = "1.1" ]; then
# Remove any entry
sed -i '/^include module\.d\/\*\.module;/d' $UCI_CONF_TEMPLATE
# Put the include before events {}
sed -i 's/events {/include module.d\/*.module;\n\nevents {/' $UCI_CONF_TEMPLATE
fi
if [ "$UCI_CONF_VERSION" != "$LATEST_UCI_CONF_VERSION" ]; then
sed -i "s/# UCI_CONF_VERSION=.*/# UCI_CONF_VERSION=$LATEST_UCI_CONF_VERSION/" $UCI_CONF_TEMPLATE
fi
if [ -z "$UCI_CONF_VERSION" ]; then
# Handle funny case with template with the include module but no version
if ! grep -q -e '^include module\.d/\*\.module;$' $UCI_CONF_TEMPLATE; then
sed -i 's/events {/include module.d\/*.module;\n\nevents {/' $UCI_CONF_TEMPLATE
fi
echo "" >> $UCI_CONF_TEMPLATE
echo "include module.d/*.module;" >> $UCI_CONF_TEMPLATE
echo "# UCI_CONF_VERSION=1.1" >> $UCI_CONF_TEMPLATE
echo "# UCI_CONF_VERSION=1.2" >> $UCI_CONF_TEMPLATE
fi
}