LINUX.ORG.RU

История изменений

Исправление EXL, (текущая версия) :

Посмотрел, просто так её похоже хрен соберёшь.

Вот такой рецепт лови:

sudo apt install git gcc build-essential libtool libtool-bin

git clone https://github.com/apache/httpd --depth=1 -b trunk

cd httpd/srclib/

git clone https://github.com/apache/apr --depth=1 -b trunk

cd ../

./buildconf
CFLAGS=-static ./configure  --enable-static --disable-shared --enable-static-support --enable-static-htpasswd

cd srclib/apr
make -j65 # Число ядер у твоего CPU + 1

cd ../../support/

gcc    -static    -DLINUX -D_REENTRANT -D_GNU_SOURCE     -I. -I`pwd`/../os/unix -I`pwd`/../include -I`pwd`/../srclib/apr/include -I`pwd`/../modules/aaa -I`pwd`/../modules/cache -I`pwd`/../modules/core -I`pwd`/../modules/database -I`pwd`/../modules/filters -I`pwd`/../modules/ldap -I`pwd`/../modules/loggers -I`pwd`/../modules/lua -I`pwd`/../modules/proxy -I`pwd`/../modules/http2 -I`pwd`/../modules/session -I`pwd`/../modules/ssl -I`pwd`/../modules/test -I`pwd`/../server -I`pwd`/../modules/md -I`pwd`/../modules/arch/unix -I`pwd`/../modules/dav/main -I`pwd`/../modules/generators -I`pwd`/../server -I`pwd`/../modules/mappers -c passwd_common.c -o 1.o

gcc    -static    -DLINUX -D_REENTRANT -D_GNU_SOURCE     -I. -I`pwd`/../os/unix -I`pwd`/../include -I`pwd`/../srclib/apr/include -I`pwd`/../modules/aaa -I`pwd`/../modules/cache -I`pwd`/../modules/core -I`pwd`/../modules/database -I`pwd`/../modules/filters -I`pwd`/../modules/ldap -I`pwd`/../modules/loggers -I`pwd`/../modules/lua -I`pwd`/../modules/proxy -I`pwd`/../modules/http2 -I`pwd`/../modules/session -I`pwd`/../modules/ssl -I`pwd`/../modules/test -I`pwd`/../server -I`pwd`/../modules/md -I`pwd`/../modules/arch/unix -I`pwd`/../modules/dav/main -I`pwd`/../modules/generators -I`pwd`/../server -I`pwd`/../modules/mappers -c htpasswd.c -o 2.o

gcc -static 1.o 2.o ../srclib/apr/.libs/libapr-2.a /usr/lib/x86_64-linux-gnu/libcrypt.a /usr/lib/x86_64-linux-gnu/libuuid.a -o htpasswd
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(groupinfo.o): in function `apr_gid_name_get':
groupinfo.c:(.text+0x6d): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(groupinfo.o): in function `apr_gid_get':
groupinfo.c:(.text+0x14c): warning: Using 'getgrnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(userinfo.o): in function `getpwnam_safe':
userinfo.c:(.text+0x43): warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(userinfo.o): in function `apr_uid_name_get':
userinfo.c:(.text+0x25f): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(sockaddr.o): in function `call_resolver':
sockaddr.c:(.text+0x920): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(sockaddr.o): in function `apr_getservbyname':
sockaddr.c:(.text+0x120f): warning: Using 'getservbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
ll -h htpasswd
-rwxrwxr-x 1 exl exl 1.8M Dec  1 22:28 htpasswd*

strip -s htpasswd

ll -h htpasswd
-rwxrwxr-x 1 exl exl 1.6M Dec  1 22:29 htpasswd*

ldd htpasswd
	not a dynamic executable

file htpasswd
htpasswd: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=ddf9fdfd8d00bcd93dd8911ddb7fe42bb8ee91a7, for GNU/Linux 3.2.0, stripped

./htpasswd -cbBC 12 fuck this shit
Adding password for user this

Но меня смущают Warning’и.

Короче говоря, со статическими сборками, либами, исполнительными файлами – много проблем. Если тебе нужен условный htpasswd запускаемый везде – нужно юзать не статику, а сборку этой программы в каком-нибудь древнем CentOS 7. Туда же можно накатить arm-компиляторы и получить такую же сборку для arm64, arm32, а флажок -m32 поможет тебе собрать либу под x86 вместо x86_64.

Исходная версия EXL, :

Посмотрел, просто так её похоже хрен соберёшь.

Вот такой рецепт лови:

sudo apt install git gcc build-essential libtool libtool-bin

git clone https://github.com/apache/httpd --depth=1 -b trunk

cd httpd/srclib/

git clone https://github.com/apache/apr --depth=1 -b trunk

cd ../

./buildconf
CFLAGS=-static ./configure  --enable-static --disable-shared --enable-static-support --enable-static-htpasswd

cd srclib/apr
make -j65 # Число ядер у твоего CPU + 1

cd ../../support/

gcc    -static    -DLINUX -D_REENTRANT -D_GNU_SOURCE     -I. -I`pwd`/../os/unix -I`pwd`/../include -I`pwd`/../srclib/apr/include -I`pwd`/../modules/aaa -I`pwd`/../modules/cache -I`pwd`/../modules/core -I`pwd`/../modules/database -I`pwd`/../modules/filters -I`pwd`/../modules/ldap -I`pwd`/../modules/loggers -I`pwd`/../modules/lua -I`pwd`/../modules/proxy -I`pwd`/../modules/http2 -I`pwd`/../modules/session -I`pwd`/../modules/ssl -I`pwd`/../modules/test -I`pwd`/../server -I`pwd`/../modules/md -I`pwd`/../modules/arch/unix -I`pwd`/../modules/dav/main -I`pwd`/../modules/generators -I`pwd`/../server -I`pwd`/../modules/mappers -c passwd_common.c -o passwd_common.lo

gcc -static 1.o 2.o ../srclib/apr/.libs/libapr-2.a /usr/lib/x86_64-linux-gnu/libcrypt.a /usr/lib/x86_64-linux-gnu/libuuid.a -o htpasswd
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(groupinfo.o): in function `apr_gid_name_get':
groupinfo.c:(.text+0x6d): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(groupinfo.o): in function `apr_gid_get':
groupinfo.c:(.text+0x14c): warning: Using 'getgrnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(userinfo.o): in function `getpwnam_safe':
userinfo.c:(.text+0x43): warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(userinfo.o): in function `apr_uid_name_get':
userinfo.c:(.text+0x25f): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(sockaddr.o): in function `call_resolver':
sockaddr.c:(.text+0x920): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: ../srclib/apr/.libs/libapr-2.a(sockaddr.o): in function `apr_getservbyname':
sockaddr.c:(.text+0x120f): warning: Using 'getservbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
ll -h htpasswd
-rwxrwxr-x 1 exl exl 1.8M Dec  1 22:28 htpasswd*

strip -s htpasswd

ll -h htpasswd
-rwxrwxr-x 1 exl exl 1.6M Dec  1 22:29 htpasswd*

ldd htpasswd
	not a dynamic executable

file htpasswd
htpasswd: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=ddf9fdfd8d00bcd93dd8911ddb7fe42bb8ee91a7, for GNU/Linux 3.2.0, stripped

./htpasswd -cbBC 12 fuck this shit
Adding password for user this

Но меня смущают Warning’и.

Короче говоря, со статическими сборками, либами, исполнительными файлами – много проблем. Если тебе нужен условный htpasswd запускаемый везде – нужно юзать не статику, а сборку этой программы в каком-нибудь древнем CentOS 7. Туда же можно накатить arm-компиляторы и получить такую же сборку для arm64, arm32, а флажок -m32 поможет тебе собрать либу под x86 вместо x86_64.