แพ็กเกจ VPN ที่รายงานว่า Installed: (none) ไม่ได้ขาดหาย แต่เพียงยังไม่ได้ติดตั้ง บรรทัดที่ตัดสินว่าคุณติดตั้งได้หรือไม่คือ Candidate ซึ่ง APT ดึงมาจากดัชนี ชื่อ suite สถาปัตยกรรม และกฎการปักหมุดใด ๆ ที่มีผลอยู่ รายงานส่วนใหญ่เกี่ยวกับแพ็กเกจ VPN ที่หายไปกลายเป็นปัญหาเรื่องผู้สมัคร ไม่ใช่ปัญหาเรื่องการแพ็กเกจ อ่านทั้งสองบรรทัดก่อนแตะรายการแหล่งที่มาแม้แต่รายการเดียว

ผมตรวจสอบผู้สมัครก่อนเพราะใช้เพียงคำสั่งเดียวและตัดความเป็นไปได้ครึ่งหนึ่งของข้อสันนิษฐานปกติออก

ผลลัพธ์ของ apt-cache policy บอกอะไรคุณ

apt-cache policy อ่านแคชแพ็กเกจในเครื่อง ไม่ใช่เครือข่าย โดยพิมพ์เวอร์ชันที่ติดตั้งแล้ว เวอร์ชันผู้สมัคร และตารางของทุกดัชนีที่เสนอแพ็กเกจพร้อมลำดับความสำคัญที่ผูกอยู่

apt-cache policy openvpn
apt-cache madison openvpn
apt list -a network-manager-openvpn

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

ถ้าบรรทัดผู้สมัครว่างหรือแสดง (none) แสดงว่าไม่มีสิ่งใดในแหล่งที่มาที่กำหนดค่าไว้เหมาะกับระบบนี้ตามที่กำหนดค่าไว้

สี่สาเหตุที่ผู้สมัครหายไป

ในทางปฏิบัติสาเหตุมักเป็นหนึ่งในสี่สิ่งเสมอ และแต่ละอย่างมีวิธีแก้ต่างกัน

ชื่อ suite ในแหล่งที่มาของคุณต้องตรงกับการกระจายที่แพ็กเกจถูกสร้างขึ้น ระบบ Debian bookworm ที่ชี้ไปยังมิเรอร์ trixie หรือรุ่น Ubuntu ที่ถูกเปลี่ยนชื่อในไฟล์ sources.list.d ระหว่างการอัปเกรด ไม่ได้แก้ไขอะไรสำหรับแพ็กเกจที่มีอยู่เฉพาะในอีก suite หนึ่ง เปรียบเทียบ lsb_release -cs กับฟิลด์ suite ในแต่ละรายการ

APT เห็นเฉพาะแพ็กเกจที่สร้างสำหรับสถาปัตยกรรมที่ dpkg รู้จัก คอนเทนเนอร์ 32 บิต อิมเมจ arm64 หรือการติดตั้งบน Raspberry Pi ที่ขอแพ็กเกจซึ่งจัดส่งเฉพาะสำหรับ amd64 จะได้ผู้สมัครว่างแทนข้อความข้อผิดพลาด dpkg --print-architecture และ dpkg --print-foreign-architectures บอกคุณว่าจริง ๆ แล้วคุณอยู่ในชุดใด

คอมโพเนนต์ก็สำคัญ แพ็กเกจใน contrib หรือ non-free จะมองไม่เห็นเมื่อเปิดใช้เฉพาะ main และ universe ของ Ubuntu ก็ทำงานแบบเดียวกัน ดัชนีมีอยู่และแพ็กเกจอยู่ในนั้น เพียงแต่รายการคอมโพเนนต์ที่เปิดใช้ของคุณไม่ได้รวมไว้

การปักหมุดคือสาเหตุที่เงียบที่สุด ไฟล์ใน /etc/apt/preferences.d สามารถจำกัดแพ็กเกจให้ต่ำกว่าเกณฑ์การติดตั้งได้ จากนั้นผู้สมัครที่ดีสมบูรณ์จะหายไปจากผลลัพธ์ในขณะที่ดัชนียังคงแสดงอยู่ เพราะ policy พิมพ์ลำดับความสำคัญข้างแหล่งที่มาแต่ละแห่ง แพ็กเกจที่ทุกแหล่งมีหมายเลขปักหมุดต่ำจึงเป็นเบาะแส

ดัชนีที่ล้าสมัยดูเหมือนแพ็กเกจที่ขาดหาย

แคชคือภาพ ณ ขณะหนึ่ง ถ้า apt update ครั้งล่าสุดล้มเหลวที่ดัชนีหนึ่ง คำค้นจะยังคงตอบจากสำเนาเก่า และแพ็กเกจที่คุณคาดหวังอาจไม่อยู่ในสำเนานั้น

apt update พิมพ์ข้อผิดพลาดแยกตามดัชนี ดังนั้นควรอ่านแทนการเลื่อนไปที่บรรทัดสุดท้ายทันที

การรีเฟรชที่ล้มเหลวเพราะข้อผิดพลาดลายเซ็น ไฟล์ release หมดอายุ หรือมิเรอร์เข้าถึงไม่ได้ จะทิ้งดัชนีก่อนหน้าไว้ในที่เดิม นั่นเป็นการออกแบบที่สมเหตุสมผลเพราะรักษาแคชที่ใช้งานได้เมื่อมิเรอร์ล่มชั่วคราว ผลข้างเคียงคือการค้นหาอาจสำเร็จในขณะที่รีโพซิทอรีออฟไลน์ นอกจากนี้ยังหมายความว่าการไม่มีแพ็กเกจไม่ได้พิสูจน์สิ่งใดจนกว่าคุณจะรู้ว่าดัชนีถูกดึงมาครั้งล่าสุดเมื่อใด ตรวจสอบวันที่ไฟล์ภายใต้ /var/lib/apt/lists ก่อนโทษชื่อแพ็กเกจ

ระบุชื่อแพ็กเกจที่คุณต้องการจริง ๆ

OpenVPN เป็นเดมอน และชิ้นส่วนที่ผู้คนมักต้องการคือแพ็กเกจแยกกัน

เอนจิน ปลั๊กอิน NetworkManager และตัวแก้ไขเดสก์ท็อปเป็น สามแพ็กเกจที่มีสามชื่อ และปลั๊กอินมีรุ่น GTK ที่ชื่อแตกต่างกันระหว่างการกระจาย apt-cache search --names-only openvpn จับคู่ชื่อและชื่อที่ให้ไว้แทนคำอธิบาย และนั่นคือสิ่งที่คุณต้องการเมื่อคุณรู้ชื่อของสิ่งนั้นโดยประมาณ

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

เปลี่ยนแหล่งที่มาสุดท้าย แล้วตรวจสอบธุรกรรม

การเพิ่มรีโพซิทอรีเปลี่ยนว่าใครส่งมอบการอัปเดตของคุณ จึงเป็นเรื่องท้ายของการสืบสวน ไม่ใช่ตอนเริ่ม

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

เมื่อผู้สมัครปรากฏขึ้น ให้จำลองก่อนนำไปใช้: apt-get install --simulate พร้อมชื่อแพ็กเกจแสดงสิ่งที่จะถูกดึงเข้ามาและสิ่งที่จะถูกนำออก ความพร้อมใช้งานของแพ็กเกจ การติดตั้ง และอุโมงค์ที่ทำงานได้ยังคงเป็นสามขั้นตอนแยกกัน และอุโมงค์ยังต้องมีโปรไฟล์ ข้อมูลรับรอง เส้นทาง และ DNS ก่อนจะรับส่งข้อมูล

บทความที่เกี่ยวข้อง