如何为 Docker 构建静态编译的 htpasswd

问题描述

我想将静态编译的 htpasswd 二进制文件包含到我的 docker 映像中,以便我可以在不安装任何库的情况下运行它。

如果我理解正确,当我从 Linux 包 (Fedora) 安装 htpasswd 时,它是动态编译的,我不能只是将它从我的计算机复制到 docker 镜像。

所以我尝试编译 apache 最新版本 (2.4.46)。这是我的方法:

  1. https://httpd.apache.org/download.cgi 下载 apache 源并解压到 httpd-2.4.46
  2. https://apr.apache.org/download.cgi 下载 apr (1​​.7.0) 并解压到 httpd-2.4.46/srclib/apr
  3. 从同一页面下载 apr-util (1.6.1) 并解压到 httpd-2.4.46/srclib/apr-util
  4. cd httpd-2.4.46
  5. 使用 ./configure --with-included-apr --enable-static-htpasswd 进行配置。然后我可以看到这样的日志 setting htpasswd_LTFLAGS to "-static"。一切顺利通过,退出代码为 0。
  6. 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...