Nginx1.13.4 static on Debian 9 (Stretch)

Claudiu Rad jazzman at misalpina.net
Wed Aug 16 12:38:28 UTC 2017



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



More information about the nginx mailing list