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

f27 (netinstall)을 새로 설치 한 후 많은 pkg이 작은 파일을 /usr/lib/.build-id/dir 에 넣는 것을 알았습니다 . 1st에서 나는 어떻게 든 dnf에 대해 모호한 “디버그”모드를 활성화했다고 생각했지만

$ dnf download httpd

/usr/lib/.build-id/*파일과 함께 rpm을 가져옵니다 .

나는 이전 Fedora rels에서 이것을 기억하지 않습니다.



답변

/usr/lib/.build-id설치된 패키지의 기본 빌드 ID 파일을 포함합니다. Fedora 27 이전에는이 ​​파일들이에서 디버그 파일과 함께 살았으며 /usr/lib/debug디버그 RPM으로 만 제공되었습니다. Fedora 27에서는 여러 디버그 정보 패키지를 병렬로 설치할 수 있도록 변경되었습니다 . 이러한 변경의 일부는 설치된 바이너리와 일치하도록 일치하는 패키지에 기본 빌드 ID 파일을 제공하는 것입니다.

디버그 정보 패키지는 많은 배포판에서 사용되어 사용자가 필요에 따라 모든 사용자를 위해 바이너리를 팽창시키지 않고 디버깅 정보를 설치할 수있는 방법을 제공합니다. 프로그램이나 라이브러리가 빌드되고 링크 될 때, 디버깅 정보로 빌드 될 수 있으며, 디버거는 바이너리의 위치를 ​​소스 코드의 위치와 매핑하는 데 사용할 수 있습니다. 그러나이 정보는 많은 공간을 차지합니다. 따라서 디버깅 정보는 일반적으로 바이너리에서 패키징되기 전에 제거됩니다. 최근 몇 년 동안, strip그리고 objcopy디버그 정보 패키지 구축 방법이 – 디버깅 정보를 추출하여 별도로 저장 될 수 있도록하는 것이 향상되었습니다. 필요한 것은 바이너리와 디버그 정보가 일치하고 빌드 ID가 들어오는 곳입니다.ld--build-id바이너리의 중요한 부분을 살펴보십시오 . “주 빌드 ID 파일”은 빌드 ID에서 해당 바이너리 또는 디버그 정보 파일로의 심볼릭 링크입니다. 그것들은 양방향 매핑을 구현할 수 있도록하여 코어 덤프가 유용하게 디버깅 될 수 있도록합니다 (이진에서 이진 자체의 빌드 ID 로의 .gnu_debuglink섹션에 링크가 있습니다). Fedora build-id 기능 설명 에서이 모든 이유에 대한 자세한 설명을 볼 수 있습니다.


답변