Skip to content

Instantly share code, notes, and snippets.

@allex
Created January 17, 2023 09:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save allex/355a1d7c6fa1f89844c1dd776fd63a16 to your computer and use it in GitHub Desktop.
Save allex/355a1d7c6fa1f89844c1dd776fd63a16 to your computer and use it in GitHub Desktop.
#!/bin/sh
# usage: ngx-package-tool [install | list-modules | enable-modules | cleanup-debug] [OPTIONS]
# by @allex_wang
# shellcheck disable=SC2196,SC2086
#
# GistID: 355a1d7c6fa1f89844c1dd776fd63a16
# GistURL: https://gist.github.com/355a1d7c6fa1f89844c1dd776fd63a16
PROG=$(basename "$0")
die () { echo >&2 "fatal: $1"; exit 1; }
usage () {
echo "usage: $PROG [install | list-modules | enable-modules | cleanup-debug] [OPTIONS]
or: $PROG install [--verbose] <nginx-module-image-filter nginx-module-njs ...>
or: $PROG enable-modules <MODULE_NAME, ...>"
exit 1
}
cmd_cleanup_debug () {
rm -f /etc/init.d/nginx-debug
rm -f /usr/sbin/nginx-debug
rm -f /usr/lib/nginx/modules/*-debug.so
rm -rf /usr/share/man/*
echo "cleanup done!"
}
cmd_install () {
if [ -z "${PKG_RELEASE}" ]; then
die "PKG_RELEASE not valid"
fi
nginxPackages=""
trace_debug=
for n; do
case "$n" in
nginx | nginx-module-xslt | nginx-module-geoip | nginx-module-image-filter)
nginxPackages="$nginxPackages \
$n=${NGINX_VERSION}-r${PKG_RELEASE}"
;;
nginx-module-njs)
[ -n "$NJS_VERSION" ] || die "NJS_VERSION not valid"
nginxPackages="$nginxPackages \
$n=${NGINX_VERSION}.${NJS_VERSION}-r${PKG_RELEASE}"
;;
--verbose)
trace_debug=1
;;
esac
done
[ "$trace_debug" ] && set -x
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& if ! grep nginx /etc/passwd > /dev/null ; then
echo "create nginx user/group first, to be consistent throughout docker variants" \
&& addgroup -g 101 -S nginx \
&& adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx
fi \
&& apkArch="$(cat /etc/apk/arch)" \
&& apk add --no-cache --virtual .checksum-deps \
openssl \
&& case "$apkArch" in
x86_64 | aarch64)
KEY_SHA512="e09fa32f0a0eab2b879ccbbc4d0e4fb9751486eedda75e35fac65802cc9faa266425edf83e261137a2f4d16281ce2c1a5f4502930fe75154723da014214f0655" &&
wget -O /tmp/nginx_signing.rsa.pub https://nginx.org/keys/nginx_signing.rsa.pub &&
if echo "$KEY_SHA512 */tmp/nginx_signing.rsa.pub" | sha512sum -c -; then
echo "key verification succeeded!"
mv /tmp/nginx_signing.rsa.pub /etc/apk/keys/
else
echo "key verification failed!"
exit 1
fi &&
apk add -X "https://nginx.org/packages/mainline/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages
;;
*)
echo >&2 "arch not support"
;;
esac \
&& apk del .checksum-deps \
&& cmd_cleanup_debug \
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
}
cmd_list_modules () {
cd /etc/nginx/modules && ls -1 -- *.so
}
cmd_enable_modules () {
[ $# -gt 0 ] || die "NGX_MODULE required"
ngx_module_include_dir=/etc/nginx/modules
for n; do
n=${n%%.so}
shift
if [ ! -f "${ngx_module_include_dir}/$n.so" ]; then
echo >&2 "module '$n' not installed, ignored"
continue
fi
if ! grep -s "$n.so" "${ngx_module_include_dir}/*.conf" -r ; then
echo "load_module modules/$n.so;" > "${ngx_module_include_dir}/$n.conf"
echo "=> ${ngx_module_include_dir}/$n.conf"
fi
done
}
[ $# -gt 0 ] || usage
command=
while [ $# -gt 0 ]; do
case "$1" in
install | cleanup-debug | list-modules | enable-modules)
command=$1
;;
-h | --help)
usage
;;
*)
break
;;
esac
shift
done
[ -n "$command" ] || usage
"cmd_$(echo $command | sed -e s/-/_/g)" "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment