I am trying to compile Nginx with Pagespeed from source and I am having a hard time trying to resolve the not found errors I am seeing when I add the configure settings. This is my configure settings:

I am using CentOS 7 - 64 bit

Configure Settings:

sudo ./configure --add-module=/nginx-compile/modules/ngx_pagespeed-release-1.9.32.1-beta \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-http_spdy_module \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector \ 
--param=ssp-buffer-size=4 -m64 -mtune=generic' \
--user=nginx \
--group=nginx

When I add the above in ssh, I am getting the following not found errors and no supported file AIO was found error. Here is the list I get:

Errors after executing Configure:

checking for OS
 + Linux 3.10.0-123.el7.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... not found
checking for C99 variadic macros ... not found
checking for gcc variadic macros ... not found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... not found
checking for O_PATH ... not found
checking for sendfile() ... not found
checking for sendfile64() ... not found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... not found
checking for sched_setaffinity() ... not found
checking for crypt_r() ... not found
checking for sys/vfs.h ... found
checking for poll() ... not found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... not found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... not found
checking for O_DIRECT ... not found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... not found
checking for statvfs() ... not found
checking for dlopen() ... not found
checking for dlopen() in libdl ... not found
checking for sched_yield() ... not found
checking for sched_yield() in librt ... not found
checking for SO_SETFIB ... not found
checking for SO_ACCEPTFILTER ... not found
checking for TCP_DEFER_ACCEPT ... not found
checking for TCP_KEEPIDLE ... not found
checking for TCP_FASTOPEN ... not found
checking for TCP_INFO ... not found
checking for accept4() ... not found
checking for kqueue AIO support ... not found
checking for Linux AIO support ... not found

./configure: no supported file AIO was found
Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only

I also installed the following dependencies before I added the configure settings:

sudo yum install gcc gcc-c++ pcre-devel zlib-devel make unzip openssl-devel

The configuration I used is similar to the configuration settings that comes when I install Nginx using centos inbuilt repo except it has the pagespeed module added.


UPDATE:

The actual problem was the way I've split the line when passing the --params to the configure call which is incorrect and was causing the errors. Thanks to @XavierLucas answer below, the error was resolved once I added --with-cc-opt and --params in 1 line.

EXTENDING:

While the above was the cause for error, I also learnt that its good to have the following libraries installed too in order for Nginx to make the most out of its core features and while having pagespeed module installed:

gcc 
gcc-c++ 
pcre-devel 
zlib-devel 
make 
unzip 
openssl-devel 
libaio-devel
glibc 
glibc-devel 
glibc-headers
libevent
linux-vdso.so.1
libpthread.so.0
libcrypt.so.1
libstdc++.so.6
librt.so.1
libm.so.6
libpcre.so.0
libssl.so.10
libcrypto.so.10
libdl.so.2
libz.so.1
libgcc_s.so.1
libc.so.6
/lib64/ld-linux-x86-64.so.2
libfreebl3.so
libgssapi_krb5.so.2
libkrb5.so.3
libcom_err.so.2
libk5crypto.so.3
libkrb5support.so.0
libkeyutils.so.1
libresolv.so.2
libselinux.so.1

And

yum groupinstall 'Development Tools'
  • Since CentOS 7 should have a 3.10+ kernel, try installing libaio-devel to provide the headers needed for AIO. – cyberx86 Oct 13 '14 at 8:54
  • Thanks for your reply @cyberx86 I installed libaio-devel now by typing sudo yum install libaio-devel. After that when I added the above configure again, I am getting the same errors. – Neel Oct 13 '14 at 8:58
  • Another thing I noticed is I dont see the no supported file AIO was found error if I dont include the --with-cc-opt and --param options. Are they related? – Neel Oct 13 '14 at 9:00
  • 1
    a) Do you have libaio installed (in addition to libaio-devel) b) can you actually compile Nginx without the --add-module parameter you listed (if you can't - then the error is unrelated to pagespeed). c) Try to install the Development Tools group if you can't compile Nginx without pagespeed (yum groupinstall 'Development Tools'); The cc-opt and param specify optimizations and preprocessor directives - there might be some overlap in the function (tuning/optimization) – cyberx86 Oct 13 '14 at 9:19
  • 1
    @blackops_programmer Oh yeah pagespeed is c++, my bad. Check BUILD/nginx-{version}/objs/autoconf.err log. Looks like you are missing gcc and libgcc. And don't remove AIO support it's very important (Asynchronous IO). – Xavier Lucas Oct 13 '14 at 12:18
up vote 3 down vote accepted

To stop a bit the looong chat going on, here's the C/C++ libraries you need for a compiled version of nginx with pagespeed on CentOS:

linux-vdso.so.1
libpthread.so.0
libcrypt.so.1
libstdc++.so.6
librt.so.1
libm.so.6
libpcre.so.0
libssl.so.10
libcrypto.so.10
libdl.so.2
libz.so.1
libgcc_s.so.1
libc.so.6
/lib64/ld-linux-x86-64.so.2
libfreebl3.so
libgssapi_krb5.so.2
libkrb5.so.3
libcom_err.so.2
libk5crypto.so.3
libkrb5support.so.0
libkeyutils.so.1
libresolv.so.2
libselinux.so.1

Check with yum whatprovides <library> in which package it is available and make sure you have all installed.

Edit : Your options are important. For example ssp will limit stackoverflow attacks and has a security purpose. The other options will optimize the binary so it works best for your target arch.

After taking a step back, it seemed weird to me that it would crash on an external library by changing these options. Anyway that's good that you followed the previous steps we discussed so you have the required librairies to get the best performance out of nginx (remember, it's event driven so libevent is a must have !).

Your actual problem comes from the way you pass --params to the configure call. You are trying to split on a new line inside the string itself.

--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector \ 
--param=ssp-buffer-size=4 -m64 -mtune=generic' \

Should be :

--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' \

And then be prepared for the wall of text :)

  • Thanks again Xavier. I am really obliged with your hard working effort on this. I went through the list one by one and the following libraries werent installed before and I've installed them: libpthread.so.0, libstdc++.so.6, libssl.so.10. However the problem is still there only when I use --with-cc-opt and --param parameters. – Neel Oct 13 '14 at 15:34
  • 1
    @blackops_programmer Check updated answer, the issue is with your configure call. – Xavier Lucas Oct 13 '14 at 16:57
  • 1
    you got it spot on. I did split the --params and --with-cc-opt into 2 lines. That was it and you are right. Once I added it in 1 line like you showed it worked fine. I am so relived. See sometimes a small line break can cause a lot of worries. Thank you so much for not giving up and helping me out here. I really do appreciate it. – Neel Oct 13 '14 at 17:59
  • 1
    Its good to know that it is useful to have the additional libraries you had suggested. I didint know that. Also pretty much all the tutorials and docs I've read on this had the bare minimum lib for nginx and pagespeed. I've taken a note and listed these libraries so I can install on my production server especially the libaio-devel. With maintenance of these libs, they all will be automatically updated during yum update right? That should be enough? – Neel Oct 13 '14 at 18:05
  • 1
    @blackops_programmer Yep if you regularly update your system with yum update they'll get updated too. Nginx chooses at compilation time what will be its way to get the best out of what is installed on the system. But if key libraries are missing then unfortunately core parts of the nginx model could be unused. That's why it's so important to have it. – Xavier Lucas Oct 13 '14 at 18:08

This is how to compile nginx 1.10.2 with pagespeed 1.11.33.4 in CentOS 7

yum update
yum install wget curl gcc-c++ pcre-devel zlib-devel make unzip openssl-devel

mkdir /root/custom-nginx
cd /root/custom-nginx

NGINX_VERSION=1.10.2          ### copy and paste, place your nginx version you want to install

wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz

tar zxvf nginx-${NGINX_VERSION}.tar.gz

ls -la ### check downloaded version

cd /root/custom-nginx/nginx-${NGINX_VERSION}/src/http/modules/

https://developers.google.com/speed/pagespeed/module/build_ngx_pagespeed_from_source

go to this page in order to find the latest version

-beta does not mean not stable version, 1.11.33.4 is stable version

NPS_VERSION=1.11.33.4        ### copy and paste, place your pagespeed version you want to install

wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip -O release-${NPS_VERSION}-beta.zip

unzip release-${NPS_VERSION}-beta.zip

mv ngx_pagespeed-release-${NPS_VERSION}-beta ngx_pagespeed
cd ngx_pagespeed

wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz

cd /root/custom-nginx/nginx-${NGINX_VERSION}/

common configuration (nginx installed from repo + pagespeed)

./configure --add-module=/root/custom-nginx/nginx-${NGINX_VERSION}/src/http/modules/ngx_pagespeed --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'


make && make install

Then

nano /etc/init.d/nginx

Make file and paste the code:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -n "$user" ]; then
      if [ -z "`grep $user /etc/passwd`" ]; then
         useradd -M -s /bin/nologin $user
      fi
      options=`$nginx -V 2>&1 | grep 'configure arguments:'`
      for opt in $options; do
          if [ `echo $opt | grep '.*-temp-path'` ]; then
              value=`echo $opt | cut -d "=" -f 2`
              if [ ! -d "$value" ]; then
                  # echo "creating" $value
                  mkdir -p $value && chown -R $user $value
              fi
          fi
       done
    fi
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

Check that /var/ngx_pagespeed_cache folder is created by nginx

edit /etc/nginx/your-domain.conf ### and place your settings

###PAGESPEED###
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
##EXTRA FILTERS
#--> JAVASCRIPT
pagespeed EnableFilters canonicalize_javascript_libraries,rewrite_javascript,combine_javascript,inline_javascript,make_google_analytics_async ;
#--> CSS
pagespeed EnableFilters move_css_above_scripts,move_css_to_head,rewrite_style_attributes,inline_css,inline_google_font_css ;
#--> IMAGES
pagespeed EnableFilters convert_to_webp_lossless,sprite_images,resize_mobile_images,inline_preview_images ;
#--> HTML
pagespeed EnableFilters collapse_whitespace,remove_comments,extend_cache ;
#
##EXTRA MODS
pagespeed LazyloadImagesAfterOnload off ;
pagespeed UseExperimentalJsMinifier on ;
pagespeed LowercaseHtmlNames on ;
pagespeed PreserveUrlRelativity on ;
pagespeed XHeaderValue "Modified By dimitrios" ;
#pagespeed ForceCaching on ;
###PAGESPEED###

Test cofiguration

/usr/sbin/nginx -V  ### must include pagespeed
/usr/sbin/nginx -t  ### syntax must be ok

Warning! Disable your repo to prevent nginx update!

Try this to install our basic dependencies, run:

RedHat, CentOS, or Fedora

sudo yum install gcc-c++ pcre-devel zlib-devel make unzip libuuid-devel

Ubuntu or Debian

sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev

Ref: https://www.modpagespeed.com/doc/build_ngx_pagespeed_from_source

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.