آپ کی سرنگ کل کام کر رہی تھی، اپ ڈیٹ کے بعد مشین دوبارہ بوٹ ہوئی، اور اب انٹرفیس اوپر نہیں آتا۔ جس نظام میں 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

اگر ماڈیول لوڈ ہونے سے انکار کرے، تو کرنل لاگ وجہ بتاتا ہے، اور ورژن کی عدم مطابقت صرف ایک امکان ہے۔ دوبارہ بنانے سے پہلے وہ سطر پڑھیں، کیونکہ دوسرا ویسا ہی بلڈ وہی دس منٹ لگاتا ہے اور وہی انکار دیتا ہے۔ پھر عارضی انٹرفیس ہٹا دیں تاکہ اگلی آزمائش صاف حالت سے شروع ہو۔

متعلقہ مضامین