On Sun, Nov 06, 2016 at 08:12:18PM +0100, Clemens Gruber wrote:
> Add nginx package. Heavily inspired by Buildroot's nginx.mk, using their
> revised patches for 1.10.x and the endian patch from Marc Kleine-Budde,
> as well as the nginx.make from the patchset Robert sent, as a starting
> point.

Do you know if anyone has tried to upstream the cross-compile patches?

> But instead of building the modules by default, each module is
> selectable in PTXdist, to allow reducing the binary size.
> 
> Most popular modules are supported, systemd unit file and basic
> configuration files are included as well.
> Supports SSL, HTTP/2, HTTP Proxying, GZIP, Auth Basic, Rewrite, FastCGI,
> SCGI, uWSGI, etc.
> 
> Signed-off-by: Clemens Gruber <clemens.gru...@pqgruber.com>
> ---
>  ...izeof-rework-autotest-to-be-cross-compila.patch |  87 +++++++++
>  ...e-add-mechanism-allowing-to-force-feature.patch | 135 +++++++++++++
>  ...x_feature_run_force_result-for-each-featu.patch | 213 
> +++++++++++++++++++++
>  ...0004-auto-lib-libxslt-conf-use-pkg-config.patch |  31 +++
>  ...nix-make-sys_nerr-guessing-cross-friendly.patch | 138 +++++++++++++
>  ...0006-auto-lib-openssl-conf-use-pkg-config.patch |  31 +++
>  .../0007-auto-lib-libgd-conf-use-pkg-config.patch  |  31 +++
>  ...-ngx_linux_config.h-only-include-dlfcn.h-.patch |  33 ++++
>  ...ness-add-mechanism-allowing-to-force-resu.patch |  26 +++
>  patches/nginx-1.10.2/series                        |  11 ++
>  projectroot/etc/nginx/mime.types                   |  89 +++++++++

Why did you add this file? nginx installs it into pkgdir and
install_alternative will use that as a fallback.

>  projectroot/etc/nginx/nginx.conf                   |  39 ++++
>  projectroot/lib/systemd/system/nginx.service       |  14 ++
>  projectroot/usr/lib/tmpfiles.d/nginx.conf          |  10 +
>  rules/nginx.in                                     | 170 ++++++++++++++++
>  rules/nginx.make                                   | 209 ++++++++++++++++++++
>  16 files changed, 1267 insertions(+)
>  create mode 100644 
> patches/nginx-1.10.2/0001-auto-type-sizeof-rework-autotest-to-be-cross-compila.patch
>  create mode 100644 
> patches/nginx-1.10.2/0002-auto-feature-add-mechanism-allowing-to-force-feature.patch
>  create mode 100644 
> patches/nginx-1.10.2/0003-auto-set-ngx_feature_run_force_result-for-each-featu.patch
>  create mode 100644 
> patches/nginx-1.10.2/0004-auto-lib-libxslt-conf-use-pkg-config.patch
>  create mode 100644 
> patches/nginx-1.10.2/0005-auto-unix-make-sys_nerr-guessing-cross-friendly.patch
>  create mode 100644 
> patches/nginx-1.10.2/0006-auto-lib-openssl-conf-use-pkg-config.patch
>  create mode 100644 
> patches/nginx-1.10.2/0007-auto-lib-libgd-conf-use-pkg-config.patch
>  create mode 100644 
> patches/nginx-1.10.2/0008-src-os-unix-ngx_linux_config.h-only-include-dlfcn.h-.patch
>  create mode 100644 
> patches/nginx-1.10.2/0100-auto-endianness-add-mechanism-allowing-to-force-resu.patch
>  create mode 100644 patches/nginx-1.10.2/series
>  create mode 100644 projectroot/etc/nginx/mime.types
>  create mode 100644 projectroot/etc/nginx/nginx.conf
>  create mode 100644 projectroot/lib/systemd/system/nginx.service
>  create mode 100644 projectroot/usr/lib/tmpfiles.d/nginx.conf
>  create mode 100644 rules/nginx.in
>  create mode 100644 rules/nginx.make
> 
[...]
> diff --git a/projectroot/etc/nginx/nginx.conf 
> b/projectroot/etc/nginx/nginx.conf
> new file mode 100644
> index 0000000..5801e12
> --- /dev/null
> +++ b/projectroot/etc/nginx/nginx.conf
> @@ -0,0 +1,39 @@
> +worker_processes 1;  # Enough for most webservers and incurs less latency
> +#worker_processes auto;      # Auto-detect based on CPU count
> +
> +events {
> +     use epoll;
> +     worker_connections 1024;
> +     #multi_accept on;       # Should be enabled if worker_processes > 1
> +}
> +
> +http {
> +     server_tokens off;
> +
> +     sendfile on;
> +
> +     include /etc/nginx/mime.types;
> +     default_type application/octet-stream;
> +
> +     access_log off;
> +     error_log stderr;
> +
> +     gzip on;
> +     gzip_disable "msie6";
> +
> +     server {
> +             listen 80;
> +             listen [::]:80;
> +             server_name _;
> +
> +             index index.html;
> +             root /var/www;
> +
> +             location / {
> +                     # First attempt to serve request as file, then
> +                     # as directory, then fall back to displaying a 404.
> +                     try_files $uri $uri/ =404;
> +             }
> +     }
> +}
> +
> diff --git a/projectroot/lib/systemd/system/nginx.service 
> b/projectroot/lib/systemd/system/nginx.service
> new file mode 100644
> index 0000000..a6a1a4d
> --- /dev/null
> +++ b/projectroot/lib/systemd/system/nginx.service
> @@ -0,0 +1,14 @@
> +[Unit]
> +Description=NGINX HTTP and reverse proxy server
> +After=syslog.target network.target nss-lookup.target
> +
> +[Service]
> +Type=forking
> +PIDFile=/run/nginx.pid
> +ExecStartPre=/usr/sbin/nginx -t
> +ExecStart=/usr/sbin/nginx
> +ExecReload=/bin/kill -s HUP $MAINPID
> +ExecStop=/bin/kill -s QUIT $MAINPID
> +
> +[Install]
> +WantedBy=multi-user.target
> diff --git a/projectroot/usr/lib/tmpfiles.d/nginx.conf 
> b/projectroot/usr/lib/tmpfiles.d/nginx.conf
> new file mode 100644
> index 0000000..138b675
> --- /dev/null
> +++ b/projectroot/usr/lib/tmpfiles.d/nginx.conf
> @@ -0,0 +1,10 @@
> +# systemd tmpfile settings for nginx
> +# See tmpfiles.d(5) for details
> +
> +d /var/log/nginx 0755 root root -
> +d /var/tmp/nginx 0755 www www
> +d /var/tmp/nginx/client 0755 www www
> +d /var/tmp/nginx/proxy 0755 www www
> +d /var/tmp/nginx/fastcgi 0755 www www
> +d /var/tmp/nginx/scgi 0755 www www
> +d /var/tmp/nginx/uwsgi 0755 www www
> diff --git a/rules/nginx.in b/rules/nginx.in
> new file mode 100644
> index 0000000..00aa202
> --- /dev/null
> +++ b/rules/nginx.in
> @@ -0,0 +1,170 @@
> +## SECTION=networking
> +menuconfig NGINX
> +     tristate
> +     prompt "nginx                         "
> +     select GCCLIBS_GCC_S
> +     select LIBC_DL
> +     select LIBC_PTHREAD
> +     select LIBC_CRYPT
> +     select LIBPCRE                  if NGINX_PCRE
> +     select OPENSSL                  if NGINX_OPENSSL
> +     select ZLIB                     if NGINX_HTTP_GZIP_MODULE || 
> NGINX_HTTP_GZIP_STATIC_MODULE
> +     help
> +       nginx ("engine X") is a high-performance web and reverse
> +       proxy server created by Igor Sysoev. It can be used both as
> +       a standalone web server and as a proxy to reduce the load on
> +       backend servers.
> +
> +if NGINX
> +
> +menu "Base settings                 "
> +
> +config NGINX_OPENSSL
> +     bool
> +     prompt "OpenSSL support"
> +     help
> +       Include OpenSSL support, which is required for the
> +       ngx_http_ssl_module.
> +
> +config NGINX_PCRE
> +     bool
> +     select LIBPCRE

remove.

> +     prompt "PCRE support"
> +     help
> +       Include pcre support, which is required for regular
> +       expressions support in the location directive and for the
> +       ngx_http_rewrite_module module.
> +
> +if NGINX_PCRE
> +
> +config NGINX_PCRE_JIT
> +     bool
> +     prompt "Enable PCRE JIT"
> +     help
> +       Enables the use of just-in-time compilation for regular
> +       expressions known by the time of configuration parsing.
> +       PCRE JIT can significantly speed up processing of regular
> +       expressions.
> +
> +endif
> +
> +config NGINX_THREADS
> +     bool
> +     prompt "Threads support"
> +     help
> +       Enable multi-threading. Files can be read and sent without
> +       blocking a worker process. Requires epoll as connection
> +       processing method.
> +
> +endmenu
> +
> +menu "Modules                       "
> +
> +config NGINX_HTTP_ACCESS_MODULE
> +     bool
> +     prompt "ngx_http_access_module"
> +     help
> +       ngx_http_access_module allows limiting access to certain
> +       client addresses.
> +
> +config NGINX_HTTP_AUTH_BASIC_MODULE
> +     bool
> +     prompt "ngx_http_auth_basic_module"
> +     help
> +       ngx_http_auth_basic_module allows limiting access to
> +       resources by validating the user name and password using the
> +       HTTP Basic Authentication protocol.
> +
> +config NGINX_HTTP_AUTOINDEX_MODULE
> +     bool
> +     prompt "ngx_http_autoindex_module"
> +     help
> +       ngx_http_autoindex_module processes requests ending with the
> +       slash character and produces a directory listing.
> +
> +config NGINX_HTTP_FASTCGI_MODULE
> +     bool
> +     prompt "ngx_http_fastcgi_module"
> +     help
> +       ngx_http_fastcgi_module allows passing requests to a FastCGI
> +       server.
> +
> +config NGINX_HTTP_GZIP_MODULE
> +     bool
> +     prompt "ngx_http_gzip_module"
> +     help
> +       ngx_http_gzip_module is a filter that compresses responses
> +       using gzip.
> +
> +config NGINX_HTTP_GZIP_STATIC_MODULE
> +     bool
> +     prompt "ngx_http_gzip_static_module"
> +     help
> +       ngx_http_gzip_static_module allows sending precompressed files
> +       with the .gz filename extension instead of regular files.
> +
> +config NGINX_HTTP_PROXY_MODULE
> +     bool
> +     prompt "ngx_http_proxy_module"
> +     help
> +       ngx_http_proxy_module allows passing requests to another
> +       server.
> +
> +config NGINX_HTTP_REWRITE_MODULE
> +     bool
> +     select NGINX_PCRE
> +     prompt "ngx_http_rewrite_module"
> +     help
> +       ngx_http_rewrite_module module is used to change request URI
> +       using PCRE regular expressions, return redirects, and
> +       conditionally select configurations.
> +
> +config NGINX_HTTP_SCGI_MODULE
> +     bool
> +     prompt "ngx_http_scgi_module"
> +     help
> +       ngx_http_scgi_module allows passing requests to a SCGI
> +       server.
> +
> +config NGINX_HTTP_SSL_MODULE
> +     bool
> +     select NGINX_OPENSSL
> +     prompt "ngx_http_ssl_module"
> +     help
> +       ngx_http_ssl_module provides the necessary support for HTTPS.
> +
> +config NGINX_HTTP_UWSGI_MODULE
> +     bool
> +     prompt "ngx_http_uwsgi_module"
> +     help
> +       ngx_http_uwsgi_module allows passing requests to a uWSGI
> +       server.
> +
> +config NGINX_HTTP_V2_MODULE
> +     bool
> +     select NGINX_OPENSSL
> +     prompt "ngx_http_v2_module"
> +     help
> +       ngx_http_v2_module provides support for HTTP/2.
> +
> +endmenu
> +
> +menu "Startup                       "
> +
> +config NGINX_SYSTEMD_UNIT
> +     bool
> +     default y
> +     depends on SYSTEMD
> +     prompt "Install systemd unit files for nginx"
> +
> +endmenu
> +
> +config NGINX_POPULATE_TEST_WEBSITE
> +     bool
> +     default y
> +     prompt "Populate a generic test website"
> +     help
> +       This install a generic website into /var/www/index.html
> +       from <ptxdist-install>/projectroot/var/www/httpd.html.
> +
> +endif
> diff --git a/rules/nginx.make b/rules/nginx.make
> new file mode 100644
> index 0000000..4cc0dd2
> --- /dev/null
> +++ b/rules/nginx.make
> @@ -0,0 +1,209 @@
> +# -*-makefile-*-
> +#
> +# Copyright (C) 2015 by Marc Kleine-Budde <m...@pengutronix.de>
> +# Copyright (C) 2016 by Clemens Gruber <clemens.gru...@pqgruber.com>
> +#
> +# See CREDITS for details about who has contributed to this project.
> +#
> +# For further information about the PTXdist project and license conditions
> +# see the README file.
> +#
> +
> +#
> +# We provide this package
> +#
> +PACKAGES-$(PTXCONF_NGINX) += nginx
> +
> +#
> +# Paths and names
> +#
> +NGINX_VERSION        := 1.10.2
> +NGINX_MD5    := e8f5f4beed041e63eb97f9f4f55f3085
> +NGINX                := nginx-$(NGINX_VERSION)
> +NGINX_SUFFIX := tar.gz
> +NGINX_URL    := https://nginx.org/download/$(NGINX).$(NGINX_SUFFIX)
> +NGINX_SOURCE := $(SRCDIR)/$(NGINX).$(NGINX_SUFFIX)
> +NGINX_DIR    := $(BUILDDIR)/$(NGINX)
> +NGINX_LICENSE        := BSD-2-Clause
> +
> +# 
> ----------------------------------------------------------------------------
> +# Prepare
> +# 
> ----------------------------------------------------------------------------
> +
> +NGINX_CONF_ENV := \
> +     ngx_force_c_compiler=yes \
> +     ngx_force_c99_have_variadic_macros=yes \
> +     ngx_force_gcc_have_variadic_macros=yes \
> +     ngx_force_gcc_have_atomic=yes \
> +     ngx_force_have_libatomic=no \
> +     ngx_force_have_epoll=yes \
> +     ngx_force_have_sendfile=yes \
> +     ngx_force_have_sendfile64=yes \
> +     ngx_force_have_pr_set_dumpable=yes \
> +     ngx_force_have_timer_event=yes \
> +     ngx_force_have_map_anon=yes \
> +     ngx_force_have_map_devzero=yes \
> +     ngx_force_have_sysvshm=yes \
> +     ngx_force_have_posix_sem=yes
> +
> +ifdef PTXCONF_ENDIAN_LITTLE
> +NGINX_CONF_ENV += ngx_force_have_little_endian=yes
> +endif
> +
> +NGINX_CONF_TOOL := autoconf
> +NGINX_CONF_OPT := \
> +     --crossbuild=Linux::$(PTXCONF_ARCH_STRING) \
> +     --with-cc=$(CROSS_CC) \
> +     --with-cpp=$(CROSS_CC) \
> +     --with-cc-opt=-O2 \
> +     --prefix=/usr/share/nginx \
> +     --conf-path=/etc/nginx/nginx.conf \
> +     --sbin-path=/usr/sbin/nginx \
> +     --pid-path=/run/nginx.pid \
> +     --lock-path=/var/lock/nginx.lock \
> +     --user=www \
> +     --group=www \
> +     --http-log-path=off \
> +     --error-log-path=stderr \
> +     --http-client-body-temp-path=/var/tmp/nginx/client-body \
> +     --http-proxy-temp-path=/var/tmp/nginx/proxy \
> +     --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
> +     --http-scgi-temp-path=/var/tmp/nginx/scgi \
> +     --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
> +     --$(call ptx/wwo, PTXCONF_NGINX_PCRE)-pcre \
> +     --without-http_browser_module \
> +     --without-http_charset_module \
> +     --without-http_empty_gif_module \
> +     --without-http_geo_module \
> +     --without-http_limit_conn_module \
> +     --without-http_limit_req_module \
> +     --without-http_map_module \
> +     --without-http_memcached_module \
> +     --without-http_referer_module \
> +     --without-http_split_clients_module \
> +     --without-http_ssi_module \
> +     --without-http_upstream_hash_module \
> +     --without-http_upstream_ip_hash_module \
> +     --without-http_upstream_keepalive_module \
> +     --without-http_upstream_least_conn_module \
> +     --without-http_upstream_zone_module \
> +     --without-http_userid_module \
> +     --without-mail_imap_module \
> +     --without-mail_pop3_module \
> +     --without-mail_smtp_module \
> +     --without-stream_access_module \
> +     --without-stream_limit_conn_module \
> +     --without-stream_upstream_hash_module \
> +     --without-stream_upstream_least_conn_module \
> +     --without-stream_upstream_zone_module
> +
> +# Note: Settings and module options are *not* symmetric.
> +#       If a module is on by default, a without option exists.
> +#       If it is off by default, a with option exists.
> +
> +# Opt-in settings
> +

NGINX_CONF_OPT += \
        $(call ptx/ifdef, PTXCONF_*,--with-*) \
        [...]

For each Opt-in/Opt-out etc. group. Or just one block with all modules. Or
make list + foreach magic like I handled the gstreamer plugins. Either way
is fine, I just want this to be more compact.

> +ifdef PTXCONF_GLOBAL_IPV6
> +NGINX_CONF_OPT += --with-ipv6
> +endif
> +
> +ifdef PTXCONF_NGINX_PCRE_JIT
> +NGINX_CONF_OPT += --with-pcre-jit
> +endif
> +
> +ifdef PTXCONF_NGINX_THREADS
> +NGINX_CONF_OPT += --with-threads
> +endif
> +
> +# Opt-in modules
> +
> +ifdef PTXCONF_NGINX_HTTP_GZIP_STATIC_MODULE
> +NGINX_CONF_OPT += --with-http_gzip_static_module
> +endif
> +
> +ifdef PTXCONF_NGINX_HTTP_SSL_MODULE
> +NGINX_CONF_OPT += --with-http_ssl_module
> +endif
> +
> +ifdef PTXCONF_NGINX_HTTP_V2_MODULE
> +NGINX_CONF_OPT += --with-http_v2_module
> +endif
> +
> +# Opt-out modules
> +
> +ifndef PTXCONF_NGINX_HTTP_ACCESS_MODULE
> +NGINX_CONF_OPT += --without-http_access_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_AUTH_BASIC_MODULE
> +NGINX_CONF_OPT += --without-http_auth_basic_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_AUTOINDEX_MODULE
> +NGINX_CONF_OPT += --without-http_autoindex_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_FASTCGI_MODULE
> +NGINX_CONF_OPT += --without-http_fastcgi_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_GZIP_MODULE
> +NGINX_CONF_OPT += --without-http_gzip_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_PROXY_MODULE
> +NGINX_CONF_OPT += --without-http_proxy_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_REWRITE_MODULE
> +NGINX_CONF_OPT += --without-http_rewrite_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_SCGI_MODULE
> +NGINX_CONF_OPT += --without-http_scgi_module
> +endif
> +
> +ifndef PTXCONF_NGINX_HTTP_UWSGI_MODULE
> +NGINX_CONF_OPT += --without-http_uwsgi_module
> +endif
> +
> +
> +# 
> ----------------------------------------------------------------------------
> +# Target-Install
> +# 
> ----------------------------------------------------------------------------
> +
> +$(STATEDIR)/nginx.targetinstall:
> +     @$(call targetinfo)
> +
> +     @$(call install_init, nginx)
> +     @$(call install_fixup, nginx,PRIORITY,optional)
> +     @$(call install_fixup, nginx,SECTION,base)
> +     @$(call install_fixup, nginx,AUTHOR,"Clemens Gruber 
> <clemens.gru...@pqgruber.com>")
> +     @$(call install_fixup, nginx,DESCRIPTION,missing)
> +
> +     @$(call install_copy, nginx, 0, 0, 0755, -, /usr/sbin/nginx)
> +
> +     @$(call install_alternative, nginx, 0, 0, 0644, /etc/nginx/nginx.conf)
> +     @$(call install_alternative, nginx, 0, 0, 0644, /etc/nginx/mime.types)
> +
> +ifdef PTXCONF_NGINX_POPULATE_TEST_WEBSITE
> +     @$(call install_copy, nginx, 12, 102, 0644, \

use user/group names, not numbers.

> +             $(PTXDIST_TOPDIR)/projectroot/var/www/httpd.html, \
> +             /var/www/index.html)

Use install_alternative here (untested):

        @$(call install_alternatice, nginx, www, www, 0644, \
                /projectroot/var/www/httpd.html, n, \
                /var/www/index.html)

> +endif
> +
> +ifdef PTXCONF_NGINX_SYSTEMD_UNIT
> +     @$(call install_alternative, nginx, 0, 0, 0644, 
> /lib/systemd/system/nginx.service)
> +     @$(call install_link, nginx, ../nginx.service, \
> +             /lib/systemd/system/multi-user.target.wants/nginx.service)
> +endif
> +
> +ifdef PTXCONF_SYSTEMD

No, never use an option from a different package directly. Either install
this unconditionally (I'd prefer that) or add an options without prompt
that defaults to SYSTEMD.

Michael

> +     @$(call install_alternative, nginx, 0, 0, 0644, 
> /usr/lib/tmpfiles.d/nginx.conf)
> +endif
> +
> +     @$(call install_finish, nginx)
> +
> +     @$(call touch)
> +
> +# vim: syntax=make
> -- 
> 2.10.2
> 
> 
> _______________________________________________
> ptxdist mailing list
> ptxdist@pengutronix.de

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

Reply via email to