เหตุใดแพ็คเกจ Debian รุ่นก่อนหน้าจึงหายไปในที่เก็บแพ็คเกจ (มีความเกี่ยวข้องสูงสำหรับการกำหนดค่าระบบที่ควบคุมเวอร์ชัน)


37

สถานการณ์จำลอง: ในการกำหนดค่าระบบที่ควบคุมเวอร์ชันตาม Puppet, Chef เป็นต้นจำเป็นต้องสร้างสถานะระบบขึ้นใหม่ สิ่งนี้ทำได้โดยการระบุรุ่นของแพ็คเกจระบบอย่างชัดเจน

เมื่อเร็ว ๆ นี้เราพบปัญหาที่แพ็คเกจบางรุ่นหายไปในที่เก็บ Debian ตัวอย่างหนึ่ง: แพ็คเกจ "แพทช์" จำเป็นต้องมีในรุ่น 2.7.5-1 + deb9u1 แต่มีเฉพาะ 2.7.5-1 + deb9u2 เท่านั้น อีกตัวอย่างที่รุนแรงยิ่งกว่า: ต้องการ "linux-headers-4.9.0-9-common" (เนื่องจากเคอร์เนลที่เกี่ยวข้องถูกติดตั้ง) และมีเพียง "linux-headers-4.9.0-11-common" เท่านั้น

สิ่งนี้ทำให้ไม่สามารถสร้างสถานะของระบบได้อีกครั้ง

แพคเกจข้างต้นเป็นเพียงตัวอย่าง (ซึ่งในความเป็นจริงฉันพบ) ฉันสนใจที่จะเข้าใจและแก้ไขปัญหาทั่วไป

แนวคิดเบื้องหลังการปรับปรุง 'แพ็คเกจ' และแพ็คเกจรุ่นเหล่านี้คืออะไร

ฉันจะรับรุ่นก่อนหน้า (ไม่ใช่รุ่นเก่าจริง ๆ แต่รุ่นที่มีอายุสองสัปดาห์) ของแพ็คเกจ Debian ได้ที่ไหน มันควรจะเป็นไปได้โดยอัตโนมัติกระบวนการติดตั้งโดยทั่วไป


1
ค่อนข้างขึ้นอยู่กับซอฟต์แวร์ที่ใช้กำหนดค่าที่เก็บ Reprepro, iirc อนุญาตให้ใช้เพียงแพ็คเกจ
เท่านั้น

2
stableยังคงสอดคล้องอย่างน้อยก็จนกว่าจะถึงจุดต่อไป การอัปเดตที่เสถียรการทดสอบและไม่เสถียรมีเพียงเวอร์ชันล่าสุดของแพ็คเกจที่ระบุ สำหรับสิ่งอื่นคุณจะต้องมองในarchive.debian.org (หรือsnapshot.debian.orgตามที่กล่าวไว้ในคำตอบของ SK)
cas

5
มีเหตุผลที่คุณไม่ได้ใช้ repo ของคุณเองซึ่งคุณสามารถควบคุมนโยบายการเปลี่ยนและรุ่นพิน (ซึ่งจะมีประโยชน์ในการติดตั้งอัตโนมัติในอนาคต)
Eric Towers

2
linuxชื่อ pkg ใหม่เป็นข้อยกเว้น: โดยทั่วไปแพ็คเกจของ Debian stable จะใช้ชื่อแพคเกจเดียวกันและเปลี่ยนเฉพาะหมายเลขเวอร์ชั่นเท่านั้น linux-image-amd64ไม่เคยเปลี่ยนชื่อและขึ้นอยู่กับล่าสุดlinux-image-4.9.0-*เสมอ linux-image-4.9.0-*ชื่อ pkg ใหม่ทำเครื่องหมายการเปลี่ยนแปลงเคอร์เนล ABI ที่เข้ากันไม่ได้ที่จำเป็นในการ backport แก้ไขข้อบกพร่องบางอย่างและอนุญาตให้จัดการกับการคอมไพล์ใหม่ที่จำเป็นของโมดูลที่สร้างขึ้นเอง (dkms, ฯลฯ ) linux-headers-*ในทำนองเดียวกันสำหรับ
Ignis

1
เป็นความคิดที่อยู่เบื้องหลังการปรับปรุงเหล่านี้คืออะไร apt-get changelog packagename
IGNIS

คำตอบ:


63

ความสามารถในการทำซ้ำการตั้งค่าเฉพาะลงไปถึงรุ่นที่แน่นอนเป็นความต้องการของคุณไม่ใช่ของเดเบียน

Debian สนับสนุนไบนารีแพคเกจไบนารีแต่ละเวอร์ชั่นในรุ่นที่กำหนดเท่านั้น คู่ของนั่นคือการดูแลที่ดีเพื่อให้แน่ใจว่าการปรับปรุงแพคเกจในการเปิดตัวใด ๆ ที่ไม่แนะนำการถดถอยและเมื่อเป็นไปไม่ได้ที่จะดูแลเอกสารดังกล่าว การเก็บหลายแพคเกจที่กำหนดจะเพิ่มภาระการสนับสนุนและข้อกำหนดการทดสอบเท่านั้นตัวอย่างเช่นผู้ดูแลแพคเกจจะต้องทดสอบแพคเกจที่อัปเดตกับเวอร์ชันที่มีอยู่ทั้งหมดของไลบรารีที่พวกเขาใช้แทนรุ่นที่รองรับในปัจจุบันเท่านั้น ... แพ็คเกจจะได้รับการอัพเดตในรุ่นเสถียรเมื่อจำเป็นเท่านั้นเช่นเพื่อแก้ไขข้อบกพร่องร้ายแรง (รวมถึงปัญหาด้านความปลอดภัย) ในกรณีของเคอร์เนลบางครั้งหมายความว่าเคอร์เนล ABI เปลี่ยนไปและชื่อแพ็กเกจจะเปลี่ยนไปเนื่องจาก (เพื่อบังคับให้สร้างแพ็กเกจที่ขึ้นต่อกัน); มีเมตาแพคเกจที่คุณสามารถดึงแทนยากเข้ารหัส ABI ( linux-image-amd64, linux-headers-amd64ฯลฯ )

มี แต่วิธีแก้ปัญหาสำหรับสถานการณ์ของคุณ: ทุกแหล่งที่มารับการตีพิมพ์และแพคเกจไบนารีเก็บไว้ในsnapshot.debian.org เมื่อคุณสร้างการตั้งค่าเวอร์ชันคุณสามารถเลือกสแน็ปช็อตที่สอดคล้องกัน (ตัวอย่างเช่นหนึ่งในสแน็ปช็อตกันยายน 2019 ) และใช้เป็น URL ที่เก็บของคุณ:

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

หากคุณสิ้นสุดการพึ่งพานี้โปรดใช้กระจกแคชของการจัดเรียงบางอย่างเช่นApt-Cacher NG สิ่งนี้จะไม่เพียง แต่ลดภาระในเซิร์ฟเวอร์สแนปชอต แต่จะช่วยให้แน่ใจว่าคุณมีสำเนาของแพคเกจทั้งหมดที่คุณต้องการ

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


โปรดทราบว่าบางครั้งรุ่นก่อนหน้าบางรุ่นจะพร้อมใช้งาน - apt-cache madison packagenameจะแสดงรุ่นทั้งหมดที่aptสามารถดูผ่านที่เก็บที่กำหนดค่าไว้
ivanivan

5
(โปรดอย่าโหลดเกินเซิร์ฟเวอร์ snapshot / เก็บถาวรโดยใช้พวกเขาโดยไม่จำเป็นแทนมิเรอร์ใกล้เคียงดังนั้นปล่อยมิเรอร์ปกติของคุณในแหล่งที่มาของคุณรายการที่มีลำดับความสำคัญสูงกว่าสแน็ปช็อต .)
Peter Cordes

3
เพียงเพื่อยืนยันว่าฉันเข้าใจถูกต้อง: ในทางปฏิบัติมันไม่เกี่ยวกับรุ่นที่ฉันระบุเมื่อติดตั้งแพคเกจ (เนื่องจากรุ่นเก่าอาจไม่พร้อมใช้งาน) แต่เป็นสถานะของที่เก็บแพคเกจ (IES) ที่ฉันใช้อยู่ ดังนั้นถ้าฉันต้องการเดเบียน 'ใหม่' 9.8 ฉันต้องการที่เก็บแพ็กเกจในสถานะนั้น (เช่นสแน็ปช็อตหรือที่เก็บที่ฉันสร้างขึ้นเอง) จากนั้นแน่นอนแพคเกจ linux-header- * ที่ถูกต้องยังคงมีอยู่ . ถ้าฉันต้องการย้ายไปยัง Debian 9.9 ฉันจะได้รับที่เก็บแพ็กเกจไปยังสถานะที่เกี่ยวข้องและรัน apt-get dist-upgrade ถูกต้องหรือไม่
Flo

2
ใช่ที่ถูกต้อง.
Stephen Kitt

3
@Flo note จุดที่วางจำหน่าย (เช่น debian X.9 หรือ X.8) นั้นมีไว้สำหรับ iso ที่ดาวน์โหลดได้ดังนั้นการติดตั้งใหม่จึงไม่ดาวน์โหลดแพ็คเกจจำนวนมาก ในที่เก็บไม่มีความแตกต่างระหว่างการปล่อยจุดใด ๆ คุณจะได้รับแพ็คเกจล่าสุดเสมอ
Braiam

15

อย่าพึ่งพาเซิร์ฟเวอร์ที่ไม่อยู่ภายใต้การควบคุมของคุณเพื่อสร้างสถานะระบบที่เฉพาะเจาะจง แม้ว่าจะคิดว่าเซิร์ฟเวอร์ Debian นั้นน่าเชื่อถือ แต่คุณก็ไม่รู้ว่าจะเกิดอะไรขึ้นในอนาคต สิ่งนี้เกี่ยวข้องอย่างยิ่งกับที่เก็บอื่น ๆ ที่คุณอาจใช้

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

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


8

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

เมื่อบันทึกการตั้งค่าระบบให้ตรวจสอบการบันทึกสำเนาของ.deb-Files /var/cache/apt/archives/จาก apt-get downloadนอกจากนี้คุณยังสามารถใช้

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

มันอาจจะง่ายกว่าที่จะใช้dpkgโดยตรงเพื่อติดตั้งสิ่งที่คุณต้องการ


6
วิธีที่ดียิ่งขึ้น IMO ก็คือการใช้แคช APT ในพื้นที่ /var/cache/aptที่หลีกเลี่ยงปัญหาที่เกิดขึ้นในวรรคสามของคุณและยังหลีกเลี่ยงไม่ต้องเก็บเกี่ยว
Stephen Kitt

3
มีสองสายพันธุ์นี้ - หนึ่งคือการใช้สิ่งที่ต้องการ apt-กระจกโคลน repo ทั้งที่อื่น ๆ คือการดาวน์โหลดแพคเกจเท่านั้นที่เฉพาะเจาะจงและการอ้างอิง จากนั้นทำการจับภาพ dir - เช่นกับ btrfs เป็นpkgs-20190501, จากนั้นทำการประกาศ snapshot dir เป็น repo เมื่อถึงเวลา build ให้ใส่ repo url (เช่นhttp://debmirror/pkgs-20190501/...) ลงใน source.list แล้วรัน apt-get update, apt-get install $ pkgs ฯลฯ
bain
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.