อย่างไรและทำไมในการสร้างแพ็คเกจ -dbg, -dev, -doc


15

ฉันกำลังเขียนแพคเกจ Ubuntu สำหรับแพ็คเกจซึ่งโดยพื้นฐานแล้วจะมีห้องสมุดและส่วนหัวจำนวนหนึ่งซึ่งจะใช้สร้างซอฟต์แวร์อื่น ๆ แพคเกจยังแยกย่อยในแพ็คเกจย่อยที่เล็กกว่าซึ่งพึ่งพาซึ่งกันและกัน; ในแง่นี้แพคเกจจะค่อนข้างคล้ายกับการเพิ่ม

ฉันสังเกตเห็นว่าแพคเกจเช่นเพิ่มให้

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

แต่ไม่มีอะไรที่เป็นไปตามชื่อหรือboostlibboost

  • แนวคิดเบื้องหลังนี้คืออะไร?
  • อะไรคือวัตถุประสงค์ของ-dbg, -devและ-docแพคเกจ?
  • มีคำแนะนำใด ๆ เกี่ยวกับวิธีเขียนไฟล์บิลด์สำหรับแพ็คเกจเหล่านั้นหรือไม่?

คำตอบ:


13

ความคิดและวัตถุประสงค์

เหตุผลหลักในการแยกแพ็คเกจต่าง ๆ เหล่านี้เกี่ยวข้องกับพื้นที่ดิสก์และความเร็วในการดาวน์โหลด โดยเฉพาะอย่างยิ่งมันเป็นความกังวลอย่างมากสำหรับพื้นที่กระจกเพราะมันหมายถึงการกระจายสำเนาหลายชุดของข้อมูล โดยการทำให้foo-common, foo-dataหรือ foo-docแพคเกจที่Architecture: allเราเก็บหนึ่งสำเนาของข้อมูลในการเก็บแทนที่จะต้องคัดลอกมันกับแต่ละสถาปัตยกรรม (เช่น i386, amd64, ect ... ) ผู้ใช้ส่วนใหญ่ไม่จำเป็นต้องใช้สัญลักษณ์การดีบักและสิ้นสุดการดาวน์โหลดแพคเกจใช้เวลานาน

สำหรับแพ็คเกจในคลังเก็บ Ubuntu อย่างเป็นทางการจริง ๆ แล้วไม่มีเหตุผลที่จะสร้าง-dbgแพ็คเกจด้วยตนเอง เครื่องสร้างจะตัดสัญลักษณ์การตรวจแก้จุดบกพร่องออกโดยอัตโนมัติและใส่ลงใน-dbgsymแพ็คเกจที่โฮสต์บน ddebs.ubuntu.com (ดู: Debug Symbol Packages ) -dbgแพ็คเกจที่มีอยู่มักจะถูกยกมาจาก Debian

คำแนะนำ

สำหรับการใช้งานลองดูที่คำถามนี้:

โดยย่อต้องสร้างคลังบทใหม่debian/controlสำหรับแต่ละแพ็คเกจ จากนั้นdebian/foo-*.installจะต้องสร้างไฟล์เช่นกัน สิ่งนี้จะช่วยให้dh_installใส่เนื้อหาที่เหมาะสมลงในแพ็คเกจที่เหมาะสม

foo.installสำหรับแพคเกจไบนารีหลักอาจมีลักษณะเช่น:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.installหรืออะไรก็ตาม:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

และสำหรับfoo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

การสร้างfoo-dbgแพ็คเกจจำเป็นต้องแก้ไขdebian/rulesตามปกติdh_stripจะตัดสัญลักษณ์การตรวจแก้จุดบกพร่องออก ดังนั้นเราต้องแทนที่พฤติกรรมนั้น:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg

12

Boost เป็นตัวอย่างที่ซับซ้อนลองดูที่ง่ายกว่าก่อน

ในความแม่นยำแพคเกจแหล่งopensslให้ 5 ไบนารีแพคเกจ:

  • libssl1.0.0มีไลบรารีไดนามิก OpenSSL เวอร์ชัน 1.0.0 นั่นคือสิ่งที่โปรแกรมที่เชื่อมโยงกับไลบรารีนี้จำเป็นต้องเรียกใช้ ชื่อแพ็กเกจมีหมายเลขเวอร์ชันเนื่องจากคุณอาจติดตั้งไลบรารี่เวอร์ชันอื่นในเวลาเดียวกันหากคุณมีโปรแกรมอื่นเชื่อมโยงกับเวอร์ชันอื่นที่ไม่รองรับไบนารีด้วย 1.0.0
  • opensslมีเครื่องมือบรรทัดคำสั่งที่ใช้ไลบรารี OpenSSL แม้ว่าคุณจะมีไลบรารี่หลายเวอร์ชัน แต่คุณไม่จำเป็นต้องใช้เครื่องมือเหล่านี้หลายเวอร์ชัน: มีเพียงหนึ่งเดียว/usr/bin/opensslและเครื่องมือข้อมูลและเอกสารที่เกี่ยวข้อง
  • libssl-devมีไฟล์ที่คุณต้องการหากคุณต้องการคอมไพล์โปรแกรมที่ลิงก์กับ OpenSSL มีไฟล์ส่วนหัว C ( *.h), ไลบรารีสำหรับการเชื่อมโยง ( *.a, *.so) และไฟล์สารพันน้อย
  • libssl-docมีเอกสารประกอบสำหรับไลบรารี OpenSSL คุณต้องการเพียงแพ็คเกจนี้ถ้าคุณจะเขียนโปรแกรมที่ใช้ไลบรารี
  • libssl1.0.0-dbgมีสัญลักษณ์การดีบัก มีประโยชน์สำหรับผู้ที่ดีบักไลบรารี OpenSSL หรือโปรแกรมที่ใช้ คำตอบของ andrewsomethingมีข้อมูลเพิ่มเติมเกี่ยวกับ-dbgแพ็คเกจเหล่านี้

นอกจากนี้ความแม่นยำยังมีไลบรารีเวอร์ชันเก่ากว่าlibssl0.9.8เนื่องจากมีโปรแกรมที่ยังคงเชื่อมโยงกับเวอร์ชันเก่ากว่า

แพ็กเกจอื่น ๆ ที่คุณอาจเห็นคือการเชื่อมโยงสำหรับภาษาอื่นที่ไม่ใช่ C. OpenSSL ไม่ได้จัดส่งพร้อมกับสิ่งใด ๆ (มีการเชื่อมโยงกับ OpenSSL สำหรับภาษาอื่น แต่ไม่ได้มาจากแหล่งเดียวกัน) ตัวอย่างคือsqlite3ซึ่งมาพร้อมกับการผูก TCL

เหตุผลหลักในการแบ่งแพ็คเกจเช่นนี้คือแพ็คเกจที่แตกต่างกันมีกลุ่มเป้าหมายที่แตกต่างกัน ระบบที่ไม่มีใครรวบรวมสิ่งใดได้เพียงแค่ต้องการlibแพ็คเกจหลักและอาจเป็นเครื่องมือบรรทัดคำสั่ง พวกเขาจะถูกติดตั้งโดยอัตโนมัติจากการอ้างอิงหากจำเป็น ถ้ามีคนต้องการคอมไพล์โปรแกรมที่ใช้ไลบรารีพวกเขาต้องการ-devแพ็คเกจ หากใครบางคนต้องการที่จะเขียนโปรแกรมที่ใช้ห้องสมุดพวกเขาต้องการ-docแพคเกจ

แล้ว Boost ล่ะ มันเป็นไปตามโครงสร้างเดียวกัน แต่เป็นเพราะ Boost เป็นห้องสมุดขนาดใหญ่ก็แตกออกเป็นแพคเกจขนาดเล็กจำนวนมาก: และlibboost-*1.46.1 libboost-*1.46-devในแม่นยำมีเพียงหนึ่งรุ่นของ Boost, 1.46แต่ oneiric ทั้ง1.42และ1.46 นอกจากนี้ยังมีการเพิ่มค่าเริ่มต้น metapackage ที่ดึงในแพคเกจเวอร์ชันเป็นการอ้างอิง

ดูที่libhangulนอกเหนือจากแพ็คเกจไลบรารีแบบไดนามิกlibhangul1และแพคเกจการพัฒนาlibhangul-devแล้วยังมีแพ็คเกจlibhangul-dataด้วย แพคเกจนี้มีข้อมูลเพิ่มเติมที่ห้องสมุดต้องการ แม้ว่าคุณจะมี-dataไลบรารี่หลายเวอร์ชั่น แต่ก็สามารถแชร์แพ็คเกจได้ นอกจากนี้แพ็กเกจยังไม่ขึ้นกับสถาปัตยกรรมอีกด้วย ซอฟต์แวร์ที่มีข้อมูลที่ไม่ขึ้นกับสถาปัตยกรรมจำนวนมากถูกแบ่งออกเป็นแพ็กเกจที่ขึ้นอยู่กับสถาปัตยกรรมและสถาปัตยกรรมที่ไม่ขึ้นกับตัวเองเพื่อประหยัดพื้นที่บนไซต์การแจกจ่าย -commonคำต่อท้ายมีความหมายคล้ายกันก็คือ

กฎการบรรจุภัณฑ์ของ Ubuntu และ Debian นั้นคล้ายกันมากดังนั้นเนื้อหาเกี่ยวกับการทำแพ็คเกจ Debian ก็มีผลกับ Ubuntu ด้วยเช่นกัน ในความเป็นจริงคุณสามารถมีแพ็คเกจแหล่งเดียวกันสำหรับ Debian และ Ubuntu; สิ่งเดียวที่ทำให้แพคเกจ Debian และ Ubuntu แตกต่างกันคือการคอมไพล์มันกับเวอร์ชันไลบรารีที่แตกต่างกันและนั่นก็ไม่ได้แตกต่างกันมากนักระหว่าง Ubuntu รุ่นต่าง ๆ มีเอกสาร Debian นักพัฒนาที่อยู่ในมือโดยเฉพาะอย่างยิ่งDebian นโยบายคู่มือการใช้งานและการอ้างอิงของนักพัฒนา ; ดูคู่มือผู้ดูแลใหม่สำหรับการแนะนำ เพิกเฉยชิ้นส่วนที่เกี่ยวกับการทำงานกับโครงการ Debian และอื่น ๆ เพียงอ่านชิ้นส่วนที่เกี่ยวกับการทำแพ็คเกจdh_make เป็นวิธีที่ดีในการเริ่มต้นใช้งานแพคเกจ deb (คุณจะต้องเลือก“ ห้องสมุด”)

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