(หากคุณมีคำถาม / ความคิดเห็นเกี่ยวกับคำตอบนี้โปรดเพิ่มความคิดเห็นหรือถ้าคุณมีตัวแทนเพียงพอคุณสามารถ 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
ไดเรกทอรี
อย่างไรก็ตามการอภิปรายโดยละเอียดเกี่ยวกับปัญหาเหล่านี้อยู่นอกขอบเขตสำหรับโพสต์นี้