macOS پر OpenConnect: پیکیج، ریلیز آرکائیو یا git کلون
Homebrew ایک بائنری اور نیٹ ورک اسکرپٹ فراہم کرتا ہے؛ سورس ٹری انہیں بنانے اور چلانے سے پہلے کوئی چیز فراہم نہیں کرتا۔ جانیں کہ آپ کا کنکشن کون سا استعمال کرتا ہے۔
Mac پر OpenConnect کلائنٹ حاصل کرنے کے تین راستے ہیں، اور وہ ڈسک پر مختلف چیزیں چھوڑتے ہیں۔ Homebrew فارمولا ایک کمپائل شدہ بائنری اور وہ نیٹ ورک اسکرپٹ انسٹال کرتا ہے جو روٹس اور DNS ترتیب دیتی ہے۔ ریلیز آرکائیو آپ کو تیار شدہ بلڈ سسٹم کے ساتھ سورس کوڈ دیتا ہے۔ git چیک آؤٹ آپ کو اس کے بغیر سورس کوڈ دیتا ہے۔ غلط کا انتخاب ہی وجہ ہے کہ لوگ ٹیوٹوریل شروع ہونے کے چند منٹوں میں ہی غائب configure سے دوچار ہوتے ہیں۔
ایک ہی نام کے تحت دو مختلف مشینیں
پیکیج کا راستہ ایک ہی کمانڈ ہے، اور جن کا کام ترقی کرنا نہیں بلکہ جڑنا ہے، ان کے لیے یہی درست ڈیفالٹ ہے۔
brew install openconnect
یہ کیا انسٹال کرتا ہے، کمانڈ سے زیادہ اہم ہے۔ آپ کو کلائنٹ کی بائنری ملتی ہے، اور vpnc-script بھی ملتی ہے جسے کلائنٹ انٹرفیس، روٹس اور حل کنندہ کو پروگرام کرنے کے لیے بلاتا ہے۔ دونوں جوڑی کے طور پر کام کرتے ہیں: بائنری TLS سیشن ختم کرتی ہے اور پیدا شدہ انٹرفیس اسکرپٹ کو دیتی ہے، اور اسکرپٹ وہ حصہ ہے جو جانتا ہے کہ یہ آپریٹنگ سسٹم اپنا نیٹ ورک کیسے بدلنا چاہتا ہے۔
یہ تقسیم الجھے ہوئے رپورٹوں کی پوری قسم کی وضاحت کرتی ہے۔ جو کلائنٹ جڑتا ہے، کامیابی بتاتا ہے اور پھر ٹریفک غلط راستے پر بھیجتا ہے، اس میں عام طور پر اسکرپٹ کا مسئلہ ہوتا ہے، ٹنل کا نہیں، اور فارمولا دوبارہ انسٹال کرنا اسے صرف اس لیے ٹھیک کرتا ہے کہ اسکرپٹ بھی دوبارہ انسٹال ہوتی ہے۔ فارمولے کی موجودہ macOS اور CPU آرکیٹیکچر سپورٹ کی جانچ کریں، اس کی بنیاد پر منصوبہ بنانے سے پہلے؛ جو Mac شیل کو بالکل ٹھیک چلاتا ہے، اس کے لیے بھی شاید ابھی کوئی موجودہ پیکیج تیار نہ ہوا ہو۔
سورس کا راستہ اصل میں کیا کرتا ہے
ریلیز آرکائیو تیار شدہ بلڈ سسٹم کے ساتھ آتا ہے، اس لیے مانوس ./configure شروع سے ہی موجود ہوتا ہے۔ git چیک آؤٹ میں نہیں، کیونکہ تیار شدہ فائلیں بلڈ کی مصنوعات ہیں، پروجیکٹ کی محفوظ چیزیں نہیں۔ ./autogen.sh آرکائیوز کے بجائے چیک آؤٹ کی ہدایات میں ظاہر ہونے کی پوری وجہ یہی ہے۔
./autogen.sh
./configure
make
make install
ہر سطر کوئی مخصوص کام کرتی ہے، اور یہ جاننا کہ کون سی ناکام ہوئی، بہت اندازے بچاتا ہے۔ autogen مرحلہ configure بنانے کے لیے autotools چلاتا ہے۔ configure مرحلہ کلائنٹ کے لیے ضروری کمپائلر، لائبریریوں اور ہیڈرز کی جانچ کرتا ہے، پھر جو ملا اسے ظاہر کرنے والی makefile لکھتا ہے۔ make مرحلہ کمپائل کرتا ہے۔ install مرحلہ نتائج کو آپ کے پاتھ میں کہیں کاپی کرتا ہے۔
اسی آخری سطر پر مشورہ عام طور پر غلط ہو جاتا ہے۔ انسٹالیشن اس بات کا ثبوت نہیں کہ بلڈ چلی، اور اسے کسی بھی ڈاؤن لوڈ فولڈر میں بلند اختیارات کے ساتھ چلانا ان فائلوں کو بکھیرنے کا اچھا طریقہ ہے جو بعد میں یاد نہیں رہیں گی۔ اگر کسی لائبریری کی عدم موجودگی میں configure ناکام ہو، تو مفید آؤٹ پٹ اس کی چھاپی گئی پہلی خرابی ہے، لاگ کی آخری بیس سطریں نہیں۔
سیشن اور نیٹ ورک ترتیب الگ الگ ہیں
یہ فرق طے کرتا ہے کہ کنکشن واقعی ٹریفک لے جاتا ہے یا نہیں۔ TLS سیشن قائم کرنا آپ کو کلائنٹ کی طرف انٹرفیس دیتا ہے۔ روٹس، پتوں اور DNS حل کنندگان کا اطلاق نیٹ ورک اسکرپٹ کے ذریعے کیا جانے والا دوسرا مرحلہ ہے، اور جس بلڈ نے اسکرپٹ کے بغیر بائنری بنائی، اس کے پاس آدھا کلائنٹ ہے۔
یہی علیحدگی بتاتی ہے کہ ایک جیسے کلائنٹ والی دو مشینیں مختلف کیوں برتاؤ کرتی ہیں: اسکرپٹ سسٹم کی نیٹ ورک ترتیب سے مشورہ لیتی ہے، اور اس ترتیب میں وہ سب کچھ شامل ہے جس نے کوئی روٹ دعوی کیا ہو۔ جب منقسم ٹنل ٹریفک کسی غیر متوقع جگہ بھیجتی ہے، تو ٹنل اپنا کام کر رہی ہوتی ہے اور جانچنے والی چیز روٹنگ کا فیصلہ ہے۔
اس لیے ڈیبگ کرتے وقت پوچھیں کہ کون سی تہہ ناکام ہوئی۔ جو سیشن کبھی قائم نہ ہو وہ پروٹوکول، سرٹیفکیٹ یا اسناد ہیں۔ جو سیشن قائم ہو اور کچھ نہ بھیجے وہ انٹرفیس اور اسکرپٹ ہے۔ جو انسٹال شدہ کلائنٹ ایک نیٹ ورک سے کام کرے اور دوسرے سے نہیں، وہ رسائی ہے، اور کتنی بھی دوبارہ بلڈنگ اسے نہیں بدلتی۔
جانیں کہ آپ کون سی بائنری چلا رہے ہیں
ہاتھ سے انسٹال شدہ بلڈ اور پیکیج شدہ بائنری سکون سے ساتھ رہ سکتی ہیں، اور کون چلے گی یہ آپ کے پاتھ پر منحصر ہے، آپ کے ارادوں پر نہیں۔ کسی کو ورژن نمبر بتانے سے پہلے یہ معلوم کریں۔
which -a openconnect
openconnect --version
brew list --versions openconnect
پہلی کمانڈ آپ کے شیل کو نظر آنے والی ہر کاپی کو اسی ترتیب میں درج کرتی ہے جس میں وہ انہیں آزماے گا۔ دوسری بتاتی ہے کہ کس نے جواب دیا۔ جب یہ آپ کی توقع سے میل نہ کھائے، تو آپ کسی پرانے تجربے کی بلڈ چلا رہے ہیں، اور کوئی ترتیب کی تبدیلی اسے نہیں ہلائے گی۔
کلائنٹ انسٹال کرنا گیٹ وے کی منظوری نہیں ہے
کام کرنے والی بائنری کسی تعیناتی کو ہم آہنگ نہیں بناتی۔ گیٹ وے کا پروٹوکول، اس کا تصدیقی بہاؤ اور زیرِ انتظام ڈیوائس کی کوئی بھی ضرورت اس کے مالکان کے ساتھ تصدیق کریں، کیونکہ یہ پالیسی اور ایپلیکیشن تہہ کے حقائق ہیں جو بلڈ فراہم نہیں کر سکتی۔
پروجیکٹ کی بلڈ ہدایات autotools کی ترتیب اور نیٹ ورک اسکرپٹ کی ضرورت کو زیادہ تفصیل سے بیان کرتی ہیں، اور آپ کے macOS ورژن سے پرانی بلاگ پوسٹ کے بجائے انہی کی پیروی کریں۔ اگر مقصد صرف جڑنا ہے، تو پیکیج لیں، اسکرپٹ رکھیں اور کمپائلر کو باہر رکھیں۔