Openssh

我可以在 Alpine linux 中建構 openssh-portable 原始碼嗎

  • May 14, 2019

對於我的項目,我必須自定義 openssh 程式碼,並且我計劃在 Alpine linux中建構 openssh-portable( https://github.com/openssh/openssh-portable )原始碼。但是這樣做時我收到以下錯誤。

*/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)兼容的原始碼,我可以從 repo 中提取

按照環境中的規定,我能夠成功執行autoreconf、./configure 和 make命令。

問題似乎與強化標頭有關。

我能夠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 擴展。

如果您的 openssh 建構不需要強化標頭,請嘗試省略它們 ( apk del fortify-headers) 並重複建構。

引用自:https://unix.stackexchange.com/questions/518657