/usr/lib/.build-id/dir의 목적은 무엇입니까?

/usr/lib/.build-id/dir의 목적은 무엇입니까?

/usr/lib/.build-id/f27(netinstall)을 다시 설치한 후 많은 pkg가 디렉터리에 작은 파일을 저장하는 것을 확인했습니다 . 처음에 나는 어떻게든 dnf에 대해 모호한 "디버그" 모드를 활성화했다고 생각했지만, 그럼에도 불구하고

$ dnf download httpd

파일이 포함된 rpm을 가져옵니다 /usr/lib/.build-id/*.

이전 Fedora 버전에서는 이 내용이 기억나지 않습니다.

답변1

/usr/lib/.build-id설치된 패키지의 기본 빌드 ID 파일이 포함되어 있습니다. Fedora 27 이전에는 이러한 파일이 디버그 파일과 함께 존재했으며 /usr/lib/debug디버그 RPM에서만 사용할 수 있었습니다. 페도라 27에서는변경사항이 도입되었습니다.여러 디버그 정보 패키지를 병렬로 설치할 수 있습니다. 변경 사항의 일부에는 설치된 바이너리와 일치하는지 확인하기 위해 일치하는 패키지에 기본 빌드 ID 파일을 제공하는 것이 포함됩니다.

디버그 정보 패키지는 모든 사람에게 비대한 바이너리를 제공할 필요 없이 필요할 때 디버그 정보를 설치할 수 있는 방법을 사용자에게 제공하기 위해 많은 배포판에서 사용됩니다. 프로그램이나 라이브러리를 빌드하고 링크할 때 디버그 정보를 사용하여 빌드할 수 있으며, 이 정보는 디버거가 바이너리의 위치를 ​​소스 코드의 위치에 매핑하는 데 사용할 수 있지만 이 정보는 많은 공간을 차지합니다. 따라서 디버깅 정보는 일반적으로 패키징하기 전에 바이너리에서 제거됩니다. 지난 몇 년간,strip그리고objcopy디버그 정보를 별도로 추출하고 저장할 수 있도록 향상되었습니다. 이것이 디버그 정보 패키지가 구축되는 방식입니다. 그런 다음 필요한 것은 바이너리와 해당 디버그 정보가 일치하는지 확인하는 방법이며, 여기서 빌드 ID가 사용됩니다. 빌드 ID는 다음 공식으로 계산된 고유 식별자입니다.ld(저기 보세요 --build-id) 바이너리의 중요한 부분입니다. "마스터 빌드 ID 파일"은 빌드 ID에서 해당 바이너리 또는 디버그 정보 파일로의 기호 링크입니다. 이는 코어 덤프를 효율적으로 디버깅할 수 있도록 양방향 매핑을 허용합니다(리소스 섹션에는 바이너리 파일 자체에 슬레이브가 있습니다). 빌드 ID에 대한 바이너리 링크 .gnu_debuglink). 이 모든 이유에 대한 자세한 설명은 다음에서 확인할 수 있습니다.Fedora 빌드 ID 기능 설명.

관련 정보