ตัวติดตั้งพิมพ์ “unsupported distribution” คุณแก้สตริงหนึ่งเส้น แล้วมันดำเนินต่อจนล้มเหลวในอีกหนึ่งนาทีด้วยข้อผิดพลาดของตัวโหลด ลำดับนั้นคืออาการที่ควรจดจำ: ความล้มเหลวแรกคือการตรวจการรู้จำ และครั้งที่สองคือขอบเขตความเข้ากันได้ เป็นปัญหาสองอย่างที่บังเอิญปรากฏในเทอร์มินัลเดียวกัน การแก้การตรวจทำได้เพียงพาคุณจากอย่างแรกไปอย่างที่สอง

อาการ: ตัวติดตั้งหยุดที่ดิสโทรที่คุณดัดแปลง

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

ปัญหาเริ่มเมื่อทางลัดกลายเป็นแผน การแก้ไฟล์ระบุตัวตนทำให้การตรวจผ่าน และแพ็กเกจก็โหลดหรือไม่โหลดกับรันไทม์ที่ติดตั้งจริง หากล้มเหลวตรงนั้น การแก้ตัวตนเพิ่มเติมใด ๆ ก็ไม่ช่วย

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

สามเวอร์ชันที่ผู้คนเรียกว่าเวอร์ชันของระบบ

รีลีสดิสทริบิวชันระบุชื่อสภาพแวดล้อมที่แพ็กเกจไว้ เวอร์ชันไลบรารี C ระบุการติดตั้งรันไทม์และรีลีสของมัน เวอร์ชันคอมไพเลอร์ระบุชุดเครื่องมือ ในการสนทนาผู้คนเรียกทั้งสามว่า “เวอร์ชันของระบบ” แต่ในตัวติดตั้งมันใช้แทนกันไม่ได้

cat /etc/os-release
ldd --version | head -1
gcc --version | head -1
uname -m

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

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

อ่านข้อผิดพลาด ไม่ใช่การตรวจ

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

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

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

ทำไมการแก้สตริงจึงไม่ช่วย

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

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

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

เขียนรายงานที่ผู้ดูแลลงมือได้

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

ปล่อยตัวติดตั้งต้นฉบับไว้ไม่เปลี่ยนแปลงและอธิบายการตรวจแทนการหลบเลี่ยง การแยกแยะนั้นทำให้ผู้ดูแลแยกกฎการรู้จำที่แคบเกินไปออกจากขอบเขตความเข้ากันได้ของไบนารีจริง ซึ่งเป็นบั๊กสองอย่างที่ต่างกันมากพร้อมการแก้ไขสองอย่างที่ต่างกันมาก

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

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