آپ کی سروس OpenVPN کے چلنے سے پہلے ہی ناکام ہو جاتی ہے، اور خرابی ایک ایسے ماؤنٹ یونٹ کا ذکر کرتی ہے جو آپ نے کبھی ترتیب نہیں دیا۔ یہی اشارہ ہے: systemd پوری کارروائی سے انکار کر رہا ہے کیونکہ روٹ ماؤنٹ یونٹ مخفی ہے، اور آپ کی VPN پروفائل ابھی پڑھی نہیں گئی۔ عام وجہ رن ٹائم یونٹس کی ڈائریکٹری میں رہ جانے والی فائل ہے، نہ خراب fstab اور نہ غائب سرٹیفکیٹ۔ پہلے فائل کا پیچھا کریں، کیونکہ اسی کو خارج کرنا سب سے سستا توضیح ہے۔

خرابی روٹ ماؤنٹ کا نام لیتی ہے، آپ کی پروفائل کا نہیں

systemd خود روٹ ماؤنٹ یونٹ کرنل کی ماؤنٹ معلومات سے بناتا ہے اور یونٹ کو -.mount کہتا ہے کیونکہ ڈیش روٹ راستے کی نمائندگی کرتا ہے۔ یہ یونٹ عام طور پر صرف میموری میں ہوتا ہے اور اس کے پیچھے کوئی فائل نہیں ہوتی۔ جب خرابی کہتی ہے کہ یہ مخفی ہے، تو کسی نے یونٹ فائل وہاں رکھی ہے جہاں سے systemd اسے لوڈ کرے گا اور اس فائل کو /dev/null کی طرف اشارہ کیا ہے۔ مخفی ہونا ایک حقیقی حالت ہے، پیغام میں ٹائپ کی غلطی نہیں۔

انسٹانس یونٹ ناکام ہوتا ہے کیونکہ اس کا جاب گراف ترتیب اور اپنی ماؤنٹ ضروریات کے ذریعے روٹ ماؤنٹ تک پہنچتا ہے۔ کارروائی OpenVPN بائنری چلنے سے پہلے مسترد ہو جاتی ہے، اس لیے کلائنٹ کی ترتیب میں کچھ بھی وجہ نہیں ہو سکتا۔ اسی لیے پروفائلز، سرٹیفکیٹ یا اسناد بدلنے کا اس مخصوص ناکامی پر کوئی اثر نہیں ہوتا۔

OpenVPN کی خرابی تلاش کرنے سے پہلے رن ٹائم ڈائریکٹری دیکھیں

رن ٹائم یونٹس کی ڈائریکٹری میں بالکل اسی نام کی فائل تلاش کریں، پھر systemd سے پوچھیں کہ وہ یونٹ کو کیا سمجھتا ہے۔ دونوں جواب فوری ہیں، اور مل کر رہ جانے والی فائل کو حقیقی ماؤنٹ مسئلے سے الگ کرتے ہیں۔

ls -l /run/systemd/system/-.mount
systemctl status -.mount
systemctl list-unit-files --state=masked | grep mount

عام مشین میں ایسی فائل نہیں ہوتی، اور مخفی فہرست میں روٹ ماؤنٹ شامل نہیں ہوتا۔ اگر پہلا حکم /dev/null کی طرف سمبولک لنک دکھائے تو تشخیص طے ہے۔ اسی ڈائریکٹری میں انہی اوزار سے بنایا گیا tmp.mount ماسک بھی ہو سکتا ہے، اور یہ دوسرے نام سے اسی قسم کی ناکامی پیدا کرتا ہے۔ پوری ڈائریکٹری دیکھیں، صرف خرابی میں لکھا نام نہیں۔

ls -la /run/systemd/system/*.mount

اگر ڈائریکٹری صاف ہے اور یونٹ اب بھی مخفی ہے تو ماسک تلاش کے راستے میں کہیں اور ہے، اور systemctl cat -.mount دکھائے گا کہ کون سی فائل لوڈ ہو رہی ہے۔

فائل حذف کریں، دوبارہ لوڈ کریں اور پھر شروع کریں

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

sudo rm -f /run/systemd/system/-.mount /run/systemd/system/tmp.mount
sudo systemctl daemon-reload
systemctl status -.mount
sudo systemctl start [email protected]

پھر یہ سمجھنے کی بجائے کہ مرمت کام کر گئی، خود سروس کا جرنل پڑھیں۔ صاف آغاز صرف یہ ثابت کرتا ہے کہ systemd نے یونٹ قبول کر لیا؛ کلائنٹ پھر بھی غائب پروفائل، ناقابل رسائی ساتھی یا ایسے سرٹیفکیٹ کی وجہ سے مر سکتا ہے جو تصدیق نہ ہو۔ یہ OpenVPN کے عام مسائل تھے جو مخفی یونٹ کے پیچھے چھپے ہوئے تھے۔ جرنل درج کرتا ہے کہ کون سی پروفائل لوڈ ہوئی اور سرنگ واقعی قائم ہوئی یا نہیں۔ اگر یونٹ شروع ہو اور سرنگ نہ ہو تو آپ دوسرے مسئلے پر پہنچ گئے ہیں، اور یہ پیش رفت ہے۔

journalctl -u [email protected] -b --no-pager

چونکہ /run عارضی فائل سسٹم ہے، ری بوٹ فائل بھی صاف کر دیتا ہے۔ یہ ری بوٹ کو مفید جانچ بناتا ہے: اگر سروس ری بوٹ کے بعد چلے اور اگلی تعیناتی کے بعد پھر ناکام ہو تو فائل امیج میں پکائی جا رہی ہے۔

اسے امیج سے واپس آنے سے روکیں

کنٹینر یا ورچوئل مشین کا ٹیمپلیٹ جو تعمیر کے دوران ماؤنٹ یونٹس مخفی کرتا ہے، وہ یہ مخفی حالت ہر کلون میں لے جائے گا۔ اگلی چیز جسے فائل سسٹم درکار ہو ٹوٹ جاتی ہے، اور پیغام ماؤنٹ کو مورد الزام ٹھہراتا ہے، نہ کہ اس امیج کو جس سے آیا۔ ایک چلتی انسٹانس کے اندر مرمت کرنا مسئلہ اگلی انسٹانس بننے تک چھپا دیتا ہے۔

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

جو علامت یاد رکھنی چاہیے وہ خرابی اور اس چیز کے درمیان عدم مطابقت ہے جسے آپ ترتیب دے رہے تھے۔ جب systemd ماؤنٹ کی شکایت کرے اور آپ VPN کلائنٹ شروع کر رہے ہوں، تو پہلے پیغام میں یونٹ کا نام پڑھیں اور پھر سروس کا نام۔

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