오늘 저는 VirtualBox에 ''(최소 패키지 세트) 데비안 8.1을 설치했습니다. 소스 코드에서 애플리케이션을 컴파일해 보고 싶습니다.
저는 OpenSSL로 시작했습니다: OpenSSL 1.0.1p 소스 코드에서 컴파일되었습니다.
user@debian8:/$ /opt/openssl/bin/openssl version
OpenSSL 1.0.1p 9 Jul 2015
user@debian8:/$ ldd /opt/openssl/bin/openssl
linux-gate.so.1 (0xb76ed000)
libssl.so.1.0.0 => /opt/openssl/lib/libssl.so.1.0.0 (0xb767c000)
libcrypto.so.1.0.0 => /opt/openssl/lib/libcrypto.so.1.0.0 (0xb748a000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb747f000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb72d5000)
/lib/ld-linux.so.2 (0xb76f0000)
다음은 OpenSSH입니다. 제가 직면한 첫 번째 문제는 ./configure
OpenSSL 헤더 버전(1.0.1p)이 OpenSSL 라이브러리 버전(1.0.1k)과 일치하지 않는다는 불만이었습니다. apt
OpenSSL 1.0.1k 라이브러리만 설치된 것으로 나타났습니다 . 그래서 나는 이렇게 했습니다:
LD_LIBRARY_PATH=/opt/openssl/lib ./configure (..params...) --with-ssl-dir=/opt/openssl/lib
LD_LIBRARY_PATH=/opt/openssl/lib make
sudo make install
이것은 효과가 있었습니다.
그러나: (OpenSSL 1.0.1k 및 버전의 경로를 참고하세요 libcrypto.so
)
user@debian8:/opt/openssh/bin$ ./ssh -V
OpenSSH_7.0p1, OpenSSL 1.0.1k 8 Jan 2015
user@debian8:/opt/openssh/bin$ ldd ssh
linux-gate.so.1 (0xb770b000)
libresolv.so.2 => /lib/i386-linux-gnu/i686/cmov/libresolv.so.2 (0xb761d000)
libcrypto.so.1.0.0 => /usr/lib/i386-linux-gnu/i686/cmov/libcrypto.so.1.0.0 (0xb7451000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb744b000)
libutil.so.1 => /lib/i386-linux-gnu/i686/cmov/libutil.so.1 (0xb7447000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb742a000)
libnsl.so.1 => /lib/i386-linux-gnu/i686/cmov/libnsl.so.1 (0xb7411000)
libcrypt.so.1 => /lib/i386-linux-gnu/i686/cmov/libcrypt.so.1 (0xb73e0000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb7235000)
/lib/ld-linux.so.2 (0xb770e000)
다시 LD_LIBRARY_PATH
도움말을 추가하세요.
user@debian8:/opt/openssh/bin$ LD_LIBRARY_PATH=/opt/openssl/lib ./ssh -V
OpenSSH_7.0p1, OpenSSL 1.0.1p 9 Jul 2015
user@debian8:/opt/openssh/bin$ LD_LIBRARY_PATH=/opt/openssl/lib ldd ssh
linux-gate.so.1 (0xb776f000)
libresolv.so.2 => /lib/i386-linux-gnu/i686/cmov/libresolv.so.2 (0xb7681000)
libcrypto.so.1.0.0 => /opt/openssl/lib/libcrypto.so.1.0.0 (0xb748f000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb7489000)
libutil.so.1 => /lib/i386-linux-gnu/i686/cmov/libutil.so.1 (0xb7485000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb7468000)
libnsl.so.1 => /lib/i386-linux-gnu/i686/cmov/libnsl.so.1 (0xb744f000)
libcrypt.so.1 => /lib/i386-linux-gnu/i686/cmov/libcrypt.so.1 (0xb741e000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb7273000)
/lib/ld-linux.so.2 (0xb7772000)
나는 sshd
그것이 작동하는지 확실히 테스트했습니다. 22에서 수신 대기하고 PuTTY에 연결할 수 있습니다.
이제 내 질문은 다음과 같습니다.
- 내가 뭔가 잘못한 게 아닐까?
- LD_LIBRARY_PATH를 추가하지 않고 OpenSSH를 통해 OpenSSL 버전 1.0.1p를 강제 실행하는 방법(을 사용해 보았지만
/etc/ld.so.conf.d/
아무것도 작동하지 않았습니다.ldconfig
참조 , 그러나 1.0.1p를 생성 하거나 사용/opt/openssl/lib
하지 않습니다 ).ssh
sshd
- ing 없이 올바른 경로를
openssl
사용하는 이유는 무엇입니까 ?ldd openssl
LD_LIBRARY_PATH
답변1
man ld.so
동적 링커에 대한 설명서를 참조하세요 . 자신이 컴파일한 OpenSSL에 우선순위를 부여 하려면 이를 /usr/local/lib
. /etc/ld.so.conf.d
노력하다
LD_DEBUG=libs /lib64/ld-linux-x86-64.so.2 --list /usr/bin/ssh
통찰력을 얻으세요. 자체 컴파일된 바이너리의 경우 RPATH 설정이 자체 라이브러리를 찾는 데 도움이 될 수 있습니다.
objdump -x /opt/openssl/bin/openssl | grep RPATH
(에서 가져옴https://stackoverflow.com/questions/2836330/is-there-a-way-to-inspect-the-current-rpath-on-linux).