Add -mod-devel subpackage for building external nginx modules (rhbz#1989778)
This change makes it possible to easily build third-party modules as RPMs on top of the nginx package. Per the constraints defined by NGINX upstream on binary compatibility for external third-party modules, we include generators to add an ABI dependency automatically.
This commit is contained in:
parent
e4bc2afa65
commit
f1c10bd5e4
20
macros.nginxmods.in
Normal file
20
macros.nginxmods.in
Normal file
@ -0,0 +1,20 @@
|
||||
%_nginx_abiversion @@NGINX_ABIVERSION@@
|
||||
%_nginx_srcdir @@NGINX_SRCDIR@@
|
||||
%_nginx_buildsrcdir nginx-src
|
||||
%_nginx_modsrcdir ..
|
||||
%_nginx_modbuilddir ../%{_vpath_builddir}
|
||||
%nginx_moddir @@NGINX_MODDIR@@
|
||||
%nginx_modconfdir @@NGINX_MODCONFDIR@@
|
||||
|
||||
%nginx_modrequires Requires: nginx(abi) = %{_nginx_abiversion}
|
||||
|
||||
%nginx_modconfigure(:-:) \\\
|
||||
%undefine _strict_symbol_defs_build \
|
||||
cp -a "%{_nginx_srcdir}" "%{_nginx_buildsrcdir}" \
|
||||
cd "%{_nginx_buildsrcdir}" \
|
||||
nginx_ldopts="$RPM_LD_FLAGS -Wl,-E" \
|
||||
./configure --with-compat --with-cc-opt="%{optflags} $(pcre-config --cflags)" --with-ld-opt="$nginx_ldopts" \\\
|
||||
--add-dynamic-module=$(realpath %{_nginx_modsrcdir}) --builddir=$(realpath %{_nginx_modbuilddir}) %{**} \
|
||||
cd -
|
||||
|
||||
%nginx_modbuild %{__make} -C "%{_nginx_buildsrcdir}" %{_make_output_sync} %{?_smp_mflags} %{_make_verbose} modules
|
140
nginx.spec
140
nginx.spec
@ -26,10 +26,22 @@
|
||||
%global with_mailcap_mimetypes 1
|
||||
%endif
|
||||
|
||||
# Cf. https://www.nginx.com/blog/creating-installable-packages-dynamic-modules/
|
||||
%global nginx_abiversion %{version}
|
||||
|
||||
%global nginx_moduledir %{_libdir}/nginx/modules
|
||||
%global nginx_moduleconfdir %{_datadir}/nginx/modules
|
||||
%global nginx_srcdir %{_usrsrc}/%{name}-%{version}-%{release}
|
||||
|
||||
# Do not generate provides/requires from nginx sources
|
||||
%global __provides_exclude_from ^%{nginx_srcdir}/.*$
|
||||
%global __requires_exclude_from ^%{nginx_srcdir}/.*$
|
||||
|
||||
|
||||
Name: nginx
|
||||
Epoch: 1
|
||||
Version: 1.20.1
|
||||
Release: 5%{?dist}
|
||||
Release: 6%{?dist}
|
||||
|
||||
Summary: A high performance web server and reverse proxy server
|
||||
# BSD License (two clause)
|
||||
@ -48,6 +60,8 @@ Source11: nginx.logrotate
|
||||
Source12: nginx.conf
|
||||
Source13: nginx-upgrade
|
||||
Source14: nginx-upgrade.8
|
||||
Source15: macros.nginxmods.in
|
||||
Source16: nginxmods.attr
|
||||
Source102: nginx-logo.png
|
||||
Source103: 404.html
|
||||
Source104: 50x.html
|
||||
@ -106,6 +120,8 @@ BuildRequires: systemd
|
||||
Requires(post): systemd
|
||||
Requires(preun): systemd
|
||||
Requires(postun): systemd
|
||||
# For external nginx modules
|
||||
Provides: nginx(abi) = %{nginx_abiversion}
|
||||
|
||||
%description
|
||||
Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
|
||||
@ -142,7 +158,7 @@ directories.
|
||||
%package mod-http-geoip
|
||||
Summary: Nginx HTTP geoip module
|
||||
BuildRequires: GeoIP-devel
|
||||
Requires: nginx
|
||||
Requires: nginx(abi) = %{nginx_abiversion}
|
||||
Requires: GeoIP
|
||||
|
||||
%description mod-http-geoip
|
||||
@ -152,7 +168,7 @@ Requires: GeoIP
|
||||
%package mod-http-image-filter
|
||||
Summary: Nginx HTTP image filter module
|
||||
BuildRequires: gd-devel
|
||||
Requires: nginx
|
||||
Requires: nginx(abi) = %{nginx_abiversion}
|
||||
Requires: gd
|
||||
|
||||
%description mod-http-image-filter
|
||||
@ -165,7 +181,7 @@ BuildRequires: perl-devel
|
||||
BuildRequires: perl-generators
|
||||
%endif
|
||||
BuildRequires: perl(ExtUtils::Embed)
|
||||
Requires: nginx
|
||||
Requires: nginx(abi) = %{nginx_abiversion}
|
||||
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
|
||||
Requires: perl(constant)
|
||||
|
||||
@ -175,25 +191,51 @@ Requires: perl(constant)
|
||||
%package mod-http-xslt-filter
|
||||
Summary: Nginx XSLT module
|
||||
BuildRequires: libxslt-devel
|
||||
Requires: nginx
|
||||
Requires: nginx(abi) = %{nginx_abiversion}
|
||||
|
||||
%description mod-http-xslt-filter
|
||||
%{summary}.
|
||||
|
||||
%package mod-mail
|
||||
Summary: Nginx mail modules
|
||||
Requires: nginx
|
||||
Requires: nginx(abi) = %{nginx_abiversion}
|
||||
|
||||
%description mod-mail
|
||||
%{summary}.
|
||||
|
||||
%package mod-stream
|
||||
Summary: Nginx stream modules
|
||||
Requires: nginx
|
||||
Requires: nginx(abi) = %{nginx_abiversion}
|
||||
|
||||
%description mod-stream
|
||||
%{summary}.
|
||||
|
||||
%package mod-devel
|
||||
Summary: Nginx module development files
|
||||
Requires: nginx = %{epoch}:%{version}-%{release}
|
||||
Requires: make
|
||||
Requires: gcc
|
||||
Requires: gd-devel
|
||||
%if 0%{?with_gperftools}
|
||||
Requires: gperftools-devel
|
||||
%endif
|
||||
%if %{with geoip}
|
||||
Requires: GeoIP-devel
|
||||
%endif
|
||||
Requires: libxslt-devel
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
Requires: openssl-devel
|
||||
%else
|
||||
Requires: openssl11-devel
|
||||
%endif
|
||||
Requires: pcre-devel
|
||||
Requires: perl-devel
|
||||
Requires: perl(ExtUtils::Embed)
|
||||
Requires: zlib-devel
|
||||
|
||||
%description mod-devel
|
||||
%{summary}.
|
||||
|
||||
|
||||
%prep
|
||||
# Combine all keys from upstream into one file
|
||||
@ -214,6 +256,10 @@ sed \
|
||||
-i auto/lib/openssl/conf
|
||||
%endif
|
||||
|
||||
# Prepare sources for installation
|
||||
cp -a ../%{name}-%{version} ../%{name}-%{version}-%{release}-src
|
||||
mv ../%{name}-%{version}-%{release}-src .
|
||||
|
||||
|
||||
%build
|
||||
# nginx does not utilize a standard configure script. It has its own
|
||||
@ -226,7 +272,7 @@ nginx_ldopts="$RPM_LD_FLAGS -Wl,-E"
|
||||
if ! ./configure \
|
||||
--prefix=%{_datadir}/nginx \
|
||||
--sbin-path=%{_sbindir}/nginx \
|
||||
--modules-path=%{_libdir}/nginx/modules \
|
||||
--modules-path=%{nginx_moduledir} \
|
||||
--conf-path=%{_sysconfdir}/nginx/nginx.conf \
|
||||
--error-log-path=%{_localstatedir}/log/nginx/error.log \
|
||||
--http-log-path=%{_localstatedir}/log/nginx/access.log \
|
||||
@ -311,8 +357,8 @@ install -p -d -m 0700 %{buildroot}%{_localstatedir}/lib/nginx/tmp
|
||||
install -p -d -m 0700 %{buildroot}%{_localstatedir}/log/nginx
|
||||
|
||||
install -p -d -m 0755 %{buildroot}%{_datadir}/nginx/html
|
||||
install -p -d -m 0755 %{buildroot}%{_datadir}/nginx/modules
|
||||
install -p -d -m 0755 %{buildroot}%{_libdir}/nginx/modules
|
||||
install -p -d -m 0755 %{buildroot}%{nginx_moduleconfdir}
|
||||
install -p -d -m 0755 %{buildroot}%{nginx_moduledir}
|
||||
|
||||
install -p -m 0644 ./nginx.conf \
|
||||
%{buildroot}%{_sysconfdir}/nginx
|
||||
@ -362,19 +408,34 @@ for i in ftdetect ftplugin indent syntax; do
|
||||
done
|
||||
|
||||
%if %{with geoip}
|
||||
echo 'load_module "%{_libdir}/nginx/modules/ngx_http_geoip_module.so";' \
|
||||
> %{buildroot}%{_datadir}/nginx/modules/mod-http-geoip.conf
|
||||
echo 'load_module "%{nginx_moduledir}/ngx_http_geoip_module.so";' \
|
||||
> %{buildroot}%{nginx_moduleconfdir}/mod-http-geoip.conf
|
||||
%endif
|
||||
echo 'load_module "%{_libdir}/nginx/modules/ngx_http_image_filter_module.so";' \
|
||||
> %{buildroot}%{_datadir}/nginx/modules/mod-http-image-filter.conf
|
||||
echo 'load_module "%{_libdir}/nginx/modules/ngx_http_perl_module.so";' \
|
||||
> %{buildroot}%{_datadir}/nginx/modules/mod-http-perl.conf
|
||||
echo 'load_module "%{_libdir}/nginx/modules/ngx_http_xslt_filter_module.so";' \
|
||||
> %{buildroot}%{_datadir}/nginx/modules/mod-http-xslt-filter.conf
|
||||
echo 'load_module "%{_libdir}/nginx/modules/ngx_mail_module.so";' \
|
||||
> %{buildroot}%{_datadir}/nginx/modules/mod-mail.conf
|
||||
echo 'load_module "%{_libdir}/nginx/modules/ngx_stream_module.so";' \
|
||||
> %{buildroot}%{_datadir}/nginx/modules/mod-stream.conf
|
||||
echo 'load_module "%{nginx_moduledir}/ngx_http_image_filter_module.so";' \
|
||||
> %{buildroot}%{nginx_moduleconfdir}/mod-http-image-filter.conf
|
||||
echo 'load_module "%{nginx_moduledir}/ngx_http_perl_module.so";' \
|
||||
> %{buildroot}%{nginx_moduleconfdir}/mod-http-perl.conf
|
||||
echo 'load_module "%{nginx_moduledir}/ngx_http_xslt_filter_module.so";' \
|
||||
> %{buildroot}%{nginx_moduleconfdir}/mod-http-xslt-filter.conf
|
||||
echo 'load_module "%{nginx_moduledir}/ngx_mail_module.so";' \
|
||||
> %{buildroot}%{nginx_moduleconfdir}/mod-mail.conf
|
||||
echo 'load_module "%{nginx_moduledir}/ngx_stream_module.so";' \
|
||||
> %{buildroot}%{nginx_moduleconfdir}/mod-stream.conf
|
||||
|
||||
# Install files for supporting nginx module builds
|
||||
## Install source files
|
||||
mkdir -p %{buildroot}%{_usrsrc}
|
||||
mv %{name}-%{version}-%{release}-src %{buildroot}%{nginx_srcdir}
|
||||
## Install rpm macros
|
||||
mkdir -p %{buildroot}%{_rpmmacrodir}
|
||||
sed -e "s|@@NGINX_ABIVERSION@@|%{nginx_abiversion}|g" \
|
||||
-e "s|@@NGINX_MODDIR@@|%{nginx_moduledir}|g" \
|
||||
-e "s|@@NGINX_MODCONFDIR@@|%{nginx_moduleconfdir}|g" \
|
||||
-e "s|@@NGINX_SRCDIR@@|%{nginx_srcdir}|g" \
|
||||
%{SOURCE15} > %{buildroot}%{_rpmmacrodir}/macros.nginxmods
|
||||
## Install dependency generator
|
||||
install -Dpm0644 -t %{buildroot}%{_fileattrsdir} %{SOURCE16}
|
||||
|
||||
|
||||
%pre filesystem
|
||||
getent group %{nginx_user} > /dev/null || groupadd -r %{nginx_user}
|
||||
@ -467,7 +528,8 @@ fi
|
||||
%attr(711,root,root) %dir %{_localstatedir}/log/nginx
|
||||
%ghost %attr(640,%{nginx_user},root) %{_localstatedir}/log/nginx/access.log
|
||||
%ghost %attr(640,%{nginx_user},root) %{_localstatedir}/log/nginx/error.log
|
||||
%dir %{_libdir}/nginx/modules
|
||||
%dir %{nginx_moduledir}
|
||||
%dir %{nginx_moduleconfdir}
|
||||
|
||||
%files all-modules
|
||||
|
||||
@ -482,35 +544,43 @@ fi
|
||||
|
||||
%if %{with geoip}
|
||||
%files mod-http-geoip
|
||||
%{_datadir}/nginx/modules/mod-http-geoip.conf
|
||||
%{_libdir}/nginx/modules/ngx_http_geoip_module.so
|
||||
%{nginx_moduleconfdir}/mod-http-geoip.conf
|
||||
%{nginx_moduledir}/ngx_http_geoip_module.so
|
||||
%endif
|
||||
|
||||
%files mod-http-image-filter
|
||||
%{_datadir}/nginx/modules/mod-http-image-filter.conf
|
||||
%{_libdir}/nginx/modules/ngx_http_image_filter_module.so
|
||||
%{nginx_moduleconfdir}/mod-http-image-filter.conf
|
||||
%{nginx_moduledir}/ngx_http_image_filter_module.so
|
||||
|
||||
%files mod-http-perl
|
||||
%{_datadir}/nginx/modules/mod-http-perl.conf
|
||||
%{_libdir}/nginx/modules/ngx_http_perl_module.so
|
||||
%{nginx_moduleconfdir}/mod-http-perl.conf
|
||||
%{nginx_moduledir}/ngx_http_perl_module.so
|
||||
%dir %{perl_vendorarch}/auto/nginx
|
||||
%{perl_vendorarch}/nginx.pm
|
||||
%{perl_vendorarch}/auto/nginx/nginx.so
|
||||
|
||||
%files mod-http-xslt-filter
|
||||
%{_datadir}/nginx/modules/mod-http-xslt-filter.conf
|
||||
%{_libdir}/nginx/modules/ngx_http_xslt_filter_module.so
|
||||
%{nginx_moduleconfdir}/mod-http-xslt-filter.conf
|
||||
%{nginx_moduledir}/ngx_http_xslt_filter_module.so
|
||||
|
||||
%files mod-mail
|
||||
%{_datadir}/nginx/modules/mod-mail.conf
|
||||
%{_libdir}/nginx/modules/ngx_mail_module.so
|
||||
%{nginx_moduleconfdir}/mod-mail.conf
|
||||
%{nginx_moduledir}/ngx_mail_module.so
|
||||
|
||||
%files mod-stream
|
||||
%{_datadir}/nginx/modules/mod-stream.conf
|
||||
%{_libdir}/nginx/modules/ngx_stream_module.so
|
||||
%{nginx_moduleconfdir}/mod-stream.conf
|
||||
%{nginx_moduledir}/ngx_stream_module.so
|
||||
|
||||
%files mod-devel
|
||||
%{_rpmmacrodir}/macros.nginxmods
|
||||
%{_fileattrsdir}/nginxmods.attr
|
||||
%{nginx_srcdir}/
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Aug 10 2021 Neal Gompa <ngompa@datto.com> - 1:1.20.1-6
|
||||
- Add -mod-devel subpackage for building external nginx modules (rhbz#1989778)
|
||||
|
||||
* Mon Aug 09 2021 Luboš Uhliarik <luhliari@redhat.com> - 1:1.20.1-5
|
||||
- Add symlink used by system-logos-httpd
|
||||
|
||||
|
14
nginxmods.attr
Normal file
14
nginxmods.attr
Normal file
@ -0,0 +1,14 @@
|
||||
%__nginxmods_requires() %{lua:
|
||||
-- Match buildroot paths of the form
|
||||
-- /PATH/OF/BUILDROOT/usr/lib/nginx/modules/ and
|
||||
-- /PATH/OF/BUILDROOT/usr/lib64/nginx/modules/
|
||||
-- generating a line of the form:
|
||||
-- nginx(abi) = VERSION
|
||||
local path = rpm.expand("%1")
|
||||
if path:match("/usr/lib%d*/nginx/modules/.*") then
|
||||
local requires = "nginx(abi) = " .. rpm.expand("%{_nginx_abiversion}")
|
||||
print(requires)
|
||||
end
|
||||
}
|
||||
|
||||
%__nginxmods_path ^%{_prefix}/lib(64)?/nginx/modules/.*\\.so$
|
Loading…
Reference in New Issue
Block a user