ทำไม apt คิดว่ามันต้องมีการพึ่งพาพิเศษนี้


9

ผมทำงานเกี่ยวกับวิธีการตั้งค่าเครื่องบางส่วนและฉันรู้สึกประหลาดใจที่พบว่าสามารถทำงานแตกต่างกันกว่าapt-get install A Bapt-get install A && apt-get install B

ตัวอย่างที่เฉพาะเจาะจงของฉันคือและA == openjdk-7-jdkB == ant

ดังนั้นopenjdk-7-jdkขึ้นอยู่กับการopenjdk-7-jre-headlessที่น่าพอใจของการพึ่งพาant java6-runtime-headlessแต่ถ้าคุณติดตั้งพวกเขาเป็นapt-get install openjdk-7-jdk ant, APT default-jre-headlessดูเหมือนจะไม่คิดนี้ออกและติดตั้ง แต่ถ้าคุณติดตั้งopenjdk-7-jdkก่อนที่จะทำการติดตั้งantการพึ่งพาก็เป็นที่พอใจและทั้งหมดนั้นก็เป็นเรื่องดี

โดยปกติแล้ว APT ฉลาดพอที่จะจำแนกสิ่งเหล่านี้ออกมาได้ดังนั้นทำไมในกรณีนี้จึงไม่สามารถทำได้ ฉันต้องการที่จะมีความเข้าใจที่ดีขึ้นว่าทำไมมันถึงทำงานแบบนี้ดังนั้นสิ่งแบบนี้ไม่ได้เดินทางไปหาฉันอีกในอนาคต


ดูแคชฉลาดของฉันฉันเห็นว่า openjdk-7-jdk 7 ~ u3-2.1.1 ~ pre1-1ubuntu2 ขึ้นอยู่กับ openjdk-7-jre ซึ่งจะขึ้นอยู่กับ openjdk-7-jre-headre ดังนั้นการพึ่งพานี้จึงเป็นทางอ้อม . ant ขึ้นอยู่กับ default-jre-headless โดยตรง ฉันกำลังใช้แม่นยำ ฉันแค่เดา ​​แต่ apt-get อาจเริ่มต้นด้วย ant หรือเริ่มต้นด้วยการพึ่งพาระดับ 1 และจากนั้นไปที่การพึ่งพาระดับ 2 ไม่ว่าในกรณีใด ๆ หากคุณใส่ใจกับการกำหนดค่าขั้นสุดท้ายของแพ็คเกจ (ต้องการ openjdk-7-jre-headless มากกว่า default -..- .. ) ที่ระบุไว้โดยเฉพาะและอาจเป็นวิธีที่ดีที่สุดในการควบคุม
John S Gruber

คุณยังสนใจคำถามนั้นอยู่หรือไม่?
guntbert

@guntbert แน่นอนแม้ว่าฉันจะลาออกไปเชื่อว่าไม่มีเหตุผล มันเป็นเพียงวิธีที่มันเป็น
leedm777

5
เพื่อดูว่า APT apt-get install -o Debug::pkgProblemResolver=true package1 package2...จำแนกผลงานให้ดูที่ นั่นอาจให้คำใบ้ว่าทำไมมันถึงทำงานแบบนั้น
Lasall

คำตอบ:


2

ดูเหมือนว่ามีระบบ "น้ำหนัก" บางอย่างเล่นอยู่ที่นี่:

$ aptitude why ant openjdk-7-jdk
p   ant                 Recommends ant-optional       
p   ant-optional        Suggests   libgnumail-java    
p   libgnumail-java     Suggests   libgnumail-java-doc
p   libgnumail-java-doc Recommends default-jdk-doc    
p   default-jdk-doc     Depends    openjdk-7-doc      
p   openjdk-7-doc       Suggests   openjdk-7-jdk

ดังที่คุณสามารถดูได้antขึ้นอยู่กับopenjdk-7-jdkจำนวนข้อเสนอแนะคำแนะนำและการพึ่งพาที่ซับซ้อนและซับซ้อนเนื่องจากในขณะที่เมื่อใช้openjdk-6-jdkการพึ่งพานั้นจะมีความตรงมากกว่า:

$ aptitude why ant openjdk-6-jdk
p   ant           Suggests default-jdk | java-compiler | java-sdk
p   openjdk-6-jdk Provides java-sdk

แน่นอนaptitudeวิธีการแก้ปัญหาการพึ่งพาอาจแตกต่างกันของapt-get. BTW ที่รันการจำลองของ ant โดยไม่ต้องติดตั้ง openjdk-7-jdk อย่าดึง openjdk-6-jdk:

$ sudo apt-get install ant
[sudo] password for braiam: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  ant-optional
Suggested packages:
  default-jdk java-compiler java-sdk ant-gcj ant-doc liboro-java junit
  libregexp-java jython antlr libbcel-java libjdepend-java libgnumail-java
  libcommons-net-java libjsch-java javacc ant-optional-gcj
The following NEW packages will be installed:
  ant ant-optional
0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded.
Need to get 2,234 kB of archives.
After this operation, 3,041 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

บางทีถ้าคุณใช้วิธีการเดียวกับที่ฉันทำคุณสามารถหาข้อมูลเพิ่มเติมเนื่องจากฉันใช้การทดสอบ Debian ในขณะนี้และที่เก็บอาจเปลี่ยนแปลงได้ในขณะเดียวกัน


0

AFAIK มีค่าเริ่มต้นสำหรับการพึงพอใจต่อการพึ่งพาดังนั้นหากการพึ่งพานั้นไม่ได้รับความพึงพอใจก่อนการติดตั้งแพคเกจมันจะติดตั้งการพึ่งพาและติดตั้งแพคเกจที่ร้องขอ

นี่อาจเป็นข้อผิดพลาดใหญ่เช่นกัน

หวังว่าจะช่วยได้

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