सबसे पहले, इस लेख का शीर्षक बहुत कुछ वादा करता है। तो आइए इसे संकीर्ण करें और उम्मीदों को संरेखित करें। प्रारंभिक बिंदु यह है कि आपने पहले VirtualBox का उपयोग किया है, और आपके Linux वर्चुअल मशीनों में Guest Additions इंस्टॉल थे। अब, किसी कारण से, VirtualBox सेवा आपके गेस्ट ऑपरेटिंग सिस्टम में नहीं चलती है। यदि आप मॉड्यूल को फिर से इंस्टॉल करने का प्रयास करते हैं, तो आपको एक अजीब विफलता मिलती है, जो या तो एक खराब कर्नेल कॉन्फ़िगरेशन, लापता स्रोत और हेडर, और इसी तरह की समस्याओं की ओर इशारा करती है। बात यह है कि इनमें से कोई भी समझ में नहीं आता।
आपके पास सही कर्नेल स्रोत और हेडर हैं, लेकिन किसी कारण से, VirtualBox उन्हें नहीं देख रहा है, और इसलिए मुख्य कर्नेल मॉड्यूल का संकलन विफल हो रहा है, जो बदले में आपके वर्चुअल मशीनों के काम करने के तरीके को प्रभावित कर रहा है। इसके अलावा, ऐसा लगभग बेतरतीब ढंग से होता प्रतीत होता है, और यह कभी-कभी कर्नेल अपडेट के बाद होता है। इस सब को ध्यान में रखते हुए और अधिक, हम अब कुछ साफ और सरल ट्रिक्स का उपयोग करके समस्या को हल करने का प्रयास करेंगे।
हाथ में समस्या
आइए CentOS वर्चुअल मशीन के साथ प्रदर्शित करें। आपके पास सभी आवश्यक बिल्ड टूल्स हैं, और हमने यह अभ्यास कई बार पहले किया है, जिसमें जब हमने इस ऑपरेटिंग सिस्टम के लिए Nvidia ड्राइवर सेटअप करने की कोशिश की थी। वही ड्रिल यहां लागू होता है। लेकिन भले ही आप अन्य डिस्ट्रो चला रहे हों, फिर से, सही टूल्स और सॉफ्टवेयर प्राप्त करने की प्रक्रिया जो संकलन करने में सक्षम हो, बहुत समान है। एक बार जब आप इसे समझ लेते हैं, तो यह आसान है। हालांकि, मॉड्यूल बनाते समय (<mount>/VBoxLinuxAdditions.run), कमांड विफल हो जाती है:
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)
लेकिन अगर आप कथित रूप से लापता पैकेज को इंस्टॉल करने का प्रयास करते हैं:
Package kernel-devel-... already installed and latest version
Nothing to do
समाधान
हमें लॉग्स से परामर्श करना चाहिए, और यह एक बेहतरीन समस्या निवारण अभ्यास है, जो Dedoimedo पर अंतिम मिशन, आपके Linux समस्या समाधान कौशल को निखारने में मदद करना चाहिए। लॉग फाइल खोलें, और अंदर झांकें। आपको नीचे से ऊपर शुरू करना चाहिए, अंतिम त्रुटि के साथ, और यह पता लगाने की कोशिश करनी चाहिए कि क्या हुआ। अधिक उल्लेखनीय त्रुटियों में से एक होगी:
Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR=<directory> and run Make again. Stop.
दिलचस्प। लगता है VirtualBox वास्तव में हमारे कर्नेल स्रोतों को नहीं देखता। आइए इसे ठीक करें, और फिर यह देखने के लिए कमांड को फिर से चलाएं कि क्या हमने अपनी समस्या ठीक कर ली है।
export KERN_DIR=/usr/src/kernels/`uname -r`
फिर भी, कोई फायदा नहीं। हमें एक अलग त्रुटि की तलाश करने की आवश्यकता है। वास्तव में, इंस्टॉलेशन समस्या पर वापस जा रहे हैं, स्क्रिप्ट ने स्रोतों के बजाय हेडर्स के बारे में शिकायत की थी। जिसका अर्थ है कि हमारा मुद्दा सबसे अधिक संभावना कहीं और है। और एक बार फिर लॉग्स के माध्यम से ब्राउज़ करना, कुछ अतिरिक्त अंतर्दृष्टि के साथ। लाइनों में से एक - विशिष्ट कर्नेल संस्करण को अनदेखा करें, यह महत्वपूर्ण नहीं है।
grep: /lib/modules/3.10.0-123.20.1.el7.x86_64/build/include/
linux/version.h: No such file or directory
यह लगभग एक अजीब बग की तरह लगता है, क्योंकि हम जानते हैं कि हमारे पास हेडर मौजूद हैं, क्योंकि yum कमांड वापस आता है। यदि हम मैन्युअल रूप से चल रहे कर्नेल के लिए /lib/modules डायरेक्टरी में cd करते हैं, तो हम देख सकते हैं कि हम वास्तव में एक टूटे हुए प्रतीकात्मक लिंक का सामना कर रहे हैं।
बिल्ड लिंक एक सापेक्ष पथ की ओर इशारा करता है, जो कभी भी एक अच्छा विचार नहीं है, और इस प्रकार, VirtualBox अपेक्षित सॉफ्टवेयर को खोजने में असमर्थ है। हम इसे एक पूर्ण पथ का उपयोग करके ठीक करेंगे, और इस प्रकार इस मुद्दे को पूरी तरह से टाल देंगे।
cd /lib/modules/`uname -r`/
ln -sf /usr/src/kernels/3.10.63-11.el7.x86_64 build
अब, प्रतीकात्मक लिंक ठीक हो गया है:
और हम खुशी-खुशी संकलन कर सकते हैं:
निष्कर्ष
हम अपने ट्यूटोरियल के अंत पर पहुंच गए हैं, थोड़ा समझदार, होशियार, अधिक आराम से, खुश। इस तरह की समस्याएं वास्तव में लोगों को पागल कर सकती हैं, क्योंकि दर्जनों गलत सकारात्मक लक्षण हैं जो समान त्रुटियों का कारण बन सकते हैं। लेकिन अगर हम बिल्ड मुद्दों को बाहर करते हैं, तो याद रखें कि यह पहले ठीक काम करता था, तो हम VirtualBox बनाम कर्नेल असंगतता के बारे में भूल सकते हैं, और कहीं और देख सकते हैं।
हमारे मामले में, एक खराब तरीके से लागू किया गया प्रतीकात्मक लिंक हमारी सभी समस्याओं का स्रोत [sic] है। इसका कारण क्या है, मुझे यकीन नहीं है, या यह क्यों बदल गया, लेकिन कुछ इंस्टॉल किए गए पैकेजों ने इसे बदल दिया होगा, या सिस्टम में कुछ ने दुर्व्यवहार करने का फैसला किया। महत्वपूर्ण बात यह है कि हम वर्कफ़्लो को समझते हैं, और हम इसे वापस ट्रेस कर सकते हैं, और समस्या को ठीक कर सकते हैं। विस्मयकारी है ना? खैर, यह हमारे गाइड को पूरा करता है। आनंद लें।
चीयर्स।