ก่อนอื่น ชื่อของบทความนี้สัญญาไว้มากมาย ดังนั้นมาจำกัดขอบเขตและคาดหวังให้ตรงกัน จุดเริ่มต้นคือคุณเคยใช้ VirtualBox มาก่อน และติดตั้ง Guest Additions ในเครื่องเสมือน Linux ของคุณ ด้วยเหตุผลบางประการ บริการ VirtualBox จะไม่ทำงานในระบบปฏิบัติการเกสต์ของคุณอีกต่อไป หากคุณพยายามติดตั้งโมดูลอีกครั้ง คุณจะพบข้อผิดพลาดแปลกๆ ซึ่งชี้ไปที่การกำหนดค่าเคอร์เนลที่ไม่ถูกต้อง แหล่งที่มาและส่วนหัวขาดหายไป และปัญหาที่คล้ายกัน สิ่งเหล่านี้ไม่สมเหตุสมผลเลย
คุณมีแหล่งที่มาของเคอร์เนลและส่วนหัวที่ถูกต้อง แต่ด้วยเหตุผลบางประการ VirtualBox ไม่เห็นสิ่งเหล่านี้ ดังนั้นการคอมไพล์โมดูลเคอร์เนลหลักจึงล้มเหลว ซึ่งจะส่งผลกระทบต่อวิธีการทำงานของเครื่องเสมือนของคุณ ยิ่งกว่านั้น ดูเหมือนว่าจะเกิดขึ้นเกือบแบบสุ่ม และบางครั้งก็เกิดขึ้นหลังจากการอัพเดตเคอร์เนล เมื่อคำนึงถึงสิ่งนี้และอื่น ๆ ตอนนี้เราจะพยายามแก้ปัญหาโดยใช้ลูกเล่นที่ประณีตและเรียบง่าย
ปัญหาในมือ
มาสาธิตด้วยเครื่องเสมือน CentOS คุณมีเครื่องมือสร้างที่จำเป็นทั้งหมด และเราเคยทำแบบฝึกหัดนี้มาแล้วหลายครั้ง รวมถึงเมื่อเราพยายามติดตั้งไดรเวอร์ Nvidia สำหรับระบบปฏิบัติการนี้ การฝึกซ้อมแบบเดียวกันนี้ใช้ที่นี่ แต่แม้ว่าคุณจะใช้งาน distros อื่น กระบวนการในการรับเครื่องมือและซอฟต์แวร์ที่เหมาะสมเพื่อให้สามารถคอมไพล์ก็คล้ายกันมาก พอชินก็ง่ายนิดเดียว อย่างไรก็ตาม ในขณะที่สร้างโมดูล (
สร้างโมดูลเคอร์เนล VirtualBox Guest Additions
ไม่พบส่วนหัวของเคอร์เนลที่กำลังทำงานอยู่ในปัจจุบัน ถ้า
การคอมไพล์โมดูลต่อไปนี้ล้มเหลว นี่อาจเป็นได้
เหตุผล. อาจติดตั้งแพ็คเกจที่ขาดหายไปด้วย
ยำติดตั้ง kernel-devel-...
การสร้างโมดูลส่วนเพิ่มของผู้เยี่ยมชมหลัก [ล้มเหลว]
(ดูที่ /var/log/vboxadd-install.log เพื่อหาข้อผิดพลาด)
แต่ถ้าคุณพยายามติดตั้งแพ็คเกจที่คาดคะเนว่าขาดหายไป:
Package kernel-devel-... ติดตั้งแล้วและเป็นเวอร์ชันล่าสุด
ไม่มีอะไรทำ
วิธีแก้ไข
เราต้องศึกษาบันทึก และนี่คือแบบฝึกหัดการแก้ปัญหาที่ยอดเยี่ยม ซึ่งจะช่วยให้คุณฝึกฝนทักษะการแก้ปัญหา Linux ของคุณ ซึ่งเป็นภารกิจสุดท้ายที่ Dedoimedo เปิดไฟล์บันทึกและดูข้างใน คุณควรเริ่มต้นจากล่างขึ้นบนโดยมีข้อผิดพลาดล่าสุดและพยายามค้นหาว่าเกิดอะไรขึ้น ข้อผิดพลาดที่น่าสังเกตอย่างหนึ่งคือ:
ข้อผิดพลาด:ไม่พบแหล่งที่มาของเคอร์เนล Linux ปัจจุบันของคุณ ระบุ KERN_DIR=
น่าสนใจ. ดูเหมือนว่า VirtualBox จะไม่เห็นแหล่งที่มาของเคอร์เนลของเราจริงๆ มาแก้ไขกัน จากนั้นเรียกใช้คำสั่งอีกครั้งเพื่อดูว่าเราได้แก้ไขปัญหาที่เรากำลังเผชิญอยู่หรือไม่
ส่งออก KERN_DIR=/usr/src/kernels/`uname -r`
ยังไงก็ไม่ดี เราต้องมองหาข้อผิดพลาดอื่น ย้อนกลับไปที่ปัญหาการติดตั้ง สคริปต์บ่นเกี่ยวกับส่วนหัวมากกว่าแหล่งที่มา ซึ่งหมายความว่าปัญหาของเราน่าจะอยู่ที่อื่น และเรียกดูบันทึกอีกครั้งพร้อมข้อมูลเชิงลึกเพิ่มเติม หนึ่งในบรรทัด - ไม่ต้องสนใจเวอร์ชันเคอร์เนลเฉพาะ ซึ่งไม่สำคัญ
grep:/lib/modules/3.10.0-123.20.1.el7.x86_64/build/include/
linux/version.h:ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ดูเหมือนว่าจะเป็นข้อบกพร่องแปลก ๆ เพราะเรารู้ว่าเรามีส่วนหัวอยู่แล้วเมื่อคำสั่ง yum ส่งกลับ หากเราใส่ cd ลงในไดเร็กทอรี /lib/modules ด้วยตนเองสำหรับเคอร์เนลที่กำลังรัน เราจะเห็นว่าเรากำลังเผชิญกับลิงก์สัญลักษณ์ที่ใช้งานไม่ได้
ลิงก์บิลด์ชี้ไปที่เส้นทางสัมพัทธ์ ซึ่งไม่ใช่ความคิดที่ดี ดังนั้น VirtualBox จึงไม่สามารถค้นหาซอฟต์แวร์ที่ต้องการได้ เราจะแก้ไขปัญหานี้โดยใช้เส้นทางที่แน่นอน และจะหลีกเลี่ยงปัญหาทั้งหมด
cd /lib/modules/`uname -r`/
ln -sf /usr/src/kernels/3.10.63-11.el7.x86_64 สร้าง
ขณะนี้ ลิงก์สัญลักษณ์ได้รับการแก้ไขแล้ว:
และเราสามารถรวบรวมได้อย่างสนุกสนาน:
สรุป
เรามาถึงจุดสิ้นสุดของบทช่วยสอนของเราแล้ว เด็กน้อยฉลาดขึ้น ฉลาดขึ้น ผ่อนคลายมากขึ้น มีความสุขมากขึ้น ปัญหาประเภทนี้สามารถทำให้คนเสียสติได้จริงๆ เพราะมีอาการบวกลวงมากมายที่อาจทำให้เกิดข้อผิดพลาดที่คล้ายกัน แต่ถ้าเราไม่รวมปัญหาการสร้าง จำไว้ว่าสิ่งนี้เคยทำงานได้ดี เราก็สามารถลืมเรื่องความเข้ากันไม่ได้ของ VirtualBox กับเคอร์เนลและมองหาที่อื่น
ในกรณีของเรา ลิงก์สัญลักษณ์ที่ใช้งานไม่ดีคือแหล่งที่มา [sic] ของปัญหาทั้งหมดของเรา ฉันไม่แน่ใจถึงสาเหตุนั้นหรือทำไมมันถึงเปลี่ยนไป แต่แพ็คเกจที่ติดตั้งบางส่วนอาจเปลี่ยนแปลงหรือมีบางอย่างในระบบตัดสินใจทำงานผิดปกติ สิ่งสำคัญคือเราต้องเข้าใจเวิร์กโฟลว์ และเราสามารถตรวจสอบย้อนกลับและแก้ไขปัญหาได้ เจ๋งใช่มั้ยล่ะ? นั่นทำให้คู่มือของเราสมบูรณ์ สนุก.
ไชโย