2013/12/4 Khem Raj <[email protected]> > From: "stephen.arnold42" <[email protected]> > > Initial recipe created by Steve Arnold. Original build patch and 1.0.10 > recipe graciously contributed by bencoh (in #oe on irc.freenode.net). > New recipe and init script contributed by this author. Built and > tested on master branches using author's fork of meta-raspberrypi. > > Signed-off-by: stephen.arnold42 <[email protected]> > Signed-off-by: Sébastien Mennetrier <[email protected] > Signed-off-by: Khem Raj <[email protected]> > --- > .../recipes-httpd/nginx/files/nginx-cross.patch | 217 > ++++++++++++++++++++ > .../recipes-httpd/nginx/files/nginx-volatile.conf | 2 + > .../recipes-httpd/nginx/files/nginx.conf | 118 +++++++++++ > .../recipes-httpd/nginx/files/nginx.init | 52 +++++ > meta-webserver/recipes-httpd/nginx/nginx_1.4.4.bb | 120 +++++++++++ > 5 files changed, 509 insertions(+) > create mode 100644 > meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch > create mode 100644 > meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf > create mode 100644 meta-webserver/recipes-httpd/nginx/files/nginx.conf > create mode 100755 meta-webserver/recipes-httpd/nginx/files/nginx.init > create mode 100644 meta-webserver/recipes-httpd/nginx/nginx_1.4.4.bb > > diff --git a/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch > b/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch > new file mode 100644 > index 0000000..5f899a1 > --- /dev/null > +++ b/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch > @@ -0,0 +1,217 @@ > +We do not have capability to run binaries when cross compiling > + > +Upstream-Status: Pending > + > + > +diff -uraN nginx-1.0.11.orig/auto/feature nginx-1.0.11/auto/feature > +--- nginx-1.0.11.orig/auto/feature 2011-05-11 06:50:19.000000000 -0500 > ++++ nginx-1.0.11/auto/feature 2011-12-27 13:56:42.323370040 -0600 > +@@ -48,12 +48,20 @@ > + > + if [ -x $NGX_AUTOTEST ]; then > + > ++ if [ ".$NGX_CROSS_COMPILE" = ".yes" ]; then > ++ NGX_AUTOTEST_EXEC="true" > ++ NGX_FOUND_MSG=" (not tested, cross compiling)" > ++ else > ++ NGX_AUTOTEST_EXEC="$NGX_AUTOTEST" > ++ NGX_FOUND_MSG="" > ++ fi > ++ > + case "$ngx_feature_run" in > + > + yes) > + # /bin/sh is used to intercept "Killed" or "Abort trap" > messages > +- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then > +- echo " found" > ++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; > then > ++ echo " found$NGX_FOUND_MSG" > + ngx_found=yes > + > + if test -n "$ngx_feature_name"; then > +@@ -67,17 +75,27 @@ > + > + value) > + # /bin/sh is used to intercept "Killed" or "Abort trap" > messages > +- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then > +- echo " found" > ++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; > then > ++ echo " found$NGX_FOUND_MSG" > + ngx_found=yes > + > +- cat << END >> $NGX_AUTO_CONFIG_H > ++ if [ ".$NGX_CROSS_COMPILE" = ".yes" ]; then > ++ cat << END >> $NGX_AUTO_CONFIG_H > + > + #ifndef $ngx_feature_name > +-#define $ngx_feature_name `$NGX_AUTOTEST` > ++#define $ngx_feature_name $(eval "echo \$NGX_WITH_${ngx_feature_name}") > + #endif > + > + END > ++ else > ++ cat << END >> $NGX_AUTO_CONFIG_H > ++ > ++#ifndef $ngx_feature_name > ++#define $ngx_feature_name `$NGX_AUTOTEST_EXEC` > ++#endif > ++ > ++END > ++ fi > + else > + echo " found but is not working" > + fi > +@@ -85,7 +103,7 @@ > + > + bug) > + # /bin/sh is used to intercept "Killed" or "Abort trap" > messages > +- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then > ++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; > then > + echo " not found" > + > + else > +diff -uraN nginx-1.0.11.orig/auto/options nginx-1.0.11/auto/options > +--- nginx-1.0.11.orig/auto/options 2011-12-14 07:34:16.000000000 -0600 > ++++ nginx-1.0.11/auto/options 2011-12-27 13:56:42.323370040 -0600 > +@@ -289,6 +289,18 @@ > + --test-build-rtsig) NGX_TEST_BUILD_RTSIG=YES ;; > + --test-build-solaris-sendfilev) > NGX_TEST_BUILD_SOLARIS_SENDFILEV=YES ;; > + > ++ # cross compile support > ++ --with-int=*) NGX_WITH_INT="$value" > ;; > ++ --with-long=*) NGX_WITH_LONG="$value" > ;; > ++ --with-long-long=*) NGX_WITH_LONG_LONG="$value" > ;; > ++ --with-ptr-size=*) NGX_WITH_PTR_SIZE="$value" > ;; > ++ --with-sig-atomic-t=*) NGX_WITH_SIG_ATOMIC_T="$value" > ;; > ++ --with-size-t=*) NGX_WITH_SIZE_T="$value" > ;; > ++ --with-off-t=*) NGX_WITH_OFF_T="$value" > ;; > ++ --with-time-t=*) NGX_WITH_TIME_T="$value" > ;; > ++ --with-sys-nerr=*) NGX_WITH_NGX_SYS_NERR="$value" > ;; > ++ --with-endian=*) NGX_WITH_ENDIAN="$value" > ;; > ++ > + *) > + echo "$0: error: invalid option \"$option\"" > + exit 1 > +@@ -434,6 +446,17 @@ > + > + --with-debug enable debug logging > + > ++ --with-int=VALUE force int size > ++ --with-long=VALUE force long size > ++ --with-long-long=VALUE force long long size > ++ --with-ptr-size=VALUE force pointer size > ++ --with-sig-atomic-t=VALUE force sig_atomic_t size > ++ --with-size-t=VALUE force size_t size > ++ --with-off-t=VALUE force off_t size > ++ --with-time-t=VALUE force time_t size > ++ --with-sys-nerr=VALUE force sys_nerr value > ++ --with-endian=VALUE force system endianess > ++ > + END > + > + exit 1 > +@@ -455,6 +478,8 @@ > + > + if [ ".$NGX_PLATFORM" = ".win32" ]; then > + NGX_WINE=$WINE > ++elif [ ! -z "$NGX_PLATFORM" ]; then > ++ NGX_CROSS_COMPILE="yes" > + fi > + > + > +diff -uraN nginx-1.0.11.orig/auto/types/sizeof > nginx-1.0.11/auto/types/sizeof > +--- nginx-1.0.11.orig/auto/types/sizeof 2006-06-28 > 11:00:26.000000000 -0500 > ++++ nginx-1.0.11/auto/types/sizeof 2011-12-27 13:56:42.323370040 -0600 > +@@ -11,9 +11,12 @@ > + > + END > + > +-ngx_size= > ++ngx_size=$(eval "echo \$NGX_WITH_${ngx_param}") > + > +-cat << END > $NGX_AUTOTEST.c > ++if [ ".$ngx_size" != "." ]; then > ++ echo " $ngx_size bytes" > ++else > ++ cat << END > $NGX_AUTOTEST.c > + > + #include <sys/types.h> > + #include <sys/time.h> > +@@ -31,19 +34,20 @@ > + END > + > + > +-ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ > +- -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs" > ++ ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ > ++ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT > $ngx_feature_libs" > + > +-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1" > ++ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1" > + > + > +-if [ -x $NGX_AUTOTEST ]; then > +- ngx_size=`$NGX_AUTOTEST` > +- echo " $ngx_size bytes" > +-fi > ++ if [ -x $NGX_AUTOTEST ]; then > ++ ngx_size=`$NGX_AUTOTEST` > ++ echo " $ngx_size bytes" > ++ fi > + > + > +-rm -f $NGX_AUTOTEST > ++ rm -f $NGX_AUTOTEST > ++fi > + > + > + case $ngx_size in > +diff -uraN nginx-1.0.11.orig/auto/unix nginx-1.0.11/auto/unix > +--- nginx-1.0.11.orig/auto/unix 2011-12-14 07:34:16.000000000 -0600 > ++++ nginx-1.0.11/auto/unix 2011-12-27 13:56:42.327370060 -0600 > +@@ -393,13 +393,13 @@ > + > + # C types > + > +-ngx_type="int"; . auto/types/sizeof > ++ngx_type="int"; ngx_param="INT"; . auto/types/sizeof > + > +-ngx_type="long"; . auto/types/sizeof > ++ngx_type="long"; ngx_param="LONG"; . auto/types/sizeof > + > +-ngx_type="long long"; . auto/types/sizeof > ++ngx_type="long long"; ngx_param="LONG_LONG"; . auto/types/sizeof > + > +-ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size > ++ngx_type="void *"; ngx_param="PTR_SIZE"; . auto/types/sizeof; > ngx_ptr_size=$ngx_size > + ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value > + > + > +@@ -416,7 +416,7 @@ > + > + ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef > + > +-ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef > ++ngx_type="sig_atomic_t"; ngx_param="SIG_ATOMIC_T"; ngx_types="int"; . > auto/types/typedef > + . auto/types/sizeof > + ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value > + > +@@ -432,15 +432,15 @@ > + > + . auto/endianess > + > +-ngx_type="size_t"; . auto/types/sizeof > ++ngx_type="size_t"; ngx_param="SIZE_T"; . auto/types/sizeof > + ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . > auto/types/value > + ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value > + > +-ngx_type="off_t"; . auto/types/sizeof > ++ngx_type="off_t"; ngx_param="OFF_T"; . auto/types/sizeof > + ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . > auto/types/value > + ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value > + > +-ngx_type="time_t"; . auto/types/sizeof > ++ngx_type="time_t"; ngx_param="TIME_T"; . auto/types/sizeof > + ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value > + ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value > + > diff --git a/meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf > b/meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf > new file mode 100644 > index 0000000..93f3c66 > --- /dev/null > +++ b/meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf > @@ -0,0 +1,2 @@ > +d www www-data 0755 /run/nginx none > +d root root 0755 /var/log/nginx none > diff --git a/meta-webserver/recipes-httpd/nginx/files/nginx.conf > b/meta-webserver/recipes-httpd/nginx/files/nginx.conf > new file mode 100644 > index 0000000..fb7e4b6 > --- /dev/null > +++ b/meta-webserver/recipes-httpd/nginx/files/nginx.conf > @@ -0,0 +1,118 @@ > + > +user www-data; > +worker_processes 1; > + > +error_log /var/log/nginx/error.log; > +#error_log logs/error.log notice; > +#error_log logs/error.log info; > + > +pid /run/nginx/nginx.pid; > + > + > +events { > + worker_connections 1024; > +} > + > + > +http { > + include mime.types; > + default_type application/octet-stream; > + > + log_format main '$remote_addr - $remote_user [$time_local] > "$request" ' > + '$status $body_bytes_sent "$http_referer" ' > + '"$http_user_agent" "$http_x_forwarded_for"'; > + > + access_log /var/log/nginx/access.log main; > + > + sendfile on; > + #tcp_nopush on; > + > + #keepalive_timeout 0; > + keepalive_timeout 65; > + > + #gzip on; > + > + server { > + listen 80; > + server_name localhost; > + > + #charset koi8-r; > + > + #access_log logs/host.access.log main; > + > + location / { > + root /var/www/localhost/html; > + index index.html index.htm; > + } > + > + #error_page 404 /404.html; > + > + # redirect server error pages to the static page /50x.html > + # > + error_page 500 502 503 504 /50x.html; > + location = /50x.html { > + root /var/www/localhost/html; > + } > + > + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 > + # > + #location ~ \.php$ { > + # proxy_pass http://127.0.0.1; > + #} > + > + # pass the PHP scripts to FastCGI server listening on > 127.0.0.1:9000 > + # > + #location ~ \.php$ { > + # root html; > + # fastcgi_pass 127.0.0.1:9000; > + # fastcgi_index index.php; > + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; > + # include fastcgi_params; > + #} > + > + # deny access to .htaccess files, if Apache's document root > + # concurs with nginx's one > + # > + #location ~ /\.ht { > + # deny all; > + #} > + } > + > + > + # another virtual host using mix of IP-, name-, and port-based > configuration > + # > + #server { > + # listen 8000; > + # listen somename:8080; > + # server_name somename alias another.alias; > + > + # location / { > + # root html; > + # index index.html index.htm; > + # } > + #} > + > + > + # HTTPS server > + # > + #server { > + # listen 443; > + # server_name localhost; > + > + # ssl on; > + # ssl_certificate cert.pem; > + # ssl_certificate_key cert.key; > + > + # ssl_session_timeout 5m; > + > + # ssl_protocols SSLv2 SSLv3 TLSv1; > + # ssl_ciphers HIGH:!aNULL:!MD5; > + # ssl_prefer_server_ciphers on; > + > + # location / { > + # root html; > + # index index.html index.htm; > + # } > + #} > + > +} > diff --git a/meta-webserver/recipes-httpd/nginx/files/nginx.init > b/meta-webserver/recipes-httpd/nginx/files/nginx.init > new file mode 100755 > index 0000000..0f38b9c > --- /dev/null > +++ b/meta-webserver/recipes-httpd/nginx/files/nginx.init > @@ -0,0 +1,52 @@ > +#! /bin/sh > +PATH=/sbin:/bin:/usr/sbin:/usr/bin > +DAEMON=/usr/sbin/nginx > +NAME=nginx > +DESC=nginx > +PID=/var/run/nginx/nginx.pid > + > +test -x $DAEMON || exit 0 > + > +# Include nginx defaults if available > +if [ -f /etc/default/nginx ] ; then > + . /etc/default/nginx > +fi > + > +set -e > + > +case "$1" in > + start) > + echo -n "Starting $DESC: " > + start-stop-daemon --start --quiet --pidfile $PID \ > + --name $NAME --exec $DAEMON -- $DAEMON_OPTS > + echo "$NAME." > + ;; > + stop) > + echo -n "Stopping $DESC: " > + start-stop-daemon -K --quiet --pidfile $PID \ > + --name $NAME > + echo "$NAME." > + ;; > + restart|force-reload) > + echo -n "Restarting $DESC: " > + start-stop-daemon -K --quiet --pidfile $PID \ > + --name $NAME > + sleep 1 > + start-stop-daemon --start --quiet --pidfile $PID \ > + --name $NAME --exec $DAEMON -- $DAEMON_OPTS > + echo "$NAME." > + ;; > + reload) > + echo -n "Reloading $DESC configuration: " > + start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \ > + --exec $DAEMON > + echo "$NAME." > + ;; > + *) > + N=/etc/init.d/$NAME > + echo "Usage: $N {start|stop|restart|force-reload}" >&2 > + exit 1 > + ;; > +esac > + > +exit 0 > diff --git > a/meta-webserver/recipes-httpd/nginx/nginx_1.4.4.bbb/meta-webserver/recipes-httpd/nginx/ > nginx_1.4.4.bb > new file mode 100644 > index 0000000..ea2c8bb > --- /dev/null > +++ b/meta-webserver/recipes-httpd/nginx/nginx_1.4.4.bb > @@ -0,0 +1,120 @@ > +SUMMARY = "HTTP and reverse proxy server" > + > +DESCRIPTION = "Nginx is a web server and a reverse proxy server for \ > +HTTP, SMTP, POP3 and IMAP protocols, with a strong focus on high \ > +concurrency, performance and low memory usage." > + > +HOMEPAGE = "http://nginx.org/" > +LICENSE = "BSD-2-Clause" > +LIC_FILES_CHKSUM = "file://LICENSE;md5=917bfdf005ffb6fd025550414ff05a9f" > +SECTION = "net" > + > +DEPENDS = "libpcre gzip openssl" > + > +SRC_URI = " \ > + http://nginx.org/download/nginx-${PV}.tar.gz \ > + file://nginx-cross.patch \ > + file://nginx.conf \ > + file://nginx.init \ > + file://nginx-volatile.conf \ > +" > +SRC_URI[md5sum] = "5dfaba1cbeae9087f3949860a02caa9f" > +SRC_URI[sha256sum] = > "7c989a58e5408c9593da0bebcd0e4ffc3d892d1316ba5042ddb0be5b0b4102b9" > + > +inherit update-rc.d useradd > + > +do_configure () { > + if [ "${SITEINFO_BITS}" = "64" ]; then > + PTRSIZE=8 > + else > + PTRSIZE=4 > + fi > + > + echo $CFLAGS > + echo $LDFLAGS > + > + ./configure \ > + --crossbuild=Linux:${TUNE_ARCH} \ > + --with-endian=${@base_conditional('SITEINFO_ENDIANNESS', 'le', > 'little', 'big', d)} \ > + --with-int=4 \ > + --with-long=${PTRSIZE} \ > + --with-long-long=8 \ > + --with-ptr-size=${PTRSIZE} \ > + --with-sig-atomic-t=${PTRSIZE} \ > + --with-size-t=${PTRSIZE} \ > + --with-off-t=${PTRSIZE} \ > + --with-time-t=${PTRSIZE} \ > + --with-sys-nerr=132 \ > + --conf-path=${sysconfdir}/nginx/nginx.conf \ > + --http-log-path=${localstatedir}/log/nginx/access.log \ > + --error-log-path=${localstatedir}/log/nginx/error.log \ > + --pid-path=/run/nginx/nginx.pid \ > + --prefix=${prefix} \ > + --with-http_ssl_module \ > + --with-http_gzip_static_module > +} > + > +do_install () { > + oe_runmake 'DESTDIR=${D}' install > + rm -fr ${D}${localstatedir}/run ${D}/run > + if ${@base_contains('DISTRO_FEATURES', 'systemd', 'true', 'false', > d)}; then > + install -d ${D}${sysconfdir}/tmpfiles.d > + echo "d /run/${BPN} - - - -" \ > + > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf > + fi > + install -d ${D}${sysconfdir}/${BPN} > + ln -snf ${localstatedir}/run/${BPN} ${D}${sysconfdir}/${BPN}/run > + install -d ${D}${localstatedir}/www/localhost > + mv ${D}/usr/html ${D}${localstatedir}/www/localhost/ > + chown www:www-data -R ${D}${localstatedir} > + > + install -d ${D}${sysconfdir}/init.d > + cat ${WORKDIR}/nginx.init | \ > + sed -e 's,/usr/sbin/,${sbindir}/,g' \ > + -e 's,/etc/,${sysconfdir}/,g' > > ${D}/${sysconfdir}/init.d/nginx > + chmod 755 ${D}/${sysconfdir}/init.d/nginx >
Hi Raj, In previous comments from Koen and Paul on my patches, they said that we must use "sed -i" after installing files because "sed -e" and piping are not easy to understand. ( http://lists.openembedded.org/pipermail/openembedded-devel/2013-December/093327.html ) So I used "install" then "sed -i" in my last patch for this reason. Maybe you should copying this in your merge... > + > + install -d ${D}${sysconfdir}/nginx > + cat ${WORKDIR}/nginx.conf | \ > + sed -e 's,/var/,${localstatedir}/,g' > > ${D}/${sysconfdir}/nginx/nginx.conf > + chmod 644 ${D}/${sysconfdir}/nginx/nginx.conf > + install -d ${D}${sysconfdir}/nginx/sites-enabled > + > + install -d ${D}${sysconfdir}/default/volatiles > + cat ${WORKDIR}/nginx-volatile.conf | \ > + sed -e 's,/var/,${localstatedir}/,g' > > ${D}${sysconfdir}/default/volatiles/99_nginx > + chmod 644 ${D}${sysconfdir}/default/volatiles/99_nginx > +} > + > +pkg_postinst_${PN} () { > + if [ -z "$D" ]; then > + if type systemd-tmpfiles 2>/dev/null; then > + systemd-tmpfiles --create > + elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then > + ${sysconfdir}/init.d/populate-volatile.sh update > + fi > + fi > +} > + > +FILES_${PN} += "${localstatedir}/" > + > +CONFFILES_${PN} = "${sysconfdir}/nginx/nginx.conf \ > + ${sysconfdir}/nginx/fastcgi.conf\ > + ${sysconfdir}/nginx/fastcgi_params \ > + ${sysconfdir}/nginx/koi-utf \ > + ${sysconfdir}/nginx/koi-win \ > + ${sysconfdir}/nginx/mime.types \ > + ${sysconfdir}/nginx/scgi_params \ > + ${sysconfdir}/nginx/uwsgi_params \ > + ${sysconfdir}/nginx/win-utf \ > +" > + > +INITSCRIPT_NAME = "nginx" > +INITSCRIPT_PARAMS = "defaults 92 20" > + > +USERADD_PACKAGES = "${PN}" > +USERADD_PARAM_${PN} = " \ > + --system --no-create-home \ > + --home ${localstatedir}/www/localhost \ > + --groups www-data \ > + --user-group www" > -- > 1.7.10.4 > > _______________________________________________ > Openembedded-devel mailing list > [email protected] > http://lists.openembedded.org/mailman/listinfo/openembedded-devel > _______________________________________________ Openembedded-devel mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-devel
