내 프로젝트에서는 openssh 코드를 사용자 정의해야 하며 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가 glibc 라이브러리 대신 musl c 라이브러리와 함께 제공되기 때문이라고 생각합니다.
이 오류를 해결하는 방법을 알고 싶습니다.
- Alpine에 glibc를 설치하고 musl c lib 대신 glibc를 사용하도록 make 명령을 구성할 수 있습니까?
- 아니면 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에는 GNU 확장인 것으로 의심되는 자체 stdlib.h
용도가 있습니다.__orig_realpath
Fortify 헤더가 openssh 빌드에 대한 강력한 요구 사항이 아닌 경우 이를 무시하고( apk del fortify-headers
) 빌드를 반복해 보십시오.