การติดตั้งรุ่นที่เฉพาะเจาะจงเมื่อ repo มีรุ่นที่ใหม่กว่า?


13

มามี metapackage ซึ่งขึ้นอยู่กับแพ็คเกจต่อไปนี้

Depends: A (=2),
 B (=2),
 C (=2)

หมายเหตุ '=' - ฉันต้องการติดตั้งเวอร์ชันเฉพาะเหล่านี้ไม่ใช่เวอร์ชันล่าสุด

นอกจากนี้:

Bขึ้นอยู่กับA (> = 1)

Cขึ้นอยู่กับB (> = 1) และA (> = 1)

หากเวอร์ชันล่าสุดของ A, B, C ในที่เก็บเป็น 2 ดังนั้นจะใช้งานได้

เนื่องจากฉันได้ใส่เวอร์ชัน 3 ของ A และเวอร์ชัน 3 ของ B ใน repo sudo apt-get ติดตั้ง my-meta-package ปฏิเสธที่จะเสร็จสิ้นด้วยข้อมูลต่อไปนี้:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

ถ้าฉันติดตั้งเวอร์ชัน 2 ของ A และ B ด้วยตนเอง metapackage จะติดตั้งอย่างถูกต้องซึ่งแสดงให้เห็นอย่างชัดเจนว่าไม่มีการพึ่งพาที่ซ่อนอยู่ใน A3 หรือ B3 นี่ไม่ใช่วิธีการแก้ปัญหาเนื่องจากมีการติดตั้ง metapackage บนเครื่องหลายเครื่องโดยอัตโนมัติ

คำถาม:จะต้องทำอย่างไรเพื่อให้ sudo apt-get install my-meta-package เวอร์ชันที่ติดตั้ง 2,2,2

นอกจากนี้มีวิธีที่ฉันจะได้รับข้อมูลเพิ่มเติมสิ่งที่สร้างความต้องการสำหรับรุ่น 3 ของ A และรุ่น 3 ของ B จริงหรือไม่


โอ้ฉันไม่ได้อ่านคำถามทั้งหมดก่อนตอบ คุณสามารถ repackage metapackage ใหม่ได้หรือไม่
int_ua

2
@int_ua ฉันไม่เข้าใจว่าการทำ metapackage ใหม่จะทำอย่างไร
tymtam

@ belacqua - ฉันอยู่กับคุณ แต่เราต้องการคำตอบที่มั่นคงซึ่งครอบคลุมสิ่งที่เกิดขึ้นเมื่อมีการพลิกผันและการพึ่งพาที่หัก ฯลฯ
RobotHumans

ไฟล์ควบคุมของ metapackage ของคุณมีแพ็คเกจที่ขึ้นต่อกันอย่างชัดเจน(a=2), (b=2)หรือไม่?
อันวาร์

คำตอบ:


11

คุณต้องเลือกเวอร์ชันที่ต้องการติดตั้งและติดตั้งทั้งหมดในเวลาเดียวกันกับที่คุณติดตั้งเมตาแพ็คเกจ

sudo apt-get install meta-package package1=2 package2=2 package3=2

เช่นเดียวกับคำตอบของ int_ua ที่บอกว่าคุณสามารถค้นหาการพึ่งพาย้อนกลับได้ด้วยวิธีนี้:

apt-cache rdepends package

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับแพ็คเกจเหล่านี้ ( เวอร์ชันที่มีอยู่การอ้างอิงและอีกมากมาย ) ให้ใช้สิ่งนี้:

apt-cache show package

หลังจากเสร็จสิ้นการติดตั้งพวกเขาและต้องการที่จะให้พวกเขาในรุ่นดังกล่าวในขณะที่ทำอัพเกรดระบบคุณจะต้องใช้apt-ปักหมุดแนะนำโดยbelacqua

APT การปักหมุด

คุณลักษณะการตรึงของ APT ช่วยให้ผู้ดูแลระบบบังคับให้ APT เลือกแพ็คเกจเฉพาะรุ่นซึ่งอาจมีให้ใช้งานในเวอร์ชั่นต่าง ๆ จากแหล่งเก็บข้อมูลที่แตกต่างกัน สิ่งนี้ช่วยให้ผู้ดูแลระบบตรวจสอบให้แน่ใจว่าไม่มีการอัพเกรดแพ็คเกจเป็นเวอร์ชั่นที่อาจขัดแย้งกับแพ็คเกจอื่น ๆ ในระบบหรือไม่ได้รับการทดสอบอย่างเพียงพอสำหรับการเปลี่ยนแปลงที่ไม่พึงประสงค์ ในการดำเนินการนี้หมุดในไฟล์การกำหนดค่าตามความชอบของ APT (/ etc / apt / preferences) ต้องถูกแก้ไข


ฉันเชื่อว่านี่เป็นคำตอบที่ถูกต้องโดยใส่ = แล้วชื่อแพ็คเกจด้วยรุ่น
LnxSlck

1
ฉันเป็นเพื่อนร่วมงานของ Tymek และนี่แก้ปัญหาได้จริง น่าเสียดายที่เราต้องทำวิศวกรรมย้อนกลับให้ metapackage เพื่อให้มันเกิดขึ้น Python สร้างสรรค์บางตัวอยู่ในลำดับ ขอบคุณสำหรับคำตอบ
Igor Zevaka

1
ฉันสงสัยว่ามีวิธีแก้ปัญหาที่ดีกว่านี้หรือไม่ตั้งแต่เวลาผ่านไป?
ygrek

1

คุณสามารถลองติดตั้งการขึ้นต่อกันก่อนได้

sudo apt-get install package=2 โดยที่ 2 เป็นเวอร์ชัน

คุณสามารถค้นหาแพ็คเกจที่ขึ้นอยู่กับแพ็คเกจด้วย

apt-cache rdepends package


1
rdepends ไม่ได้ให้ข้อมูลรายละเอียดเกี่ยวกับรุ่นใช่มั้ย
tymtam

2
การติดตั้งการพึ่งพาก่อนจะท้าให้มี metapackage มันเป็นทางออก แต่ไม่ใช่สิ่งที่ฉันกำลังมองหา
tymtam

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