ثلاثة مسارات تمنحك عميل OpenConnect على جهاز Mac، وكل منها يترك أشياء مختلفة على القرص. تصبّ صيغة Homebrew ملفاً تنفيذياً مترجماً إضافة إلى برنامج الشبكة النصي الذي يضبط المسارات وDNS. ويمنحك أرشيف الإصدار شيفرة مصدرية مع نظام بناء مُولَّد. أما نسخة git المستنسخة فتمنحك شيفرة مصدرية بلا نظام بناء. واختيار المسار الخاطئ هو سبب مصادفة configure المفقود بعد دقائق من بدء أي درس تعليمي.

جهازان مختلفان تحت الاسم نفسه

مسار الحزمة أمر واحد، وهو الخيار الافتراضي الصحيح لكل من تكون مهمته الاتصال لا التطوير.

brew install openconnect

ما يثبّته ذلك أهم من الأمر نفسه. تحصل على الملف التنفيذي للعميل، وتحصل أيضاً على vpnc-script الذي يستدعيه العميل لبرمجة الواجهة والمسارات والمُحلِّل. ويعمل الاثنان كزوج: يُنهي الملف التنفيذي جلسة TLS ويسلّم الواجهة الناتجة إلى البرنامج النصي، وهو الجزء الذي يعرف كيف يريد هذا النظام تشغيل شبكته.

يفسّر هذا الانفصال فئة كاملة من التقارير المربكة. فالعميل الذي يتصل ويعلن النجاح ثم يوجّه حركة المرور في المسار الخطأ تكون مشكلته عادةً في البرنامج النصي لا في النفق، وإعادة تثبيت الصيغة تصلحه فقط لأن البرنامج النصي يُعاد تثبيته أيضاً. تحقّق من دعم الصيغة الحالي لنسخة macOS ومعمارية المعالج قبل أن تخطط على أساسها؛ فالجهاز الذي يشغّل الصدفة بشكل ممتاز قد لا توجد له حزمة حديثة مبنية.

ما يفعله مسار المصدر فعلاً

يأتي أرشيف الإصدار مع نظام بناء مُولَّد، لذا يكون ./configure المألوف موجوداً من البداية. أما نسخة git فلا، لأن الملفات المُولَّدة هي نواتج بناء لا أشياء يخزّنها المشروع. وهذا هو السبب الكامل لظهور ./autogen.sh في تعليمات النسخ المستنسخة لا في أرشيفات الإصدار.

./autogen.sh
./configure
make
make install

كل سطر يفعل شيئاً محدداً، ومعرفة أي سطر فشل توفّر الكثير من التخمين. تشغّل خطوة autogen أدوات autotools لإنتاج configure. وتفحص خطوة configure المترجم والمكتبات والترويسات التي يحتاجها العميل، ثم تكتب ملفات make التي تعكس ما وجدته. وتجمّع خطوة make. وتنسخ خطوة install النتائج إلى مكان ما في مسارك.

في ذلك السطر الأخير تنحرف النصيحة عادةً. فالتثبيت ليس دليلاً على نجاح البناء، وتشغيله في مجلد تنزيل عشوائي بصلاحيات مرتفعة طريقة جيدة لنثر ملفات لن تتذكرها لاحقاً. وإذا فشل configure بسبب مكتبة مفقودة، فالخرج المفيد هو أول خطأ طبعه، لا آخر عشرين سطراً من السجل.

الجلسة وإعداد الشبكة منفصلان

هذا التمييز يحدد ما إذا كان الاتصال يحمل حركة المرور فعلاً. إنشاء جلسة TLS يمنحك واجهة على جانب العميل. وتطبيق المسارات والعناوين ومحلّلات DNS خطوة ثانية تُنفّذ عبر برنامج الشبكة النصي، والبناء الذي أنتج ملفاً تنفيذياً بلا ذلك البرنامج يملك نصف عميل.

يفسّر هذا الفصل نفسه لماذا تتصرف جهتان لهما عميلان متطابقان تصرفاً مختلفاً: فالبرنامج النصي يستشير إعداد الشبكة في النظام، وذلك الإعداد يشمل كل ما ادّعى مساراً. وعندما يوجّه نفق منقسم حركة المرور إلى مكان غير متوقع، يكون النفق يؤدي عمله ويكون قرار التوجيه هو ما يجب فحصه.

لذلك عندما تُجري تصحيحاً، اسأل أي طبقة فشلت. الجلسة التي لا تُنشأ أبداً هي بروتوكول أو شهادة أو بيانات اعتماد. والجلسة التي تُنشأ ولا تمرّر شيئاً هي الواجهة والبرنامج النصي. والعميل المثبّت الذي يعمل من شبكة ولا يعمل من أخرى هو قابلية الوصول، وهذه لا يغيّرها أي قدر من إعادة البناء.

اعرف أي ملف تنفيذي تشغّل

يمكن لبناء مثبّت يدوياً وملف تنفيذي معبّأ أن يتعايشا بسلام، والذي يعمل منهما يعتمد على مسارك لا على نواياك. اكتشف ذلك قبل أن تبلغ أي شخص برقم إصدار.

which -a openconnect
openconnect --version
brew list --versions openconnect

يسرد الأمر الأول كل نسخة يستطيع صدفك رؤيتها، بالترتيب الذي سيجرّبها به. ويخبرك الثاني أيها استجاب. وعندما يخالف ذلك ما تتوقعه، فأنت تشغّل بناءً من تجربة قديمة، ولن يحرّكه أي تغيير في الإعداد.

تثبيت عميل ليس موافقة على البوابة

لا يجعل الملف التنفيذي العامل عملية نشر متوافقة. تأكّد من بروتوكول البوابة وتدفّق المصادقة وأي متطلب لجهاز مُدار مع الأشخاص الذين يملكونها، لأنها حقائق تتعلق بالسياسة وطبقة التطبيق لا يستطيع البناء توفيرها.

تغطي تعليمات البناء الخاصة بالمشروع تسلسل autotools ومتطلب برنامج الشبكة النصي بمزيد من التفصيل، وهي المرجع الذي ينبغي اتباعه لا مقالة مدونة أقدم من إصدار macOS لديك. وإذا كان الهدف هو الاتصال فقط، فخُذ الحزمة واحتفظ بالبرنامج النصي واترك المترجم خارج الأمر.

مقالات ذات صلة