我可以在 Alpine linux 中构建 openssh-portable 源代码吗

我可以在 Alpine linux 中构建 openssh-portable 源代码吗

对于我的项目,我必须自定义 openssh 代码,并且我计划构建 openssh-portable(https://github.com/openssh/openssh-portable)Alpine linux 中的源代码。但我这样做时遇到以下错误。

*/home/openssh-portable # make
(cd openbsd-compat && make)
make[1]: Entering directory '/home/openssh-portable/openbsd-compat'
cc -g -O2 -pipe -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE   -I. -I.. -I. -I./..  -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE -DHAVE_CONFIG_H -c arc4random.c
In file included from /usr/include/fortify/sys/socket.h:25,
                 from ../includes.h:27,
                 from arc4random.c:27:
**/usr/include/fortify/stdlib.h:40:1: error: 'realpath' undeclared here (not in a function); did you mean 'realloc'?**
_FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r)
^~~~~~~~~~~
/usr/include/fortify/stdlib.h:41: confused by earlier errors, bailing out
make[1]: *** [Makefile:99: arc4random.o] Error 1
make[1]: Leaving directory '/home/openssh-portable/openbsd-compat'
make: *** [Makefile:165: openbsd-compat/libopenbsd-compat.a] Error 2*

我怀疑这是因为 Alpine linux 附带了 musl c 库而不是 glibc 库。

我想知道如何解决这个错误。

  • 是否可以在 Alpine 中安装 glibc 并配置 make 命令以使用 glibc 而不是 musl c lib?
  • 或者我应该使用 musl C 库交叉编译 openssh-portable?如果是这样,任何指导或步骤将不胜感激?
  • 或者是否有任何 Alpine(即 musl C lib)兼容的源代码可用,我可以从存储库中提取

根据环境中的指定,我能够运行autoreconf,./configure 和 make命令成功。

答案1

问题似乎出在强化标题上。

我能够openssh-portable在 Alpine 3.8 上成功构建,没有出现任何问题:

  • 新鲜alpine:3.8形象
  • 安装的构建先决条件:apk add autoconf gcc make musl-dev openssl-dev zlib-dev
  • autoreconf && ./configure && make -j8

但是,安装fortify-headers和重新配置会导致构建破坏上述内容。 Fortify 有自己的stdlib.h使用__orig_realpath,我怀疑它是 GNU 扩展。

如果 fortify 标头不是您的 openssh 构建的强烈要求,请尝试忽略它们 ( apk del fortify-headers) 并重复构建。

相关内容