어제 우리는 yum 설치 실패로 인해 몇 가지 이상한 문제를 경험하기 시작했습니다. 문제 중 하나는 PS -ef(실제로는 다른 사용자의 상태를 확인하는 ps 명령)가 무기한 중단되는 것인데, 이는 재부팅을 통해 해결되었습니다. 그러나 여전히 두 가지 문제가 있습니다.
vncserver를 실행하려고 할 때 오류가 발생합니다.
Gtk-Message: Failed to load modle "canberra-gtk-module": libcanberra-gtk-module.so: cannot open shared object.
libcanberra-gtk-module이 시스템 어디에도 존재하지 않기 때문에 오류가 발생합니다. 필수가 아니라고 생각했기 때문에 로드할 목록에서 모듈을 제거했지만 vncserver가 모듈을 로드하려고 시도하는 원인이 무엇인지 모르겠습니다.
하지만 더 중요한 버그는 GPG-agent입니다. 몇 군데에서 오류가 발생하지만 결론은 gpg-agent를 실행하려고 할 때 오류가 발생한다는 것입니다.
ImportError: /usr/local/lib/libgcrypt.so.11: undefined symbole: gog-err-set_errno
gpg-agent 매뉴얼 페이지에 나열된 파일이 존재하지 않는 것 같습니다. libgpg-error 패키지를 다시 설치해 보았지만 아무 것도 수정되지 않았습니다. 이 문제의 원인이나 디버깅 방법을 아시나요?
감사해요.
답변1
이 문제를 해결했습니다. 문제는 내 LD_LIBRARY_PATH 변수가 비어 있다는 것입니다. 내 libgpg_error SO가 내 /lib64 디렉토리에 있었기 때문에 LD_LIBRARY_PATH=/lib64를 설정하면 문제가 해결되었습니다. 보다 정확하게는 gpg-agent new가 libgpg_error.so를 어디에서 찾습니까(LDD에 따라). 그러나 gpg-agent도 libgcrypt를 사용합니다. Libgcrypt는 libgpg_error.so를 찾을 수 없습니다. libgcrypt.so가 기호 테이블에서 libgpg_error.so 앞에 나타나기 때문에 libgcrypt.so가 먼저 로드되고 오류가 발생한다고 가정합니다. 아직 로드되지 않았고 libgpg_error.so를 찾을 수 없기 때문입니다. LD_LIBRARY_PATH를 설정하면 libgcrypt가 .so를 올바르게 찾고 로드할 수 있습니다.
/etc/profile.d/에서 실행되는 작은 스크립트를 설정했습니다.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH;/lib64
아직 재부팅하지는 않았지만 일단 재부팅되면 모두가 이 문제를 해결해야 한다고 확신합니다.
누군가 YUM(YUM이 그랬다면)이 왜 이것을 깨뜨렸는지 말해 줄 수 있다면 알고 싶습니다. 또한 이제 내 LD_LIBRARY_PATH에 /lib64 경로만 포함되어 있다는 점을 걱정해야 합니까? 거기에 다른 길이 있어야 할까요? 스크립트를 추가하기 전에 왜 비어 있는지 궁금해야 합니까?
업데이트: LD_LIBRARY_PATH 파일에 추가한 솔루션이 완벽하지 않습니다. gnome에서 터미널을 열면 LD_LIBRARY_PATH가 여전히 비어 있습니다. 이 문제를 해결하는 올바른 방법은 파일을 /etc/ld.so.cache.d/ 디렉토리에 배치하는 것입니다. 파일은 .conf(감지 대상)로 끝나야 하며 다음 줄을 포함해야 합니다.
/lib64
그런 다음 루트로 ldconfig를 실행했습니다. 이렇게 하면 Linux가 /lib64의 모든 .so를 "자동 감지"하므로 LD_LIBRARY_PATH를 전혀 설정할 필요가 없습니다.