(หากคุณมีคำถาม / ความคิดเห็นเกี่ยวกับคำตอบนี้โปรดเพิ่มความคิดเห็นหรือถ้าคุณมีตัวแทนเพียงพอคุณสามารถ ping ฉันในการแชท)
ติดตั้งแพ็คเกจไบนารีโดยตรงจาก Debian เวอร์ชันใหม่ไม่ใช่คำตอบ
สมมติว่าคุณกำลังใช้การแจกแจงแบบเดเบียนบางเวอร์ชัน คุณต้องการแพ็คเกจเวอร์ชันใหม่กว่าที่มีให้สำหรับคุณ สิ่งแรกที่ผู้เริ่มต้นทุกคนพยายามทำเพื่อติดตั้งไบนารีแพ็คเกจโดยตรงบน Debian เวอร์ชันของคุณ สิ่งนี้อาจใช้งานได้หรือไม่ขึ้นอยู่กับเวอร์ชันที่คุณใช้และรุ่นที่ใหม่กว่า โดยทั่วไปขั้นตอนนี้จะไม่ทำงานได้ดี
พิจารณาตัวอย่างกรณีที่มีหนึ่งพยายามที่จะติดตั้งแพคเกจไบนารีจากการทดสอบ / ไม่เสถียรโดยตรงบนที่มั่นคง สิ่งนี้จะไม่เป็นไปได้ด้วยดีเว้นแต่ว่าการทดสอบ / ไม่เสถียรจะเกิดขึ้นใกล้กับความเสถียรในขณะนั้น เหตุผลเกี่ยวข้องกับธรรมชาติของการแจกแจงแบบไบนารีบน Linux เช่น Debian ระบบปฏิบัติการดังกล่าวขึ้นอยู่กับไลบรารีที่ใช้ร่วมกันอย่างมากและการพึ่งพาเหล่านี้มักขึ้นอยู่กับรุ่นที่แน่นมาก บ่อยกว่านั้นมากเกินความจำเป็น เดเบียนในปัจจุบันไม่มีวิธีที่ดีในการสร้างการอ้างอิงรุ่น "คับ" - เป็นวิธีที่สั้น ๆ ในการบอกว่าการพึ่งพาเวอร์ชันนั้นมีความเข้มงวดเท่าที่จำเป็น
สิ่งนี้หมายความว่าสำหรับผู้ใช้? สมมติว่าคุณกำลังพยายามติดตั้งระบบบอกว่าslrnจาก Debian ไม่เสถียรไปเป็น Debian เสถียร สิ่งนี้จะมีลักษณะอย่างไร
# apt-get install slrn/unstable
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '1.0.1-10' (Debian:testing [amd64]) for 'slrn'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
slrn : Depends: libc6 (>= 2.15) but 2.13-38+deb7u1 is to be installed
E: Unable to correct problems, you have held broken packages.
แม้จะมีข้อผิดพลาดที่ผลิตโดยaptไม่มีแพคเกจที่ขาด แล้วเกิดอะไรขึ้น ปัญหาคือว่าเวอร์ชั่นlibc6ที่ไม่เสถียรslrnถูกคอมไพล์แล้วจะแตกต่างกัน (และมีหมายเลขเวอร์ชันที่สูงกว่า) ที่มีอยู่บนเดเบียนเสถียร ( libc6เป็นไลบรารี GNU C ไลบรารี C เป็นศูนย์กลางของระบบปฏิบัติการ Unix ใด ๆ และไลบรารี GNU C เป็นเวอร์ชันที่ระบบปฏิบัติการบน Linux ใช้อยู่)
ดังนั้นความไม่เสถียรslrnจึงจำเป็นต้องใช้เวอร์ชันที่มีหมายเลขสูงlibc6กว่าเพื่อให้เสถียร โปรดทราบว่าเนื่องจากแพ็คเกจได้รับการรวบรวมกับเวอร์ชันที่สูงกว่าของไลบรารีไม่จำเป็นต้องใช้เวอร์ชันที่สูงกว่าของไลบรารีนั้น แต่มักจะเป็นกรณี
ไวยากรณ์
apt-get install slrn/unstable
หมายถึง: ใช้ความไม่แน่นอนslrnแต่สำหรับแพ็คเกจอื่น ๆ ทั้งหมดให้ใช้เวอร์ชั่นที่เสถียรเท่านั้น เพื่อให้แม่นยำยิ่งขึ้นจะใช้หมายเลขลำดับความสำคัญ ดูman apt_preferencesรายละเอียดที่
ท่านสามารถทำได้
apt-get install -t unstable slrn
สิ่งนี้มีแนวโน้มที่จะทำงานได้มากกว่าปกติ แต่โดยทั่วไปคุณไม่ต้องการทำเช่นนั้น ทำไม?
ซึ่งหมายความว่า: ให้ปฏิบัติต่อแพคเกจทั้งหมดชั่วคราวในสถานการณ์ที่ไม่มั่นคงบนฐานรากที่เท่าเทียมกับแพ็คเกจที่เสถียร ดังนั้นสิ่งนี้จะดึงความไม่แน่นอนslrnของการพึ่งพาจากความไม่แน่นอนหากพวกเขาเป็นหมายเลขรุ่นที่สูงขึ้นและโดยทั่วไปจะเป็น โดยทั่วไปจะรวมไลบรารี GNU C ด้วยเหตุผลที่อธิบายไว้แล้ว ตอนนี้วิธีการนี้โดยทั่วไปจะ "ประสบความสำเร็จ" ในที่การอ้างอิงจะพึงพอใจตามคำนิยาม (ไม่แน่นอนslrnมีการพึ่งพาที่พอใจในความไม่แน่นอน) แต่คุณจบลงด้วยการผสมผสานของแพคเกจที่จู่ ๆ ก็ถูกบังคับให้ทำงานกับรุ่นของห้องสมุด แตกต่างจากสิ่งที่พวกเขาสร้างขึ้น มันอาจจะไม่จบลงด้วยดี
คำตอบคือ ... ภูมิหลัง!
ดังนั้นวิธีที่ถูกต้องในการทำเช่นนี้คืออะไร? มันคือการสร้างแหล่ง Debian ของรุ่นที่ใหม่กว่าในระบบของคุณซึ่งเป็นที่รู้จักกันในนาม "backporting" พิจารณากรณีต่อไปนี้:
มีแหล่งข้อมูลเพิ่มเติมสำหรับแพ็คเกจ Debian เวอร์ชันกึ่งเป็นทางการ / เป็นทางการ
สถานที่แรกที่มองหาคือDebian Backportsซึ่งเป็นเว็บไซต์อย่างเป็นทางการของ Debian backports
สำหรับตัวอย่างที่เป็นรูปธรรม:
เพิ่มบรรทัดแบ็คพอร์ทที่เหมาะสมสำหรับการเปิดตัวและอัปเดตของคุณเพื่อค้นหาแพ็กเกจใหม่จากนั้นติดตั้งบางสิ่งจากแบ็กพอร์ตอย่างชัดเจน
echo "deb http://ftp.debian.org/debian stretch-backports main" | sudo tee /etc/apt/sources.list.d/stretch-backports.list
sudo apt-get update
sudo apt-get install -t stretch-backports git
นี่จะเป็นเวอร์ชั่นล่าสุดของ git ที่เสถียรซึ่งมีฟีเจอร์ใหม่ที่มีประโยชน์มากกว่าแบบเสถียรที่มาพร้อมกับการยืด (เช่น 'รวม' ซึ่งช่วยให้คุณสามารถรวมไฟล์ปรับแต่งหลายไฟล์หรือเปลี่ยนชื่อผู้ใช้สำหรับ ~ / work / project / vs ~ / personal / โครงการ /)
อีกที่ที่ควรดูคือผู้ดูแลระบบ PPA ของ Ubuntu คุณสามารถค้นหา "packagename PPA"
ไม่มีแพ็คเกจรุ่นล่าสุดสำหรับระบบปฏิบัติการรุ่นนั้น แต่มีรุ่นใหม่กว่าสำหรับรุ่น / รุ่นล่าสุดของระบบปฏิบัติการเพิ่มเติม นี่เป็นกรณีมาตรฐานสำหรับ backporting
Backporting หมายความว่าคุณสร้างแหล่ง Debian ใหม่จาก Debian รุ่นที่ใหม่กว่าในรุ่นที่คุณใช้งานอยู่ ขั้นตอนนี้อาจง่ายหรือมีส่วนร่วมและยากขึ้นอยู่กับแพ็คเกจ นี่คือเค้าโครงของวิธีการทำเช่นนี้
บทสรุปการฝึกอบรม Backporting สำหรับผู้เริ่มต้น
เพื่อความเป็นรูปธรรมฉันจะสมมติว่าคุณกำลังเรียกใช้ Debian เสถียรปัจจุบันเสียงดังในขณะนี้ ฉันจะใช้แพ็คเกจslrnเป็นตัวอย่าง
ก่อนอื่นให้สังเกตว่าไฟล์บรรจุภัณฑ์ Debian ทั้งหมดอยู่ในdebian/ไดเรกทอรีย่อยของไดเรกทอรีต้นทาง
ขั้นตอนแรกคือการตรวจสอบว่ามีรุ่นที่ใหม่กว่าหรือไม่ apt-cache policyคุณสามารถทำได้โดยใช้
apt-cache policy slrn
slrn:
Installed: 1.0.0~pre18-1.3
Candidate: 1.0.0~pre18-1.3
Version table:
1.0.1-10 0
50 http://debian.lcs.mit.edu/debian/ testing/main amd64 Packages
50 http://debian.lcs.mit.edu/debian/ unstable/main amd64 Packages
*** 1.0.0~pre18-1.3 0
500 http://debian.lcs.mit.edu/debian/ wheezy/main amd64 Packages
100 /var/lib/dpkg/status
1.0.0~pre18-1.1 0
500 http://debian.lcs.mit.edu/debian/ squeeze/main amd64 Packages
1.0.1-10เราอยากจะย้ายกลับ
ขั้นตอนที่ 1:
หมายเหตุ: ตรวจสอบให้แน่ใจว่าสายสำหรับรุ่นแหล่งที่คุณต้องการดาวน์โหลดปรากฏในของคุณdeb-src /etc/apt/sources.listตัวอย่างเช่นหากคุณต้องการดาวน์โหลดเวอร์ชันที่ไม่เสถียรslrnคุณต้องมีdeb-srcบรรทัดที่ไม่เสถียรหรือไม่สามารถใช้งานได้ โปรดทราบว่าคุณไม่จำเป็นต้องมีdebบรรทัดที่สอดคล้องกันเพื่อดาวน์โหลดแหล่งข้อมูลแม้ว่าจะapt-cache policyใช้ข้อมูลนั้นดังนั้นหากคุณไม่มีdebบรรทัดที่เกี่ยวข้องดังนั้นapt-cache policyจะไม่แสดงเวอร์ชันที่เกี่ยวข้องให้คุณเห็น หากคุณมีdebเส้นอย่าลืมที่จะตรึงรุ่นที่ใหม่กว่าโดยใช้รายการใน/etc/apt/preferencesหรือคล้ายกัน รายการใน/etc/apt/preferencesลักษณะนี้ (สำหรับไม่แน่นอน) จะใช้งานได้ตัวอย่างเช่น
Package: *
Pin: release a=unstable
Pin-Priority: 50
หากคุณเพิ่มบรรทัดใน/etc/apt/sources.listอย่าลืมเรียกใช้ในapt-get updateภายหลัง
slrnดาวน์โหลดแหล่งที่มาสำหรับ /usr/local/src/slrnสถานที่ที่ดีคือ
apt-get source slrn=1.0.1-10
ขั้นตอนที่ 2:
เปลี่ยนหมายเลขเวอร์ชั่นเล็กน้อยเพื่อแยกความแตกต่าง backport ของคุณจากเวอร์ชันอัปสตรีม เรียกใช้dch -iซึ่งจะเพิ่มรายการลงในdebian/changelogไฟล์โดยอัตโนมัติ จากนั้นเปลี่ยนรายการให้มีลักษณะเช่นนี้ตัวอย่างเช่น
slrn (1.0.1-10.username) UNRELEASED; urgency=low
* Backport to wheezy.
-- User <user@domain> Sun, 02 Feb 2014 23:54:13 +0530
ขั้นตอนที่ 3:
พยายามสร้างแหล่งที่มา หากแพ็กเกจที่จำเป็นสำหรับบิลด์ไม่พร้อมใช้งานความพยายามจะล้มเหลว เปลี่ยนไดเรกทอรีเป็นไดเรกทอรีต้นทาง ใช้debuildจากdevtoolsแพ็คเกจ
cd slrn-1.0.1/
debuild -uc -us
หากการสร้างการพึ่งพานั้นเป็นที่พอใจแล้วแหล่งที่มาจะสร้างและสร้าง debs บางอย่างที่ระดับเหนือไดเรกทอรีต้นทาง ในกรณี/usr/local/src/slrnนี้
ขั้นตอนที่ 4:
สมมติว่าการพึ่งพาสร้างไม่พอใจ จากนั้นคุณต้องลองติดตั้งการอ้างอิงสร้าง สิ่งนี้อาจหรืออาจไม่ทำงานเนื่องจากการอ้างอิงอาจไม่พร้อมใช้งานสำหรับรุ่นของคุณหรือถ้ามีอาจไม่พร้อมใช้งานในรุ่นที่เหมาะสม
หมายเหตุ: มันน่าเสียดายที่ไม่ใช่เรื่องแปลกสำหรับแพคเกจ Debian ที่จะต้องใช้รุ่นของการพึ่งพาการสร้างที่สูงกว่าที่จำเป็น ไม่มีวิธีอัตโนมัติใน Debian เพื่อตรวจสอบเรื่องนี้และบ่อยครั้งที่ผู้ดูแลแพคเกจไม่สนใจตราบใดที่มันทำงานกับรุ่น / รีลีสที่เกี่ยวข้อง ดังนั้นจงใช้ทัศนคติที่สงสัยต่อรุ่นอ้างอิงและใช้สามัญสำนึก ตัวอย่างเช่นแพคเกจที่ใช้กันอย่างแพร่หลายเช่น Python และเครื่องมือ GNU จะไม่ขึ้นอยู่กับเวอร์ชันที่เฉพาะเจาะจงของการขึ้นต่อกันของพวกเขา
ไม่ว่าในกรณีใดคุณสามารถลองติดตั้งได้
apt-get build-dep slrn=1.0.1-10
หากสิ่งนี้สำเร็จให้ลองสร้างแพ็คเกจอีกครั้ง (ขั้นตอนที่ 2) หากล้มเหลวก็จำเป็นต้องทำงานเพิ่มเติม โปรดทราบว่าdebuildดูที่การอ้างอิงสร้างในdebian/controlไฟล์และคุณสามารถเปลี่ยนแปลงสิ่งเหล่านี้ได้หากจำเป็น ดังนั้นให้เราคุยกันในตอนนี้ นี่คือ Build Dependencies สำหรับ slrn
Build-Depends: debhelper (>=9), libslang2-dev, libuu-dev,
exim4 | mail-transport-agent, libgnutls-openssl-dev, po-debconf, autoconf,
libcanlock2-dev, autotools-dev, dpkg-dev (>= 1.16.0), chrpath, dh-autoreconf, inn2-inews
อีกทางเลือกหนึ่งในการใช้apt-get build-depคือติดตั้งด้วยตนเองโดยทำ
apt-get install debhelper libslang2-dev ...
หากคุณเริ่มเปลี่ยนค่าเหล่านี้ในไฟล์ควบคุมคุณควรเปลี่ยนไปใช้การติดตั้งด้วยตนเองเนื่องจากapt-get build-depจะไม่ทำสิ่งที่ถูกต้องอีกต่อไป
ไม่มีเวอร์ชันล่าสุดของซอฟต์แวร์เวอร์ชันเพิ่มเติมที่พร้อมใช้งาน ตัวเลือกที่มีคือแพ็คเกจเวอร์ชันล่าสุด
ในหลายกรณีหนึ่งสามารถใช้บรรจุภัณฑ์จากซอฟต์แวร์รุ่นก่อนหน้าร่วมกับแหล่งที่มาใหม่ วิธีการนี้อาจพบปัญหาแพทช์ที่ใช้กับซอฟต์แวร์รุ่นก่อนหน้าอาจไม่ได้ใช้ที่นี่ดังนั้นวิธีการหนึ่งอาจต้องซิงค์ใหม่กับแหล่งที่มา รูปแบบซอร์ส 3.0 (ผ้าห่ม) ซึ่งตอนนี้กลายเป็นมาตรฐานใช้ผ้าห่มและแพทช์อยู่ในdebian/patchesไดเรกทอรี
อย่างไรก็ตามการอภิปรายโดยละเอียดเกี่ยวกับปัญหาเหล่านี้อยู่นอกขอบเขตสำหรับโพสต์นี้