Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Máy Ảo

Khắc phục lỗi build VirtualBox Guest Additions: Hướng dẫn từng bước

Tiêu đề bài viết hứa hẹn nhiều. Hãy thu hẹp và căn chỉnh kỳ vọng. Điểm xuất phát: bạn đã dùng VirtualBox, cài Guest Additions trong Linux VM. Nào đó, dịch vụ VirtualBox không còn chạy trong guest OS. Thử cài lại module, gặp failure lạ, trỏ đến bad kernel config, thiếu sources/headers... Vấn đề: không có cái nào hợp lý.

Bạn có đúng kernel sources và headers, nhưng VirtualBox không thấy chúng, dẫn đến biên dịch module kernel chính thất bại, ảnh hưởng hoạt động VM. Hơn nữa, chuyện này xảy ra gần như ngẫu nhiên, đôi khi sau cập nhật kernel. Với những điều đó, chúng ta sẽ giải quyết bằng vài thủ thuật gọn gàng.

Vấn đề

Demo với CentOS VM. Bạn có đủ build tools, đã làm bài tập này nhiều lần (kể cả cài driver Nvidia). Quy trình tương tự. Dù distro khác, quá trình lấy tools/phần mềm để compile rất giống. Khi nắm vững, dễ như ăn kẹo. Tuy nhiên, khi build modules (<mount>/VBoxLinuxAdditions.run), lệnh fail:

Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following module compilation fails then this could be the reason. The missing package can be probably installed with yum install kernel-devel-...
Building the main Guest Additions module [FAILED]
(Look at /var/log/vboxadd-install.log to find out what went wrong)

Thử cài gói "thiếu":

Package kernel-devel-... already installed and latest version
Nothing to do

Giải pháp

Phải xem log, bài tập troubleshooting tuyệt vời để mài giũa kỹ năng giải quyết vấn đề Linux – sứ mệnh tối thượng tại Dedoimedo. Mở file log, nhìn từ dưới lên, bắt đầu từ lỗi cuối. Lỗi nổi bật:

Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again. Stop.

Thú vị. VirtualBox thực sự không thấy kernel sources. Fix thử:

export KERN_DIR=/usr/src/kernels/`uname -r`

Vẫn không được. Cần lỗi khác. Quay lại log với insight thêm. Dòng sau (bỏ qua version kernel cụ thể, không quan trọng):

grep: /lib/modules/3.10.0-123.20.1.el7.x86_64/build/include/linux/version.h: No such file or directory

Cái này giống bug lạ, vì ta biết headers đã có (yum trả về). Nếu cd thủ công vào /lib/modules cho kernel đang chạy, thấy symbolic link bị hỏng.

Link build trỏ đến relative path – không bao giờ là ý tưởng tốt, khiến VirtualBox không tìm thấy phần mềm mong đợi. Fix bằng absolute path:

cd /lib/modules/`uname -r`/
ln -sf /usr/src/kernels/3.10.63-11.el7.x86_64 build

Bây giờ symbolic link đã fix. Compile vui vẻ.

Kết luận

Kết thúc hướng dẫn, bạn khôn hơn, thông minh hơn, thư giãn hơn, hạnh phúc hơn. Loại vấn đề này có thể làm người ta điên, vì có hàng chục false positive symptoms gây lỗi tương tự. Nhưng nếu loại trừ build issues, nhớ rằng trước đây chạy tốt, thì quên VirtualBox vs kernel incompatibility, nhìn nơi khác.

Trường hợp này, symbolic link implement tồi là nguồn gốc [sic] mọi vấn đề. Nguyên nhân không rõ, hoặc tại sao nó thay đổi, nhưng một số gói cài có thể đã thay đổi nó, hoặc hệ thống quyết định misbehave. Quan trọng là hiểu workflow, trace back, fix issue. Awesome phải không? Hướng dẫn hoàn tất. Enjoy.

Cheers.