问题描述
我想将静态编译的 htpasswd
二进制文件包含到我的 docker 映像中,以便我可以在不安装任何库的情况下运行它。
如果我理解正确,当我从 Linux 包 (Fedora) 安装 htpasswd
时,它是动态编译的,我不能只是将它从我的计算机复制到 docker 镜像。
所以我尝试编译 apache 最新版本 (2.4.46)。这是我的方法:
- 从 https://httpd.apache.org/download.cgi 下载 apache 源并解压到
httpd-2.4.46
- 从 https://apr.apache.org/download.cgi 下载 apr (1.7.0) 并解压到
httpd-2.4.46/srclib/apr
- 从同一页面下载 apr-util (1.6.1) 并解压到
httpd-2.4.46/srclib/apr-util
cd httpd-2.4.46
- 使用
./configure --with-included-apr --enable-static-htpasswd
进行配置。然后我可以看到这样的日志setting htpasswd_LTFLAGS to "-static"
。一切顺利通过,退出代码为 0。 - 用
make
制作。退出代码 0,未报告错误。
make
留下这样的关于 htpasswd 编译的日志:
Making all in support
make[1]: Entering directory '/home/XYZ/Downloads/httpd-2.4.46/support'
/home/XYZ/Downloads/httpd-2.4.46/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread -DLINUX -D_REENTRANT -D_GNU_SOURCE -I. -I/home/XYZ/Downloads/httpd-2.4.46/os/unix -I/home/XYZ/Downloads/httpd-2.4.46/include -I/home/XYZ/Downloads/httpd-2.4.46/srclib/apr/include -I/home/XYZ/Downloads/httpd-2.4.46/srclib/apr-util/include -I/home/XYZ/Downloads/httpd-2.4.46/modules/aaa -I/home/XYZ/Downloads/httpd-2.4.46/modules/cache -I/home/XYZ/Downloads/httpd-2.4.46/modules/core -I/home/XYZ/Downloads/httpd-2.4.46/modules/database -I/home/XYZ/Downloads/httpd-2.4.46/modules/filters -I/home/XYZ/Downloads/httpd-2.4.46/modules/ldap -I/home/XYZ/Downloads/httpd-2.4.46/modules/loggers -I/home/XYZ/Downloads/httpd-2.4.46/modules/lua -I/home/XYZ/Downloads/httpd-2.4.46/modules/proxy -I/home/XYZ/Downloads/httpd-2.4.46/modules/http2 -I/home/XYZ/Downloads/httpd-2.4.46/modules/session -I/home/XYZ/Downloads/httpd-2.4.46/modules/ssl -I/home/XYZ/Downloads/httpd-2.4.46/modules/test -I/home/XYZ/Downloads/httpd-2.4.46/server -I/home/XYZ/Downloads/httpd-2.4.46/modules/md -I/home/XYZ/Downloads/httpd-2.4.46/modules/arch/unix -I/home/XYZ/Downloads/httpd-2.4.46/modules/dav/main -I/home/XYZ/Downloads/httpd-2.4.46/modules/generators -I/home/XYZ/Downloads/httpd-2.4.46/modules/mappers -prefer-non-pic -static -c htpasswd.c && touch htpasswd.lo
/home/XYZ/Downloads/httpd-2.4.46/srclib/apr/libtool --silent --mode=link gcc -g -O2 -pthread -o htpasswd -static htpasswd.lo passwd_common.lo /home/XYZ/Downloads/httpd-2.4.46/srclib/apr-util/libaprutil-1.la -lexpat /home/XYZDownloads/httpd-2.4.46/srclib/apr/libapr-1.la -lrt -lcrypt -lpthread -ldl -lcrypt
所以 HTpasswd 被编译为 ls -la support/htpasswd
(889K),在我检查它使用的是什么类型后 file support/htpasswd
,它报告它为动态链接:
$ file support/htpasswd
support/htpasswd: ELF 64-bit LSB executable,x86-64,version 1 (SYSV),dynamically linked,interpreter /lib64/ld-linux-x86-64.so.2,BuildID[sha1]=48e0ecc9ee1d86d5ae88b330d1f5094af6995d46,for GNU/Linux 3.2.0,with debug_info,not stripped
有谁知道我做错了什么,或者静态构建它的正确方法是什么?我尝试了 ./configure --help
报告的多个标志,但它总是动态构建它。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)