ฉันจะติดตั้งแพคเกจเดียวจากการทดสอบ Debian หรือเสถียรได้อย่างไร


41

ฉันต้องการติดตั้งแพคเกจเดียว (และการอ้างอิง แต่เฉพาะในกรณีที่ไม่พอใจใน Wheezy) จาก Debian Jessie ไปยังระบบ Wheezy ของฉันโดยไม่ต้องอัพเกรด "ทุกอย่างและอ่างครัว" เป็นเวอร์ชั่นของ Jessie โดยเฉพาะฉันต้องการติดตั้งkpcliซึ่งมีให้ในแพ็คเกจของ Jessie แต่ไม่ใช่ใน Wheezy

ทุกสิ่งที่ฉันพบบ่งชี้ว่าฉันควรเพิ่มแหล่งเก็บข้อมูลของเจสซีลงในรายการแหล่งที่มาของฉันตั้งค่าการตรึงเพื่อให้ทุกอย่างดูดีและใช้แพคเกจเดียวจากเจสซีและมันก็จะเข้าที่ อย่างไรก็ตามมันไม่ได้เกิดขึ้นกับฉัน ถ้าฉันสร้าง /etc/apt.d/sources.list.d/jessie.list ด้วยเนื้อหาต่อไปนี้:

deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main

จากนั้นสร้าง /etc/apt/preferences.d/jessie ด้วย:

Package: *
Pin: release a=wheezy
Pin-Priority: 1001

Package: kpcli
Pin: release a=jessie
Pin-Priority: 450

และapt-get -u updateตามมาด้วยapt-get -u install kpcli/jessie, จากนั้นฉันคาดว่า apt-get เพื่อดึงใน kpcli และอาจจะมีแพ็กเกจอื่น ๆ อีกเล็กน้อยจาก Jessie, และปล่อยให้ส่วนที่เหลือของระบบที่ติดตั้งของฉันแตะต้อง. (ระบบของฉันคือการติดตั้ง Wheezy ที่ทันสมัยอย่างสมบูรณ์) หรือหากฉันมีลำดับความสำคัญต่ำเกินไปฉันคาดว่าจะไม่ทำอะไรเลย แต่ในระบบของฉัน, apt-get ต้องการที่จะอัพเกรดหลายร้อยแพคเกจ

อะไรว่าเป็นสิ่งจำเป็นในการติดตั้งเพียงแค่นี้แพคเกจหนึ่งเดียวของรุ่นเจสซีขณะที่ออกจากส่วนที่เหลือของระบบดังเสียงฮืด ๆ ของฉันแตะต้อง?

โปรดทราบว่าในกรณีนี้ซอฟต์แวร์เขียนด้วยภาษา Perl ดังนั้นจึงไม่มีการคอมไพล์ไบนารีหรืออะไรทำนองนั้นที่เกี่ยวข้อง อย่างไรก็ตามมีการพึ่งพาโมดูล Perl จำนวนหนึ่ง ดังนั้นทางเลือกหนึ่งที่เป็นไปได้คือการติดตั้ง. deb (ดาวน์โหลดด้วยตนเอง) โดยใช้สิ่งที่มีเพียง (1) อนุญาตให้ระบุไฟล์เก็บถาวร. deb แบบเดี่ยวที่จะติดตั้งได้เช่นdpkg -iและ (2) จัดการการพึ่งพาในวิธีที่ชาญฉลาด ซึ่งธรรมดาdpkg -iไม่ได้ อย่างไรก็ตามสำหรับการค้นหาทั้งหมดที่ฉันทำมาหลายครั้งและล้มเหลวในการหาแนวทางที่ง่ายต่อการปฏิบัติเช่นนี้โซลูชันทั่วไป (อันที่เหมาะกับไบนารีแพ็คเกจที่คอมไพล์ด้วย) จะดี .


4
วิธีปกติในการจัดการสิ่งนี้คือการ backporting - สร้างแพคเกจใหม่จากแหล่ง Debian บน Wheezy แพคเกจที่คุณใช้ดูเหมือนจะเป็น Perl (หรืออย่างน้อยก็ขึ้นอยู่กับมัน) ดังนั้นอาจไม่ยากที่จะถอยกลับ ถ้าคุณต้องการรายละเอียดเพิ่มเติมกรุณาพูดอย่างนั้น ฉันอาจให้คำแนะนำหากคุณต้องการมันจริงๆ
Faheem Mitha

คำตอบ:


15

สำหรับแต่ละรายการ (การทดสอบที่เสถียรไม่เสถียร) คุณมีพินต์ลำดับความสำคัญ 500 คุณไม่ควรใช้พิน> 1,000 ฉันใช้ 1001 เมื่อต้องการลดระดับบางอย่างเท่านั้น ฉันมีการทดสอบ + sid + รายการทดลองที่ระบุไว้ใน/etc/apt/sources.listและ/etc/apt/preferencesไฟล์ต่อไปนี้:

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

ค่า 500 เป็นค่าเริ่มต้นสำหรับไม่เสถียร ดังนั้นลองตรวจสอบ iceweasel:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main amd64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main amd64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages

ดังนั้นถ้าฉันพยายามติดตั้ง iceweasel มันจะถูกดาวน์โหลดจากสาขาการทดสอบเพราะมันมีความสำคัญสูงสุด

ลองเปลี่ยนลำดับความสำคัญเป็น:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910

sudo apt-get -u install kpcli/jessieยังคงให้316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.ความสำคัญกับข้อเสนอแนะของฉัน ถ้าฉันทำapt-cache policy perl(หนึ่งในแพ็คเกจที่ต้องการอัพเกรด) จะแสดง 5.18.1-5 ในฐานะผู้สมัครที่มีความสำคัญ 500 และติดตั้ง 5.14.2-21 + deb7u1 ที่ระดับความสำคัญ 500 เกือบจะดูเหมือนว่าด้วยเหตุผลใด ๆ ก็ตาม ยังไม่ได้จัดลำดับความสำคัญ ...
CVN

ตกลงฉันได้รับบางอย่าง ดูเหมือนว่าเคล็ดลับคือการใช้Package: kpcli*(มากกว่าPackage: kpcli) และจากนั้นPackage: * Pin: release o=Debian Pin-Priority: -10ในตอนท้าย แน่นอนว่ามีการพึ่งพาอาศัยกันอย่างหนักซึ่งนำไปสู่ ​​Perl รุ่นที่มีเฉพาะในเจสซีเท่านั้นซึ่งจะต้องมี libc6 รุ่นใหม่กว่า! ฉันไม่ได้กำลังจะไปเส้นทางนั้นโดยสุจริต แต่อย่างน้อยฉันก็ได้ผลลัพธ์ที่ตามมา ขอขอบคุณ!
CVn

25

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

ฉันจะแสดงสิ่งนี้สำหรับการติดตั้งแพคเกจจาก Stretch ไปที่ Jessie เนื่องจากเป็นแบบเสถียร / การทดสอบในปัจจุบัน

ก่อนอื่นให้เพิ่ม stretch เป็น repository เช่นใน/etc/apt/sources.list.d/stretch.list:

deb http://ftp.debian.org/debian stretch main

จากนั้นหากต้องการตั้งค่าเริ่มต้นให้สร้างไฟล์/etc/apt/apt.conf.d/default-releaseที่มี:

APT::Default-Release "jessie";

(ในเสียงฮืด ๆ ฉันคิดapt.conf.dว่าไม่ได้มีอยู่และคุณจะต้องวางตัวอย่างใน/etc/apt/apt.conf)

จากนั้นการติดตั้งแพคเกจจากการทดสอบนั้นง่ายพอ ๆ กับที่aptitude -t stretch install kpcliคุณไม่ต้องกังวลกับการจัดลำดับความสำคัญ

หมายเหตุ: @amc ชี้ให้เห็นในความคิดเห็นว่าถ้าคุณใช้aptแทนการaptitudeที่คุณต้องใช้"stable"เป็นแทนDefault-Release "jessie"ขอขอบคุณ! (แน่นอนคุณสามารถใช้aptitudeกับการตั้งค่านั้นได้เช่นกัน)


... นี่เป็นวิธีที่ลื่นไหลในการทำสิ่งนี้ ทำไมสิ่งนี้จึงไม่เป็นที่ยอมรับอย่างเป็นทางการ?
JamesTheAwesomeDude

1
ฉันได้รับThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Steven Penny

1
คุณจำเป็นต้องใช้ "เสถียร" / "การทดสอบ" / ฯลฯ แทน "jessie" / "stretch" สำหรับการเปิดตัวเริ่มต้นและเมื่อใช้ apt
amc

6

Pin: release a=wheezyควรจะเป็นPin: release n=wheezyอาจจะ

จากหน้าคน :

เร็กคอร์ดต่อไปนี้กำหนดลำดับความสำคัญสูงให้กับแพคเกจเวอร์ชันทั้งหมดที่เป็นของการแจกจ่ายใด ๆ ที่มีชื่อรหัสว่า "jessie"

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900

นั่นถูกต้องแล้ว!


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