Openssh
我可以在 Alpine linux 中建構 openssh-portable 原始碼嗎
對於我的項目,我必須自定義 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
) 並重複建構。