On 8/14/2017 8:59 PM, Claudiu Rad wrote:
On 8/14/2017 4:44 PM, Maxim Dounin wrote:
Hello!
On Mon, Aug 14, 2017 at 04:15:00PM +0300, Claudiu Rad wrote:
Hello,
I'm trying a static build of nginx. Sorry if this may have been
answered
before but I couldn't find anything closer than
https://trac.nginx.org/nginx/ticket/903.
Downloaded http://nginx.org/download/nginx-1.13.4.tar.gz. In the
sources
folder:
./configure --prefix=/opt/nginx --with-cc-opt="-static
-static-libgcc" --with-ld-opt="-Bstatic -static -static-libgcc
-static-libstdc++"
Build fails with the following result
...
objs/ngx_modules.o \
-Bstatic -static -static-libgcc -static-libstdc++ -ldl -lpthread
-lcrypt -lpcre -lz
objs/src/core/nginx.o: In function `ngx_load_module':
/tmp/nginx-static/nginx-1.13.4/src/core/nginx.c:1522: warning: Using
'dlopen' in statically linked applications requires at runtime the
shared libraries from the glibc version used for linking
objs/src/os/unix/ngx_process_cycle.o: In function
`ngx_worker_process_init':
/tmp/nginx-static/nginx-1.13.4/src/os/unix/ngx_process_cycle.c:835:
warning: Using 'initgroups' in statically linked applications
requires at runtime the shared libraries from the glibc version used
for linking
objs/src/core/nginx.o: In function `ngx_set_user':
/tmp/nginx-static/nginx-1.13.4/src/core/nginx.c:1228: warning: Using
'getgrnam' in statically linked applications requires at runtime the
shared libraries from the glibc version used for linking
/tmp/nginx-static/nginx-1.13.4/src/core/nginx.c:1216: warning: Using
'getpwnam' in statically linked applications requires at runtime the
shared libraries from the glibc version used for linking
objs/src/core/ngx_inet.o: In function `ngx_inet_resolve_host':
/tmp/nginx-static/nginx-1.13.4/src/core/ngx_inet.c:1127: warning:
Using 'getaddrinfo' in statically linked applications requires at
runtime the shared libraries from the glibc version used for linking
/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/libpcre.a(libpcre_la-pcre_jit_compile.o):
In function `sljit_generate_code':
(.text+0x816): undefined reference to `pthread_mutex_lock'
/usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/libpcre.a(libpcre_la-pcre_jit_compile.o):
In function `sljit_generate_code':
(.text+0x91b): undefined reference to `pthread_mutex_unlock'
[...]
Am I missing anything? I tried passing various static instructions to
CC/LD as seen for example here:
https://trac.nginx.org/nginx/ticket/903.
What's the right way to do this?
Build fails because PCRE requires `-lpthread` on your system.
Try something like
./configure --with-ld-opt="-static -lpcre -lpthread" ...
Thank you!
Indeed, using
./configure --prefix=/opt/nginx --with-ld-opt="-static -lpcre -lpthread"
I only get the following warnings for now:
objs/ngx_modules.o \
-static -lpcre -lpthread -ldl -lcrypt -lpcre -lz
objs/src/core/nginx.o: In function `ngx_load_module':
/tmp/nginx-static/nginx-1.13.4/src/core/nginx.c:1522: warning: Using
'dlopen' in statically linked applications requires at runtime the
shared libraries from the glibc version used for linking
objs/src/os/unix/ngx_process_cycle.o: In function
`ngx_worker_process_init':
/tmp/nginx-static/nginx-1.13.4/src/os/unix/ngx_process_cycle.c:835:
warning: Using 'initgroups' in statically linked applications requires
at runtime the shared libraries from the glibc version used for linking
objs/src/core/nginx.o: In function `ngx_set_user':
/tmp/nginx-static/nginx-1.13.4/src/core/nginx.c:1228: warning: Using
'getgrnam' in statically linked applications requires at runtime the
shared libraries from the glibc version used for linking
/tmp/nginx-static/nginx-1.13.4/src/core/nginx.c:1216: warning: Using
'getpwnam' in statically linked applications requires at runtime the
shared libraries from the glibc version used for linking
objs/src/core/ngx_inet.o: In function `ngx_inet_resolve_host':
/tmp/nginx-static/nginx-1.13.4/src/core/ngx_inet.c:1127: warning:
Using 'getaddrinfo' in statically linked applications requires at
runtime the shared libraries from the glibc version used for linking
So, first question, maybe a beginner's one, sorry, don't have much
experience with this: How should I treat these warnings? I want to
deploy the static build on multiple machines, most of them running
Debian 8, thus, an older version. Are there things that would not work
because I don't have exactly the same library versions?
Second thing is that I want to add SSL support of course. Simply
adding --with-http_ssl_module would not work until I replaced
-lpthread with -pthread option to LD. Downloaded the latest release:
https://www.openssl.org/source/openssl-1.1.0f.tar.gz and tried:
./configure --prefix=/opt/nginx --with-http_ssl_module
--with-ld-opt="-static -lpcre -pthread" --with-openssl=../openssl-1.1.0f
This works, but when actually trying to run it, I get:
/opt/nginx/sbin/nginx
Illegal instruction
And it doesn't start of course. I also tried using the OpenSSL system
library, thus omitting --with-openssl= but its the same.
Any suggestions?
It seems that using older 1.0.2 series works in this scenario:
./configure --prefix=/opt/nginx --with-http_ssl_module
--with-ld-opt="-static -lpcre -pthread" --with-openssl=../openssl-1.0.2l
So the combination of Debian 9 + OpenSSL 1.1.0 series no longer allows
building a valid static binary. At least not with the previous arguments.
Is there something I am missing?
Where should I file a bug report if this is a bug of some sort?
--
Claudiu
_______________________________________________
nginx mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx