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

ก่อนจะเปลี่ยนอะไร ให้บันทึกพาธของไฟล์เรียกใช้ สถาปัตยกรรม และข้อผิดพลาดแรกตามต้นฉบับ

ความล้มเหลวสี่แบบที่อยู่เบื้องหลังข้อผิดพลาดเดียว

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

lddกับไบนารี และreadelf -dกับส่วนไดนามิกของมันแสดงให้เห็นว่ามันต้องการอะไร ซึ่งมักเพียงพอที่จะแยกปัญหาของไฟล์ออกจากปัญหาของอินเทอร์เฟซ

สิ่งที่ OpenSSL 3 ต้องการจริง ๆ

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

นั่นแย่กว่าความล้มเหลวที่ชัดเจน ข้อผิดพลาดของตัวโหลดบอกปัญหาทันที ในขณะที่ความล้มเหลวที่เกิดขึ้นช้าภายในการทำงานหนึ่งดูเหมือนปัญหาเครือข่ายหรือข้อมูลรับรองและส่งการสืบสวนไปผิดทาง

ทำไมไลบรารีของดิสทริบิวชันจึงเป็นที่ที่ไม่เหมาะสม

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

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

ตรวจสอบตัวเรียกใช้ ไม่ใช่การเรียกใช้

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

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

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

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