อะไรคือความแตกต่างระหว่างการพึ่งพาและการพึ่งพาล่วงหน้า?


12

คำว่า "ขึ้นอยู่กับ" และ "ขึ้นอยู่กับล่วงหน้า" คืออะไรและความแตกต่างระหว่างข้อกำหนดแพคเกจทั้งสองประเภทเมื่อฉันติดตั้งบางอย่างใน Ubuntu

คำตอบ:


20

ตามที่นำมาจากลิงก์นี้: https://www.debian.org/doc/debian-policy/#document-ch-relationships

การอ้างอิงมี 5 ประเภท:

ความหมายของห้าเขตการพึ่งพาเป็นดังนี้:

ขึ้นอยู่กับ

  • สิ่งนี้เป็นการประกาศการพึ่งพาอย่างสมบูรณ์ แพคเกจจะไม่ได้รับการกำหนดค่าเว้นแต่แพคเกจทั้งหมดที่ปรากฏในฟิลด์ขึ้นอยู่กับการกำหนดค่าอย่างถูกต้อง ควรใช้เขตข้อมูลขึ้นอยู่กับว่าจำเป็นต้องใช้แพคเกจที่ขึ้นอยู่กับสำหรับแพคเกจขึ้นอยู่กับการให้ฟังก์ชันการทำงานจำนวนมาก ฟิลด์ Depends ควรถูกใช้หากสคริปต์ postinst หรือ prerm ต้องการแพ็กเกจ depended-on ที่จะคลายแพ็กเกจหรือกำหนดค่าเพื่อรัน ในกรณีของการกำหนดค่า postinst แพ็คเกจที่ขึ้นอยู่กับจะถูกแยกและกำหนดค่าก่อน

  • ในกรณีของ prerm หรือการดำเนินการ postinst อื่น ๆ การขึ้นต่อกันของแพคเกจโดยปกติจะไม่แตกแพคเกจ แต่อาจเป็น "Half-Installed" หากการอัพเกรดก่อนหน้าของการพึ่งพาล้มเหลว ท้ายที่สุดฟิลด์ Depends ควรถูกใช้หากต้องการแพ็กเกจ depended-on โดยสคริปต์ postrm เพื่อล้างข้อมูลทั้งหมดหลังจากการลบแพ็กเกจ ไม่มีการรับประกันว่าการขึ้นต่อกันของแพ็คเกจจะพร้อมใช้งานเมื่อเรียกใช้ postrm แต่แพ็คเกจที่ขึ้นอยู่กับมีแนวโน้มว่าจะพร้อมใช้งานมากขึ้นหากแพ็กเกจประกาศการขึ้นต่อกัน (โดยเฉพาะในกรณีที่ลบ postrm) สคริปต์ postrm ต้องข้ามการดำเนินการที่ต้องมีการขึ้นต่อกันหากการพึ่งพานั้นไม่พร้อมใช้งาน

แนะนำ

  • สิ่งนี้เป็นการประกาศการพึ่งพาที่แข็งแกร่ง แต่ไม่แน่นอน ฟิลด์แนะนำควรแสดงรายการแพ็คเกจที่สามารถพบได้พร้อมกับแพ็คเกจนี้ในทุกการติดตั้งยกเว้น

ชี้ให้เห็นถึง

  • สิ่งนี้ใช้เพื่อประกาศว่าแพ็คเกจหนึ่งอาจมีประโยชน์มากกว่ากับแพ็คเกจอื่นอย่างน้อยหนึ่งแพค การใช้ฟิลด์นี้จะบอกระบบบรรจุภัณฑ์และผู้ใช้ว่าแพ็กเกจที่แสดงรายการนั้นเกี่ยวข้องกับแพคเกจนี้และอาจช่วยเพิ่มประสิทธิภาพการใช้งานได้

ช่วย

  • ฟิลด์นี้คล้ายกับข้อเสนอแนะ แต่ทำงานในทิศทางตรงกันข้าม มันถูกใช้เพื่อประกาศว่าแพคเกจสามารถเพิ่มประสิทธิภาพการทำงานของแพคเกจอื่น

Pre-ขึ้นอยู่กับ

  • ฟิลด์นี้เป็นเหมือนขึ้นอยู่กับว่านอกจากนั้นมันยังบังคับให้ dpkg ทำการติดตั้งแพ็กเกจที่ตั้งชื่อให้เสร็จก่อนที่จะเริ่มการติดตั้งแพ็กเกจที่ประกาศการพึ่งพาล่วงหน้ามันทำงานได้เช่นนี้เมื่อแพ็กเกจประกาศการพึ่งพาล่วงหน้า ถูกนำออกจากกล่องการอ้างอิงล่วงหน้าสามารถพอใจได้หากแพ็คเกจที่ขึ้นอยู่กับว่ามีการกำหนดค่าอย่างสมบูรณ์หรือแม้ว่าแพ็คเกจที่ขึ้นอยู่กับจะแตกออกเท่านั้นหรืออยู่ในสถานะ "กำหนดค่าครึ่ง" ได้หากพวกเขาได้รับการกำหนดค่า ถูกต้องในบางจุดในอดีต (และไม่ถูกลบออกหรือถูกลบบางส่วนตั้งแต่)

  • ในกรณีนี้ทั้งเวอร์ชันที่กำหนดค่าไว้ก่อนหน้านี้และไม่ได้บรรจุในปัจจุบันหรือรุ่น "กำหนดค่าครึ่ง" ต้องเป็นไปตามข้อเวอร์ชันใด ๆ ในฟิลด์ Pre-Depends เมื่อแพ็กเกจที่ประกาศการพึ่งพาล่วงหน้ากำลังจะถูกกำหนดค่าการพึ่งพาล่วงหน้าจะถือเป็น Depend ปกติ จะถือว่าได้รับความพึงพอใจก็ต่อเมื่อแพ็คเกจที่ขึ้นอยู่กับมีการกำหนดค่าอย่างถูกต้อง อย่างไรก็ตามไม่เหมือนกับการขึ้นอยู่กับการขึ้นอยู่กับล่วงหน้าไม่อนุญาตให้ใช้การอ้างอิงแบบวงกลมที่จะแตก หากพบการพึ่งพาแบบวนรอบในขณะที่พยายามให้เกียรติ Pre-Depend การติดตั้งจะถูกยกเลิก

  • การอ้างอิงล่วงหน้ายังจำเป็นหากสคริปต์ preinst ขึ้นอยู่กับแพ็คเกจที่ระบุ ที่ดีที่สุดคือหลีกเลี่ยงสถานการณ์นี้ถ้าเป็นไปได้ Pre-Depends ควรใช้อย่าง จำกัด โดยเฉพาะอย่างยิ่งโดยแพ็คเกจที่มีการอัพเกรดก่อนวัยอันควรหรือการติดตั้งจะขัดขวางความสามารถของระบบในการดำเนินการต่อกับการอัพเกรดใด ๆ ที่อาจกำลังดำเนินการอยู่

รุ่นที่เล็กกว่า:

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

2
โปรดทราบว่ายังมีการต่อต้านการพึ่งพาเช่นความขัดแย้งและตัวแบ่ง และสร้างการอ้างอิงเช่น Build-Depends
Alexis Wilke

3

คำว่า "การพึ่งพา" สามารถใช้ในวงกว้างเพื่อรวมความสัมพันธ์ "ขึ้นอยู่กับ" และ "ขึ้นอยู่กับล่วงหน้า" (และบางครั้งแม้แต่คนอื่น ๆ ความสัมพันธ์ที่อ่อนแอกว่า) หรืออาจถูกนำมาใช้อย่างแคบ ๆ

ความแตกต่างระหว่างความสัมพันธ์ของแพคเกจ "ขึ้นอยู่กับ" และ "ขึ้นอยู่กับล่วงหน้า" คือถ้า X ขึ้นอยู่กับ Y ดังนั้น Y จะต้องได้รับการกำหนดค่าอย่างสมบูรณ์ก่อนที่ X จะได้รับการกำหนดค่า (การกำหนดค่าเป็นขั้นตอนการติดตั้งที่แพคเกจเมื่อไฟล์ถูกแตกไปยังตำแหน่งที่เหมาะสม - เช่นเมื่อ "ติดตั้ง" - จะมีการเปลี่ยนแปลงอื่น ๆ ที่จำเป็นเพื่อให้สามารถใช้ซอฟต์แวร์ที่จัดทำจริงตัวอย่างเช่น การกำหนดค่าเซิร์ฟเวอร์ HTTP อาจเกี่ยวข้องกับการทำให้แน่ใจว่ามีwwwผู้ใช้ที่มีความสามารถที่เหมาะสมและ/var/wwwไดเรกทอรีที่มีสิทธิ์ที่เหมาะสม) ในทางตรงกันข้ามถ้า X ขึ้นอยู่กับ Y แล้ว Y จะต้องติดตั้งและ (ปกติ) กำหนดค่าอย่างสมบูรณ์ก่อนที่ X ติดตั้งแล้ว

ดูหัวข้อ 7.2 ของคู่มือนโยบาย Debianสำหรับรายละเอียดเพิ่มเติม ฉันอ้างถึงสองส่วนที่เกี่ยวข้องมากที่สุดที่นี่ แต่มีข้อมูลอื่น ๆ ในส่วนนั้น (และในบทที่ 7 โดยทั่วไปมากขึ้น) ที่ช่วยส่องสว่างว่าการพึ่งพาทำงานอย่างไร


Depends

สิ่งนี้เป็นการประกาศการพึ่งพาอย่างสมบูรณ์ แพคเกจจะไม่ได้รับการกำหนดค่าเว้นแต่แพคเกจทั้งหมดที่ระบุไว้ในDependsเขตข้อมูลของมันได้รับการกำหนดค่าอย่างถูกต้อง (เว้นแต่จะมีการพึ่งพาแบบวงกลมดังที่อธิบายไว้ข้างต้น)

Dependsข้อมูลควรจะใช้ในกรณีที่ขึ้นอยู่ในแพคเกจที่เป็นสิ่งจำเป็นสำหรับแพคเกจขึ้นเพื่อให้จำนวนเงินที่สำคัญของการทำงาน

Dependsฟิลด์ก็ควรที่จะใช้ในกรณีที่postinstหรือprermสคริปต์ต้องขึ้นอยู่ในแพคเกจที่จะแตกหรือการกำหนดค่าเพื่อการทำงาน ในกรณีของการกำหนดค่า postinst แพ็คเกจที่ขึ้นอยู่กับจะถูกแยกและกำหนดค่าก่อน (หากแพ็คเกจทั้งสองเกี่ยวข้องกับลูปพึ่งพาสิ่งนี้อาจไม่ทำงานตามที่คาดไว้ดูคำอธิบายสองสามย่อหน้าหลัง) ในกรณีของprermหรือpostinstการดำเนินการอื่น ๆการพึ่งพาแพ็กเกจโดยปกติแล้วจะไม่แตกแพ็คเก็ต แต่อย่างใด "Half-Installed" หากการอัพเกรดก่อนหน้าของการพึ่งพาล้มเหลว

ท้ายที่สุดDependsควรใช้ฟิลด์หากpostrmสคริปต์ที่ขึ้นอยู่กับแพคเกจที่จำเป็นในการทำความสะอาดอย่างสมบูรณ์หลังจากการลบแพคเกจ ไม่มีการรับประกันว่าการขึ้นต่อกันของแพ็คเกจจะพร้อมใช้งานเมื่อpostrmมีการเรียกใช้ แต่แพ็คเกจที่ขึ้นอยู่กับมีแนวโน้มที่จะพร้อมใช้งานมากขึ้นถ้าแพ็คเกจประกาศการพึ่งพา (โดยเฉพาะในกรณีของpostrm remove) postrmสคริปต์ได้อย่างสง่างามต้องข้ามการกระทำที่ต้องพึ่งพาถ้าพึ่งพาที่ไม่สามารถใช้ได้


Pre-Depends

ฟิลด์นี้เป็นเช่นDependsนั้นยกเว้นว่ามันจะบังคับdpkgให้ทำการติดตั้งแพ็กเกจที่มีชื่อให้สมบูรณ์ก่อนที่จะเริ่มการติดตั้งแพ็กเกจซึ่งประกาศการพึ่งพาล่วงหน้าดังต่อไปนี้:

เมื่อแพคเกจที่ประกาศก่อนการพึ่งพาเป็นเรื่องเกี่ยวกับที่จะแตกก่อนการพึ่งพาสามารถพอใจถ้าขึ้นอยู่ในแพคเกจที่เป็นทั้งการกำหนดค่าได้อย่างเต็มที่หรือแม้กระทั่งถ้าขึ้นอยู่ในแพคเกจ (s) เป็นเพียงห่อหรือใน "ครึ่ง - กำหนด "สถานะโดยมีเงื่อนไขว่าพวกเขาได้รับการกำหนดค่าอย่างถูกต้องในบางจุดในอดีต (และไม่ถูกลบออกหรือถูกลบบางส่วนตั้งแต่) ในกรณีนี้ทั้งเวอร์ชันที่กำหนดค่าไว้ก่อนหน้านี้และไม่ได้บรรจุในปัจจุบันหรือรุ่น "กำหนดค่าแบบครึ่ง" ต้องเป็นไปตามข้อเวอร์ชันใด ๆ ในPre-Dependsฟิลด์

เมื่อแพคเกจประกาศก่อนการพึ่งพาเป็นเรื่องเกี่ยวกับที่จะได้รับการกำหนดค่า , Dependspre-พึ่งพาจะถือว่าเป็นปกติ จะถือว่าได้รับความพึงพอใจก็ต่อเมื่อแพ็คเกจที่ขึ้นอยู่กับมีการกำหนดค่าอย่างถูกต้อง แต่แตกต่างด้วยDepends, Pre-Dependsไม่อนุญาตให้มีการอ้างอิงแบบวงกลมที่จะเสีย หากพบการพึ่งพาแบบวนรอบในขณะที่พยายามให้เกียรติPre-Dependsการติดตั้งจะถูกยกเลิก

Pre-Dependsจะต้องมีหากpreinstสคริปต์ขึ้นอยู่กับแพคเกจที่มีชื่อ ที่ดีที่สุดคือหลีกเลี่ยงสถานการณ์นี้ถ้าเป็นไปได้

Pre-Depends ควรใช้เท่าที่ควรโดยเฉพาะกับแพคเกจที่มีการอัพเกรดหรือการติดตั้งก่อนวัยอันควรจะขัดขวางความสามารถของระบบที่จะดำเนินการต่อกับการอัพเกรดใด ๆ ที่อาจจะอยู่ในความคืบหน้า

คุณไม่ควรระบุPre-Dependsรายการสำหรับแพคเกจก่อนที่จะมีการพูดคุยกันในdebian-develรายชื่อผู้รับจดหมายและฉันทามติเกี่ยวกับการทำที่ได้มาถึง ดูอ้างอิงมาตรา 3.5

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