81 lines
1.8 KiB
Bash
81 lines
1.8 KiB
Bash
|
#!/bin/sh -e
|
||
|
|
||
|
resolve_package() {
|
||
|
for pkg in "$@"
|
||
|
do
|
||
|
apk info "$pkg" | head -n1 | awk '{print $1}'
|
||
|
done
|
||
|
}
|
||
|
|
||
|
strip_version_from_pkg_name() {
|
||
|
for pkg in "$@"
|
||
|
do
|
||
|
echo "$pkg" | sed 's,-[0-9a-zA-Z.]\+-r[0-9]\+$,,'
|
||
|
done
|
||
|
}
|
||
|
|
||
|
find_runtime_dependency_pkgs() {
|
||
|
for p in "$@"
|
||
|
do
|
||
|
ldd "$p" 2>/dev/null |\
|
||
|
grep '=> .\+\.so' |\
|
||
|
awk '{print $3}' |\
|
||
|
sort |\
|
||
|
uniq |\
|
||
|
while read -r so
|
||
|
do
|
||
|
apk info --who-owns $so
|
||
|
done |\
|
||
|
awk '{print $5}' |\
|
||
|
awk -F- '{print $1}'
|
||
|
done
|
||
|
}
|
||
|
|
||
|
find_devel_pkg() {
|
||
|
# shellcheck disable=SC2046
|
||
|
strip_version_from_pkg_name $(
|
||
|
apk list -d "$1" |\
|
||
|
grep dev |\
|
||
|
sort |\
|
||
|
uniq |\
|
||
|
awk '{print $1}'
|
||
|
)
|
||
|
}
|
||
|
|
||
|
# retrieve configure args of already packaged nginx
|
||
|
NGINX_CONFIGURE_ARGS="$(nginx -V 2>&1 | grep -o '^configure arguments: .*$' | sed 's,^configure arguments: ,,g')"
|
||
|
# remove preconfigured dynamic modules so only ours will be placed in the objs folder
|
||
|
NGINX_CONFIGURE_ARGS="$(printf '%s' "$NGINX_CONFIGURE_ARGS" | sed 's,--with-[^=]\+module=dynamic,,g')"
|
||
|
|
||
|
apk update
|
||
|
|
||
|
# Determine all dependencies used for the packaged nginx and install them
|
||
|
DEPENDENCIES="$(
|
||
|
find_runtime_dependency_pkgs /usr/lib/nginx/modules/*.so
|
||
|
# shellcheck disable=SC2046
|
||
|
strip_version_from_pkg_name $(resolve_package $(apk info -R nginx | tail -n+2))
|
||
|
)"
|
||
|
DEVPACKAGES="$(for dep in $DEPENDENCIES; do find_devel_pkg "$dep"; done | sort | uniq)"
|
||
|
apk add --virtual .build-deps \
|
||
|
gcc \
|
||
|
libc-dev \
|
||
|
make \
|
||
|
linux-headers \
|
||
|
$DEVPACKAGES
|
||
|
tar -zx -f nginx.tar.gz
|
||
|
rm nginx.tar.gz
|
||
|
cd nginx-*/
|
||
|
|
||
|
./configure $NGINX_CONFIGURE_ARGS --add-dynamic-module=../module --with-debug
|
||
|
make modules
|
||
|
|
||
|
. /etc/os-release
|
||
|
versionsuffix="$ID$VERSION_ID-nginx$NGINX_VERSION"
|
||
|
|
||
|
find_runtime_dependency_pkgs objs/*.so > "../required_packages-$versionsuffix.txt"
|
||
|
for so in objs/*.so
|
||
|
do
|
||
|
name="$(basename "$so" .so)-$versionsuffix.so"
|
||
|
install -m644 "$so" "../$name"
|
||
|
done
|