วัตถุประสงค์ของ /usr/lib/.build-id/ dir คืออะไร


10

หลังจากติดตั้งใหม่ของ f27 (netinstall) ฉันสังเกตว่า pkgs จำนวนมากวางไฟล์เล็ก ๆ ใน/usr/lib/.build-id/dir ในวันที่ 1 ฉันคิดว่าฉันได้เปิดใช้งานโหมด "debug" ที่ไม่ชัดเจนสำหรับ dnf แต่ถึงอย่างนั้น

$ dnf download httpd

ดึงข้อมูลรอบต่อนาทีด้วย/usr/lib/.build-id/*ไฟล์

ฉันไม่จำสิ่งนี้ได้ใน Fedora ที่เกี่ยวข้อง


rpm --query --file /usr/lib/.build-idแสดงรายการแพคเกจมากมาย "เป็นเจ้าของ" /usr/lib/.build-id... แปลก
David Tonhofer

คำตอบ:


22

/usr/lib/.build-idมีไฟล์ build-id หลักสำหรับแพ็คเกจที่ติดตั้ง ก่อนหน้า Fedora 27 สิ่งเหล่านี้อาศัยอยู่ข้างๆไฟล์ดีบั๊ก/usr/lib/debugและถูกส่งในการแก้ปัญหา RPM เท่านั้น ใน Fedora 27 มีการเปลี่ยนแปลงเพื่อให้สามารถติดตั้งแพคเกจข้อมูลดีบั๊กหลายชุดได้ ส่วนหนึ่งของการเปลี่ยนแปลงนั้นเกี่ยวข้องกับการจัดส่งไฟล์บิวด์ - ไอดีหลักในแพ็คเกจที่ตรงกันเพื่อให้แน่ใจว่าตรงกับไบนารีที่ติดตั้ง

แพคเกจข้อมูลการตรวจแก้จุดบกพร่องถูกนำมาใช้ในการกระจายจำนวนมากเพื่อให้วิธีการสำหรับผู้ใช้ในการติดตั้งข้อมูลการแก้จุดบกพร่องเมื่อมีความจำเป็นโดยไม่ต้อง bloating ไบนารีสำหรับทุกคน เมื่อโปรแกรมหรือไลบรารีถูกสร้างและเชื่อมโยงมันสามารถสร้างขึ้นด้วยข้อมูลการดีบักซึ่งตัว debuggers สามารถใช้เพื่อแมปตำแหน่งที่ตั้งในไบนารีกับตำแหน่งที่ตั้งในซอร์สโค้ด แต่ข้อมูลนี้ใช้พื้นที่มาก โดยทั่วไปแล้วข้อมูลการดีบั๊กจะถูกดึงออกจากไบนารีก่อนที่จะบรรจุ ในปีที่ผ่านมาstripและobjcopyได้รับการปรับปรุงเพื่อให้ข้อมูลการดีบักสามารถแยกและจัดเก็บแยกต่างหาก - นั่นเป็นวิธีสร้างแพคเกจข้อมูลการดีบัก สิ่งที่ต้องการคือวิธีที่จะทำให้แน่ใจว่าไบนารีและข้อมูลการดีบักนั้นสอดคล้องกันและนั่นคือสิ่งที่บิวด์ id เข้ามา - มันเป็นตัวระบุที่ไม่ซ้ำกันซึ่งคำนวณโดยld(มองหาที่--build-idนั่น) ส่วนสำคัญของไบนารี “ ไฟล์ build-id หลัก” เป็น symlink จากบิลด์ id ไปยังไฟล์ไบนารี่หรือ debug info ที่สอดคล้องกัน พวกเขาอนุญาตให้ทำการแมปแบบสองทางเพื่อให้การถ่ายโอนหลักสามารถดีบั๊กได้อย่างเป็นประโยชน์ (มีลิงก์จากไบนารีไปยังรหัสการสร้างในไบนารีเองใน.gnu_debuglinkส่วน) คุณจะพบคำอธิบายรายละเอียดของเหตุผลที่อยู่เบื้องหลังทั้งหมดนี้ในการสร้างรหัสคำอธิบายคุณลักษณะ Fedora

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.