I'll be happy to see this PR get reviewed and merged.

I've one question on the style of the revision scheme of the files in
${FILESDIR}: this PR introduce a revision scheme
(nginx-r*.{conf,confd,service,...}) which is different to current
scheme (nginx.{conf,service,...}.r*).
Personally I'd like to align to the existing scheme for a better view
when checking the files. But I'm not insisting on this, because the
old files will be removed sooner or later as we remove the old
ebuilds.

I've several more comments which are not required to be resolved in this PR:
1. nginx.conf should be highly modular, keep example in config to be
imported by include, add hook in every possible context, so in
general, user can add their site-specific config in these locations.
2. www-nginx/ngx-lua-module should not hard RDEPEND on lua-resty-core.
Despite the document said so
(https://github.com/openresty/lua-nginx-module?tab=readme-ov-file#lua_load_resty_core),
but a little trick can bypass the check logic (see
https://github.com/gentoo/gentoo/commit/7ac2835a3fc6c319970af018f3c38752ca46e14a
for current solution), so I think it's better to add USE="resty"
(enabled by default).
3. Static module support. While the dynamic module is suitable for
most cases, I'd like to still leave a possibility to use static linked
module. I'd like to work on a solution after this PR.

Thanks a lot for this great PR.


On Sat, Feb 22, 2025 at 12:09 AM Zurab Kvachadze <zurabid2...@gmail.com> wrote:
>
> This is the third iteration of the patch series.
>
> References
> ===========
>
> GitHub PR: https://github.com/gentoo/gentoo/pull/37590
>
> v2 of the patch series: 
> https://public-inbox.gentoo.org/gentoo-dev/20240729215241.13243-1-zurabid2...@gmail.com/
>
> NEWS item patch: 
> https://public-inbox.gentoo.org/gentoo-dev/20250221153621.26266-2-zurabid2...@gmail.com/
>
> Abstract
> ===========
>
> This is an attempt to improve the state of NGINX in the Gentoo tree. The
> majority of reasoning for introducing this series can be found in the
> nginx.eclass commit, whereas the actual differences between the previous and
> the new versions are outlined in the NGINX 1.26.1 revbump commit. All the
> commits are pretty self-descriptive, explaining the rationale and 
> implementation
> in way more details than I could describe here. I recommend you to start with
> the nginx.eclass commit.
>
> Such "refreshes" are important for Gentoo, in my belief. NGINX has not been
> "full-time" maintained for two years now, let alone being rewritten. Thus, 
> NGINX
> ebuilds are around 42K in size, having accumulated rust over the years. The
> sheer size and monstrosity of the ebuild hinders the discourages developers 
> from
> adopting the package. These patches aim to drastically reduce the size and fix
> numerous issues that NGINX has acquired throughout its lifetime.
>
> This MR closes the following bugs as RESOLVED FIXED:
>         * 573710, 481456, 928131, 576414, 578658, 735020, 700866
>
> Makes progress towards solving these bugs:
>     * 886537
>
> And otherwise mentions these bugs:
>     * 925098
>
> Changelog
> ===========
>
> The changes between v2 and v3:
>
>     * Fully support the upstream transition to Git from Mercurial.
>
>     * Fix NGINX uwsgi tests.
>
>     * Greatly simplify dependency handling for third-party modules by
>       introducing the ngx_mod_append_libs() function.
>
>     * Enable specifying NGINX module dependencies declaratively via the
>       NGINX_MOD_LINK_MODULES array.
>
>     * Add tests support for NGINX modules via Test::Nginx 
> (dev-perl/Test-Nginx).
>
>     * Port 10 more modules to nginx-module.eclass.
>
>     * Some minor improvements to NGINX miscellaneous files.
>
> The changes between v1 and v2:
>
>         * nginx.eclass: Add support for installing tmpfiles.d(5) files via
>           NGINX_MISC_FILES. Add RDEPEND on virtual/tmpfiles. Also, the
>           _ngx_set_mod_*() functions now work properly, by checking the 
> module in
>           question against the NGINX_MODULES array with the '+' sign stripped.
>
>         * nginx.tmpfiles: Add tmpfiles.d(5) file to manage the /var/tmp/nginx
>           directory used to store temporary NGINX files.
>
>         * nginx-r5.initd: Set pidfile to /run/${RC_SVCNAME}.pid, make NGINX 
> use that
>           instead of the pidfile specified in its configuration file. Allows 
> for
>           seamlessly running multiple instances of NGINX. Set 
> NGINX_CONFIGFILE to
>           /etc/nginx/${RC_SVCNAME}.conf. Remove 'need net' from depend(). 
> Remove the
>           start_pre() function with the call to checkpath. Its functionality 
> is now
>           delegated to systemd-tmpfiles(8).
>
>         * nginx-r1.confd: The relevant NGINX_PIDFILE option is removed since 
> the
>           pidfile is unconditionally saved to /run/${RC_SVCNAME}.pid.
>
>         * nginx-*.ebuild: Declare nginx.tmpfiles in NGINX_MISC_FILES, thus
>           installing it.
>
>         * One more paragraph was added to the third party modules section (2) 
> in
>           the "Question and problems", which suggest issuing NEWS item, due to
>           the impact of the changes.
>
>
> Happy hacking :)
>
> Zurab Kvachadze (40):
>   nginx.eclass: Add new eclass for building the NGINX server
>   dev-perl/Test-Nginx: new package, add 0.30
>   nginx-module.eclass: Add new eclass for building NGINX external
>     modules
>   profiles/arch/powerpc/ppc64: mask tests for www-servers/nginx
>   profiles/arch/riscv: mask tests for www-servers/nginx
>   www-servers/nginx: add myself as a proxy maintainer; update
>     metadata.xml
>   www-servers/nginx: add nginx.tmpfiles for managing /var/tmp/nginx
>   www-servers/nginx: add nginx-r5.initd
>   www-servers/nginx: add nginx-r1.confd
>   www-servers/nginx: add nginx-r2.service
>   www-servers/nginx: add nginx-r2.logrotate
>   www-servers/nginx: add nginx-r4.conf
>   profiles/desc: reword and update nginx_modules_http.desc
>   profiles/desc: reword and update nginx_modules_mail.desc
>   profiles/desc: reword and update nginx_modules_stream.desc
>   profiles/categories: Add www-nginx category for external NGINX modules
>   app-metrics/nginx-lua-prometheus: revbump to r101, update EAPI 7 -> 8,
>     remove r100
>   www-servers/nginx: revbump 1.26.3-r0 to 1.26.3-r1, use nginx.eclass
>   www-servers/nginx: revbump 1.27.4-r0 to 1.27.4-r1, use nginx.eclass
>   www-servers/nginx: add 9999 live version, use nginx.eclass
>   www-nginx/ngx_devel_kit: new package, add 0.3.4
>   www-nginx/ngx-echo: new package, add 0.63
>   www-nginx/ngx-encrypted-session: new package, add 0.09
>   www-nginx/ngx-set-misc: new package, add 0.33
>   www-nginx/ngx-brotli: new package, add 20231109
>   www-nginx/ngx-headers-more: new package, add 0.37
>   www-nginx/ngx-upload-progress: new package, add 0.9.3
>   dev-lua/lua-resty-core: new package, add 0.1.30
>   dev-lua/lua-resty-lrucache: new package, add 0.15
>   www-nginx/ngx-lua-module: new package, add 0.10.27
>   dev-lua/lua-resty-string: new package, add 0.16
>   dev-lua/lua-resty-mysql: new package, add 0.27
>   dev-lua/lua-resty-memcached: new package, add 0.17
>   www-nginx/ngx-xss: new package, add 0.06
>   www-nginx/ngx-eval: new package, add 0_p20240817
>   www-nginx/ngx-iconv: new package, add 0.14
>   www-nginx/ngx-srcache: new package, add 0.33
>   www-nginx/ngx-lua-upstream: new package, add 0.07
>   www-nginx/ngx-memc: new package, add 0.20
>   www-nginx: enable tests
>
>  ...ua-prometheus-0.1_pre20170610-r101.ebuild} |  17 +-
>  dev-lua/lua-resty-core/Manifest               |   1 +
>  .../lua-resty-core-0.1.30.ebuild              |  33 +
>  dev-lua/lua-resty-core/metadata.xml           |  24 +
>  dev-lua/lua-resty-lrucache/Manifest           |   1 +
>  .../lua-resty-lrucache-0.15.ebuild            |  33 +
>  dev-lua/lua-resty-lrucache/metadata.xml       |  19 +
>  dev-lua/lua-resty-memcached/Manifest          |   1 +
>  .../lua-resty-memcached-0.17.ebuild           |  33 +
>  dev-lua/lua-resty-memcached/metadata.xml      |  16 +
>  dev-lua/lua-resty-mysql/Manifest              |   1 +
>  .../lua-resty-mysql-0.27.ebuild               |  37 +
>  dev-lua/lua-resty-mysql/metadata.xml          |  22 +
>  dev-lua/lua-resty-string/Manifest             |   1 +
>  .../lua-resty-string-0.16.ebuild              |  38 +
>  dev-lua/lua-resty-string/metadata.xml         |  16 +
>  dev-perl/Test-Nginx/Manifest                  |   1 +
>  dev-perl/Test-Nginx/Test-Nginx-0.30.ebuild    |  36 +
>  ...inx-0.30-preset-temp_path-directives.patch |  38 +
>  ...est-Nginx-0.30-set-default-error-log.patch |  48 +
>  dev-perl/Test-Nginx/metadata.xml              |  17 +
>  eclass/nginx-module.eclass                    | 811 +++++++++++++++
>  eclass/nginx.eclass                           | 950 ++++++++++++++++++
>  profiles/arch/powerpc/ppc64/package.use.mask  |   4 +
>  profiles/arch/riscv/package.use.mask          |   4 +
>  profiles/categories                           |   1 +
>  profiles/desc/nginx_modules_http.desc         | 147 +--
>  profiles/desc/nginx_modules_mail.desc         |   9 +-
>  profiles/desc/nginx_modules_stream.desc       |  34 +-
>  www-nginx/metadata.xml                        |   7 +
>  www-nginx/ngx-brotli/Manifest                 |   2 +
>  www-nginx/ngx-brotli/metadata.xml             |  24 +
>  .../ngx-brotli/ngx-brotli-20231109.ebuild     |  30 +
>  www-nginx/ngx-echo/Manifest                   |   1 +
>  www-nginx/ngx-echo/metadata.xml               |  24 +
>  www-nginx/ngx-echo/ngx-echo-0.63.ebuild       |  26 +
>  www-nginx/ngx-encrypted-session/Manifest      |   1 +
>  www-nginx/ngx-encrypted-session/metadata.xml  |  22 +
>  .../ngx-encrypted-session-0.09.ebuild         |  38 +
>  www-nginx/ngx-eval/Manifest                   |   1 +
>  www-nginx/ngx-eval/metadata.xml               |  16 +
>  .../ngx-eval/ngx-eval-0_p20240817.ebuild      |  43 +
>  www-nginx/ngx-headers-more/Manifest           |   1 +
>  www-nginx/ngx-headers-more/metadata.xml       |  23 +
>  .../ngx-headers-more-0.37.ebuild              |  29 +
>  www-nginx/ngx-iconv/Manifest                  |   1 +
>  .../ngx-iconv-0.14-skip-rds-json-tests.patch  |  30 +
>  www-nginx/ngx-iconv/metadata.xml              |  20 +
>  www-nginx/ngx-iconv/ngx-iconv-0.14.ebuild     |  36 +
>  www-nginx/ngx-lua-module/Manifest             |   1 +
>  ...lua-module-0.10.27-always-define-NDK.patch |  29 +
>  ...0.10.27-do-not-log-non-openresty-lua.patch |  41 +
>  www-nginx/ngx-lua-module/metadata.xml         |  21 +
>  .../ngx-lua-module-0.10.27.ebuild             |  67 ++
>  www-nginx/ngx-lua-upstream/Manifest           |   1 +
>  ...lua-upstream-0.07-skip-invalid-tests.patch |  26 +
>  www-nginx/ngx-lua-upstream/metadata.xml       |  16 +
>  .../ngx-lua-upstream-0.07.ebuild              |  45 +
>  www-nginx/ngx-memc/Manifest                   |   1 +
>  ...0.20-stats_t-do-not-run-timeout-test.patch |  31 +
>  www-nginx/ngx-memc/metadata.xml               |  27 +
>  www-nginx/ngx-memc/ngx-memc-0.20.ebuild       |  48 +
>  www-nginx/ngx-set-misc/Manifest               |   1 +
>  .../ngx-set-misc-0.33-hmac-configurable.patch |  71 ++
>  ...isc-0.33-skip-hashed-upstream_t-test.patch |  31 +
>  www-nginx/ngx-set-misc/metadata.xml           |  25 +
>  .../ngx-set-misc/ngx-set-misc-0.33.ebuild     |  47 +
>  www-nginx/ngx-srcache/Manifest                |   1 +
>  ...x-srcache-0.33-disable-invalid-tests.patch | 147 +++
>  www-nginx/ngx-srcache/metadata.xml            |  25 +
>  www-nginx/ngx-srcache/ngx-srcache-0.33.ebuild |  53 +
>  www-nginx/ngx-upload-progress/Manifest        |   1 +
>  www-nginx/ngx-upload-progress/metadata.xml    |  24 +
>  .../ngx-upload-progress-0.9.3.ebuild          |  20 +
>  www-nginx/ngx-xss/Manifest                    |   1 +
>  ...x-xss-0.06-add-dynamic-build-support.patch |  34 +
>  www-nginx/ngx-xss/metadata.xml                |  21 +
>  www-nginx/ngx-xss/ngx-xss-0.06.ebuild         |  28 +
>  www-nginx/ngx_devel_kit/Manifest              |   1 +
>  www-nginx/ngx_devel_kit/metadata.xml          |  25 +
>  .../ngx_devel_kit/ngx_devel_kit-0.3.4.ebuild  |  45 +
>  www-servers/nginx/Manifest                    |   1 +
>  www-servers/nginx/files/nginx-r1.confd        |  32 +
>  www-servers/nginx/files/nginx-r2.logrotate    |  11 +
>  www-servers/nginx/files/nginx-r2.service      |  11 +
>  www-servers/nginx/files/nginx-r4.conf         |  39 +
>  www-servers/nginx/files/nginx-r5.initd        | 112 +++
>  www-servers/nginx/files/nginx.tmpfiles        |   2 +
>  www-servers/nginx/metadata.xml                |  62 +-
>  www-servers/nginx/nginx-1.26.3-r1.ebuild      |  31 +
>  www-servers/nginx/nginx-1.27.4-r1.ebuild      |  31 +
>  www-servers/nginx/nginx-9999.ebuild           |  29 +
>  92 files changed, 3966 insertions(+), 118 deletions(-)
>  rename 
> app-metrics/nginx-lua-prometheus/{nginx-lua-prometheus-0.1_pre20170610-r100.ebuild
>  => nginx-lua-prometheus-0.1_pre20170610-r101.ebuild} (79%)
>  create mode 100644 dev-lua/lua-resty-core/Manifest
>  create mode 100644 dev-lua/lua-resty-core/lua-resty-core-0.1.30.ebuild
>  create mode 100644 dev-lua/lua-resty-core/metadata.xml
>  create mode 100644 dev-lua/lua-resty-lrucache/Manifest
>  create mode 100644 dev-lua/lua-resty-lrucache/lua-resty-lrucache-0.15.ebuild
>  create mode 100644 dev-lua/lua-resty-lrucache/metadata.xml
>  create mode 100644 dev-lua/lua-resty-memcached/Manifest
>  create mode 100644 
> dev-lua/lua-resty-memcached/lua-resty-memcached-0.17.ebuild
>  create mode 100644 dev-lua/lua-resty-memcached/metadata.xml
>  create mode 100644 dev-lua/lua-resty-mysql/Manifest
>  create mode 100644 dev-lua/lua-resty-mysql/lua-resty-mysql-0.27.ebuild
>  create mode 100644 dev-lua/lua-resty-mysql/metadata.xml
>  create mode 100644 dev-lua/lua-resty-string/Manifest
>  create mode 100644 dev-lua/lua-resty-string/lua-resty-string-0.16.ebuild
>  create mode 100644 dev-lua/lua-resty-string/metadata.xml
>  create mode 100644 dev-perl/Test-Nginx/Manifest
>  create mode 100644 dev-perl/Test-Nginx/Test-Nginx-0.30.ebuild
>  create mode 100644 
> dev-perl/Test-Nginx/files/Test-Nginx-0.30-preset-temp_path-directives.patch
>  create mode 100644 
> dev-perl/Test-Nginx/files/Test-Nginx-0.30-set-default-error-log.patch
>  create mode 100644 dev-perl/Test-Nginx/metadata.xml
>  create mode 100644 eclass/nginx-module.eclass
>  create mode 100644 eclass/nginx.eclass
>  create mode 100644 www-nginx/metadata.xml
>  create mode 100644 www-nginx/ngx-brotli/Manifest
>  create mode 100644 www-nginx/ngx-brotli/metadata.xml
>  create mode 100644 www-nginx/ngx-brotli/ngx-brotli-20231109.ebuild
>  create mode 100644 www-nginx/ngx-echo/Manifest
>  create mode 100644 www-nginx/ngx-echo/metadata.xml
>  create mode 100644 www-nginx/ngx-echo/ngx-echo-0.63.ebuild
>  create mode 100644 www-nginx/ngx-encrypted-session/Manifest
>  create mode 100644 www-nginx/ngx-encrypted-session/metadata.xml
>  create mode 100644 
> www-nginx/ngx-encrypted-session/ngx-encrypted-session-0.09.ebuild
>  create mode 100644 www-nginx/ngx-eval/Manifest
>  create mode 100644 www-nginx/ngx-eval/metadata.xml
>  create mode 100644 www-nginx/ngx-eval/ngx-eval-0_p20240817.ebuild
>  create mode 100644 www-nginx/ngx-headers-more/Manifest
>  create mode 100644 www-nginx/ngx-headers-more/metadata.xml
>  create mode 100644 www-nginx/ngx-headers-more/ngx-headers-more-0.37.ebuild
>  create mode 100644 www-nginx/ngx-iconv/Manifest
>  create mode 100644 
> www-nginx/ngx-iconv/files/ngx-iconv-0.14-skip-rds-json-tests.patch
>  create mode 100644 www-nginx/ngx-iconv/metadata.xml
>  create mode 100644 www-nginx/ngx-iconv/ngx-iconv-0.14.ebuild
>  create mode 100644 www-nginx/ngx-lua-module/Manifest
>  create mode 100644 
> www-nginx/ngx-lua-module/files/ngx-lua-module-0.10.27-always-define-NDK.patch
>  create mode 100644 
> www-nginx/ngx-lua-module/files/ngx-lua-module-0.10.27-do-not-log-non-openresty-lua.patch
>  create mode 100644 www-nginx/ngx-lua-module/metadata.xml
>  create mode 100644 www-nginx/ngx-lua-module/ngx-lua-module-0.10.27.ebuild
>  create mode 100644 www-nginx/ngx-lua-upstream/Manifest
>  create mode 100644 
> www-nginx/ngx-lua-upstream/files/ngx-lua-upstream-0.07-skip-invalid-tests.patch
>  create mode 100644 www-nginx/ngx-lua-upstream/metadata.xml
>  create mode 100644 www-nginx/ngx-lua-upstream/ngx-lua-upstream-0.07.ebuild
>  create mode 100644 www-nginx/ngx-memc/Manifest
>  create mode 100644 
> www-nginx/ngx-memc/files/ngx-memc-0.20-stats_t-do-not-run-timeout-test.patch
>  create mode 100644 www-nginx/ngx-memc/metadata.xml
>  create mode 100644 www-nginx/ngx-memc/ngx-memc-0.20.ebuild
>  create mode 100644 www-nginx/ngx-set-misc/Manifest
>  create mode 100644 
> www-nginx/ngx-set-misc/files/ngx-set-misc-0.33-hmac-configurable.patch
>  create mode 100644 
> www-nginx/ngx-set-misc/files/ngx-set-misc-0.33-skip-hashed-upstream_t-test.patch
>  create mode 100644 www-nginx/ngx-set-misc/metadata.xml
>  create mode 100644 www-nginx/ngx-set-misc/ngx-set-misc-0.33.ebuild
>  create mode 100644 www-nginx/ngx-srcache/Manifest
>  create mode 100644 
> www-nginx/ngx-srcache/files/ngx-srcache-0.33-disable-invalid-tests.patch
>  create mode 100644 www-nginx/ngx-srcache/metadata.xml
>  create mode 100644 www-nginx/ngx-srcache/ngx-srcache-0.33.ebuild
>  create mode 100644 www-nginx/ngx-upload-progress/Manifest
>  create mode 100644 www-nginx/ngx-upload-progress/metadata.xml
>  create mode 100644 
> www-nginx/ngx-upload-progress/ngx-upload-progress-0.9.3.ebuild
>  create mode 100644 www-nginx/ngx-xss/Manifest
>  create mode 100644 
> www-nginx/ngx-xss/files/ngx-xss-0.06-add-dynamic-build-support.patch
>  create mode 100644 www-nginx/ngx-xss/metadata.xml
>  create mode 100644 www-nginx/ngx-xss/ngx-xss-0.06.ebuild
>  create mode 100644 www-nginx/ngx_devel_kit/Manifest
>  create mode 100644 www-nginx/ngx_devel_kit/metadata.xml
>  create mode 100644 www-nginx/ngx_devel_kit/ngx_devel_kit-0.3.4.ebuild
>  create mode 100644 www-servers/nginx/files/nginx-r1.confd
>  create mode 100644 www-servers/nginx/files/nginx-r2.logrotate
>  create mode 100644 www-servers/nginx/files/nginx-r2.service
>  create mode 100644 www-servers/nginx/files/nginx-r4.conf
>  create mode 100644 www-servers/nginx/files/nginx-r5.initd
>  create mode 100644 www-servers/nginx/files/nginx.tmpfiles
>  create mode 100644 www-servers/nginx/nginx-1.26.3-r1.ebuild
>  create mode 100644 www-servers/nginx/nginx-1.27.4-r1.ebuild
>  create mode 100644 www-servers/nginx/nginx-9999.ebuild
>
> --
> 2.45.3
>
>


--
Z. Liu

Reply via email to