ทำไม apt-cache จึงแสดงว่าติดตั้งแล้ว (ไม่มี) สำหรับแพ็กเกจ VPN ของคุณ
ติดตั้งแล้ว (ไม่มี) หมายความว่าแพ็กเกจ VPN ยังไม่ได้ติดตั้ง ไม่ใช่ขาดหาย ควรอ่านบรรทัดผู้สมัคร การปักหมุด และสถาปัตยกรรมก่อนแก้ไขแหล่งที่มา
แพ็กเกจ 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 ก่อนจะรับส่งข้อมูล