작동하지 않는 패키지의 공유 라이브러리 문제를 처리하는 방법

작동하지 않는 패키지의 공유 라이브러리 문제를 처리하는 방법

dnsutils를 대체하는 Arch Linux인 Bind-tools를 설치했지만 어떤 도구도 작동하지 않고 모두 오류와 함께 실패합니다.

host: error while loading shared libraries: libidn2.so.4: cannot open shared object files: No such file or directory

libidn2.so.4의 이 문제는 Arch 패키지 빌드(2019년 1월)의 최근 문제인 것으로 보이며 그 결과전체 시스템을 부팅할 수 없게 만드는 등의 매우 끔찍한 결과.

내 질문은 다음과 같습니다. (1) 바인딩 도구 관리자가 이 문제를 해결할 때까지 기다리는 것이 올바른 접근 방식입니까, 아니면 직접 해결하려고 시도하는 것입니까? (2)무슨 일이 일어났나요? 바인딩 도구에는 libidn2.so.4가 필요하지만 설치하지 않습니까? 유지보수 담당자가 어떻게 그런 실수를 할 수 있습니까?

답변1

저는 Arch Linux를 실행하지 않기 때문에 이와 관련하여 약간 모험적입니다.

링크한 기사에 따르면 패키지 누락이 아니라 심볼릭 링크가 누락되었다고 나와 있습니다. 일반적으로 Linux 공유 라이브러리에는 ".so" 뒤에 버전 번호가 두 개 이상의 옥텟이 있는 반면 오류에는 하나만 언급되기 때문에 이는 의미가 있습니다.

내 제안은 당신이 실행하는 것입니다

ls -l /usr/lib/libidn2.so*

그것이 무엇을 반환하는지 확인하세요. 돌아오기만 하면

/usr/lib/libidn2.so

더 구체적인 내용을 언급하지 않으면 다음을 실행하는 것이 좋습니다.

ln -s /usr/lib/libidn2.so /usr/lib/libidn2.so.0
ln -s /usr/lib/libidn2.so /usr/lib/libidn2.so.4

귀하의 프로그램은 라이브러리의 주요 버전 4를 찾는 것으로 보이지만 참조한 기사에서는 주요 버전 0을 찾고 있으므로 두 가지를 모두 실행하는 것이 좋습니다. 이 수정 사항은 기본적으로 /usr/lib/libidn2.so 파일에 대해 두 개의 별칭을 생성합니다. 하나는 .0이고 다른 하나는 .4입니다.

/usr/lib/libidn2.so.something.something이 있고 /usr/lib/libidn2.so가 이에 대한 심볼릭 링크인 경우 보다 구체적인 파일에 심볼릭 링크하는 것이 더 합리적일 수 있습니다. 어떤 방법이 반드시 최선인지는 잘 모르겠습니다.

다른 옵션은 libidn2를 이 문제 이전 버전으로 다운그레이드하는 것입니다.

어떻게 이런 일이 일어났는지에 관해서는 libidn2의 Arch Linux 관리자가 실수를 한 것 같습니다. 저를 혼란스럽게 하는 것은 이런 일이 일어났다는 것이 아니라... 그 버그가 12일 전에 추가되었다는 것입니다. 몇 가지 수동 심볼릭 링크로 수정할 수 있는 버그는 수정하는 데 몇 주가 아니라 몇 시간이 걸립니다. 나는 Arch Linux 관리자를 비난하려는 것이 아닙니다. 단지 Arch Linux 관리자를 비난하려는 것입니다. 나는 그들에게 무슨 일이 일어났는지 모른다. 그냥... 답답해요. 내 추측은 이것이 이야기의 빙산의 일각에 불과하다는 것입니다. 어쨌든 사람은 사람이고 우리 모두는 실수를 합니다. 누군가 이미 이것에 대해 자책하고 있을 수도 있는데, 그들은 그렇게 하는 데 우리의 도움이 필요하지 않습니다.

답변2

이 오류는 Arch Linux에서 자주 발생하기 때문에 패키지를 분석하고 올바르게 빌드되었는지 확인하기 위해 특수 스크립트를 작성했습니다. (Arch Linux 패키지는 95%의 시간 동안 올바르게 빌드됩니다.):https://github.com/eli-schwartz/dotfiles/blob/master/bin/pkg-list-linked-libraries

이것을 바인딩 도구 패키지에서 실행하고 libidn2를 찾으면 최신 버전의 바인딩 도구가 libidn.so.4에 연결되어 있음을 알 수 있습니다.

$ pkg-list-linked-libraries bind-tools libidn2
==> checking linked libraries for bind-tools-9.13.5-4-x86_64.pkg.tar.xz ...
/usr/bin/dig
  NEEDED               libidn2.so.4
/usr/bin/host
  NEEDED               libidn2.so.4
/usr/bin/nslookup
  NEEDED               libidn2.so.4

이 도서관은 어디서 왔나요?

$ pacman -Qo /usr/lib/libidn2.so.4
/usr/lib/libidn2.so.4 is owned by libidn2 2.1.0-1

출력에 따르면 pacman -Si bind-toolsArch의 바인딩 도구 패키지는 libidn2 패키지를 종속성으로 요구하는데, 이는 이에 의존하기 때문에 좋습니다.

이 글을 쓰는 시점에 공식 Arch Linux 리포지토리에 있는 이 두 패키지의 버전은 위에서 확인한 바인드 도구 및 libidn2 버전과 일치합니다.

$ expac -S '%n %v' libidn2 bind-tools
libidn2 2.1.0-1
bind-tools 9.13.5-4

따라서 최신 버전의 바인딩 도구가 설치되어 있습니다. 그러나 바이너리에 필요한 libidn2 라이브러리가 없다고 주장합니다. 왜 안 돼? 현재 어떤 버전의 libidn2가 설치되어 있습니까? 출력을 확인하십시오 pacman -Q libidn2.

이 패키지는 수천 명의 다른 사람들에게 작동하므로 내 결론은 귀하의 시스템이 손상되었으며 libidn2의 최신 버전을 설치하려면 시스템을 적절하게 업데이트해야 한다는 것입니다. 바라보다https://wiki.archlinux.org/index.php/System_maintenance#Partial_upgrades_are_unsupported이런 일이 발생하는 이유, 올바르게 수정하는 방법, 기호 링크가 해결책이 아닐 뿐만 아니라 시스템을 더 손상시킬 수 있는 이유에 대해 자세히 알아보세요.

포물선 오류의 경우 이는 정반대의 문제입니다. 완전히 다른 Linux 배포판아니요Arch Linux는 새로운 libidn2로 패키지를 다시 빌드할 수 없으므로 패키지가 libidn2.so.0에 잘못 연결됩니다.

Parabola 버그로 고통받고 있다면 Arch Linux를 전혀 사용하지 않는 것이며 실제로 Parabola를 사용하고 있음을 명시해야 합니다. 그렇지 않으면 사람들이 어떻게 도움을 줄 수 있을지 알 수 없습니다.

관련 정보