আপনার টানেল গতকাল কাজ করছিল, আপডেটের পরে মেশিনটি রিবুট হলো, আর এখন ইন্টারফেসটি উঠছে না। যে সিস্টেমে WireGuard বাহ্যিক মডিউল হিসেবে তৈরি হয়, সেখানে সাধারণ কারণ হলো ডিস্কে থাকা মডিউলটি এখন চলা কার্নেল রিলিজের চেয়ে ভিন্ন কোনো রিলিজের অন্তর্গত। একই মেশিনে একই রকম নামের হেডার থাকলেও তা ওই মিলের কোনো প্রমাণ নয়। শুধু রিলিজ স্ট্রিং-ই এটি নির্ধারণ করে।

চলমান কার্নেল নাকি ইনস্টল করা কার্নেল

একটি আপডেট নতুন কার্নেল প্যাকেজ ইনস্টল করে এবং মেশিন রিস্টার্ট না হওয়া পর্যন্ত পুরোটিকে ডিস্কে রেখে দেয়। রিস্টার্টের পরে চলমান রিলিজ বদলে যায়, আর আগেরটির বিরুদ্ধে তৈরি যেকোনো মডিউল ব্যবহারের অযোগ্য হয়ে পড়ে, যদিও তার ফাইলগুলো এখনও থাকে। এই ফাঁকটিই সেই পরিচিত অভিযোগ ব্যাখ্যা করে, যেখানে একটি মেশিন রিবুটের আগে ঠিক ছিল আর পরে নষ্ট, মাঝে কোনো কনফিগারেশন পরিবর্তন ছাড়াই। এটিই আরও ব্যাখ্যা করে কেন হেডার পুনরায় ইনস্টল করা মাঝে মাঝে সমস্যা ঠিক করার মতো মনে হয় আর মাঝে মাঝে নয়।

আপনি যে হেডার প্যাকেজ ইনস্টল করেন তা সম্ভবত সবচেয়ে নতুন কার্নেল প্যাকেজের সঙ্গে মেলে, বাস্তবে বুট হওয়া কার্নেলের সঙ্গে নয়, আর প্যাকেজের নামে এই পার্থক্য বোঝার কিছু নেই; শুধু রিলিজ স্ট্রিং-ই তা করে। যা ইনস্টল আছে তা দেখার আগে যা চলছে তা দেখুন।

পুনর্নির্মাণের আগে তিনটি পরীক্ষা

প্রথম পরীক্ষা হলো কোন কার্নেল চলছে। দ্বিতীয়টি হলো ওই রিলিজের জন্য কোনো মডিউল আছে কি না এবং তা খুঁজে পাওয়া যায় কি না। তৃতীয়টি হলো কার্নেল এটি ইতিমধ্যে লোড করেছে কি না। চতুর্থ প্রশ্ন, ইন্টারফেস তৈরি করা যায় কি না, তা মডিউল নয় বরং বিশেষাধিকার পরীক্ষা করে, তাই এর জায়গা এই তালিকায় নয়, পুনর্নির্মাণের পরে।

নিচের কমান্ডগুলো কিছু না বদলেই প্রথম তিনটির উত্তর দেয়। এগিয়ে যাওয়ার আগে প্রতিটি ফলাফল পড়ুন, কারণ প্রতিটি উত্তর ভিন্ন একটি সমাধান বাদ দেয়।

uname -r
ls -l /lib/modules/$(uname -r)/build
modinfo wireguard
lsmod | grep wireguard

যদি দ্বিতীয় লাইন জানায় যে পথটি নেই, তাহলে চলমান কার্নেলের জন্য বিল্ড এনভায়রনমেন্ট অনুপস্থিত এবং আপনি যা কম্পাইল করবেন তার কিছুই এর সঙ্গে মিলবে না। পথটি থাকা সত্ত্বেও যদি modinfo ব্যর্থ হয়, তবে মডিউলটি আদৌ ইনস্টল নাও থাকতে পারে, যা ট্রি-র ভেতরেই ইমপ্লিমেন্টেশন দেওয়া কার্নেলের ক্ষেত্রে স্বাভাবিক। যদি modinfo সফল হয় আর lsmod কিছু না দেখায়, তবে মডিউলটি আছে কিন্তু লোড হয়নি, যা বিল্ডের নয় বরং লোডের সময়ের সমস্যা। প্রতিটি ফলাফল আপনাকে ভিন্ন জায়গায় নিয়ে যায়, তাই কমান্ডের চেয়ে পড়াটাই বেশি জরুরি।

চলমান রিলিজের বিরুদ্ধে তৈরি করুন

বাহ্যিক মডিউল প্রস্তুত করা একটি কার্নেল ট্রি-র বিরুদ্ধে কম্পাইল হয়, আর কার্নেলের বাহ্যিক-মডিউল নির্দেশিকা সবচেয়ে বেশি দেখানো সংস্করণ নম্বরের ডিরেক্টরি নয়, বরং চলমান কার্নেলের অন্তর্গত বিল্ড ডিরেক্টরি ব্যবহারের কথা বলে। ওই বিল্ড ডিরেক্টরিটি কার্নেল প্যাকেজের রক্ষণাবেক্ষণ করা একটি সিমলিংক, তাই এটি এখন বুট হওয়া রিলিজের ট্রি-র দিকে নির্দেশ করে। এই পরোক্ষতাই মূল বিষয়: এটি এমন একটি বাছাই সরিয়ে দেয় যা আপনি অন্যথায় ভুল করতেন। স্পষ্টভাবে এর নাম বলা লক্ষ্যকে দ্ব্যর্থহীন করে।

একটি বিবরণ গুরুত্বপূর্ণ যখন ট্রিটি পুরোপুরি বিল্ড না হয়ে শুধু প্রস্তুত করা হয়েছে। প্রস্তুত লক্ষ্যটি কিছু বাহ্যিক বিল্ডের প্রয়োজনীয় সিম্বল ভার্সনিং ফাইল তৈরি করে না, তাই হেডারে ভরা একটি ট্রি স্বয়ংক্রিয়ভাবে সম্পূর্ণ বিল্ড এনভায়রনমেন্ট নয়। অনুপস্থিত সিম্বলের কারণে বিল্ড ব্যর্থ হলে ওই ফাইলটিই প্রথম দেখার জায়গা।

sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
sudo depmod -a

যখন প্যাকেজ করা হেডার পিছিয়ে থাকে

যেসব ডিস্ট্রিবিউশন ও সিঙ্গেল-বোর্ড কম্পিউটার নিজেদের কার্নেল প্যাকেজ করে, সেখানে হেডার রিলিজের চেয়ে দিন বা সপ্তাহ পিছিয়ে থাকতে পারে। হেডার প্যাকেজ নামে সঠিক কিন্তু বিষয়বস্তুতে পুরোনো হতে পারে, যা এমন একটি বিল্ড দেয় যা কম্পাইল হয় কিন্তু কম্পাইলের সময় নয়, লোডের সময় ব্যর্থ হয়। উৎস মেশানো আরও খারাপ করে: তৃতীয় পক্ষের রিপোজিটরি থেকে হেডার নেওয়া ডিস্ট্রিবিউশন কার্নেল, বা সাধারণ হেডার নেওয়া ভেন্ডর কার্নেল পরিষ্কারভাবে কম্পাইল হয়ে গিয়েও চলমান কার্নেল কর্তৃক প্রত্যাখ্যাত হতে পারে, কারণ কনফিগারেশন আলাদা। শুধু সংস্করণ নম্বর দিয়ে তা মেটে না।

মেশিনটি যদি পরীক্ষামূলক কার্নেল চ্যানেল অনুসরণ করে, তাহলে সঙ্গতিপূর্ণ বিল্ড আর্টিফ্যাক্ট নিয়ে সেখানেই থাকবেন কি না, নাকি সমর্থিত প্যাকেজ সেটে ফিরবেন, তা সচেতনভাবে ঠিক করুন। আপডেট পুনরাবৃত্তি করে টুকরোগুলো মিলে যাবে আশা করা কোনো পরিকল্পনা নয়, কারণ একই অমিল প্রতিবারই ফিরে আসে।

পুনর্নির্মাণের পরে ইন্টারফেস যাচাই করুন

সফল ইনস্টলের পরে ইন্টারফেস তৈরি করাই সেই পরীক্ষা যা গুরুত্বপূর্ণ, তার পরে কার্নেল আসলে কী লোড করেছে এবং অস্বীকার করলে লগ কী বলছে তা পড়া। যে মডিউল লোড হয় আর যে ইন্টারফেস তৈরি করা যায় না, তারা ভিন্ন কারণের ভিন্ন ব্যর্থতা। নিচের তিনটি কমান্ড তাদের আলাদা করে।

sudo ip link add wg9 type wireguard
lsmod | grep wireguard
sudo dmesg | tail -5

মডিউল যদি লোড হতে অস্বীকার করে, কার্নেল লগ কারণ জানায়, আর সংস্করণের অমিল কেবল একটি সম্ভাবনা। আবার তৈরি করার আগে ওই লাইনটি পড়ুন, কারণ দ্বিতীয় একই রকম বিল্ড একই দশ মিনিট খরচ করে একই অস্বীকৃতি দেয়। পরে অস্থায়ী ইন্টারফেসটি সরিয়ে দিন যাতে পরের পরীক্ষাটি পরিচ্ছন্ন অবস্থা থেকে শুরু হয়।

সম্পর্কিত নিবন্ধ