تفحص النفق، وتشغّل systemctl status openvpn، فتحصل على active (exited) بلا Main PID ومع قائمة عمليات فارغة. القراءة الطبيعية أن الخدمة بدأت ثم ماتت، فتفتح الوحدة وتجد /bin/true وتستنتج أن الحزمة معطوبة. في حزمة Debian هذه الحالة هي الغلاف يعمل كما صُمّم، والنفق يعيش في إحدى وحدات النسخ التي يبدأها. الوحدة المجمّعة لن تخبرك أبدًا أي نسخة بنته.

ما الذي يعنيه active (exited) فعلًا في هذه الوحدة

الوحدة المحزّمة مهمة لمرة واحدة: أمر ExecStart فيها هو /bin/true، وRemainAfterExit=yes هو ما يُبقي وحدة منتهية معروضة كـ active (exited). أزل هذا التوجيه وستنتهي المهمة الناجحة نفسها بحالة inactive (dead)، وهي بالضبط الحالة التي يتوقعها الناس ويقرؤونها خطأً في الاتجاه المعاكس. الأمر مجرد عنصر نائب، والوحدة تبلّغ عن عمل تؤديه وحدات أخرى. لا شيء في هذا الترتيب معطوب، واستبدال /bin/true يغيّر عقد الحزمة لا النفق.

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

اقرأ الأسطر الثلاثة من مخرجات الحالة بدلًا من الكلمة بين القوسين. يسمّي Loaded ملف الوحدة الذي قرأه systemd، ويحمل Active طابع وقت آخر تشغيل ناجح، ويوافق غياب Main PID مهمة لمرة واحدة انتهت. هذه الأسطر الثلاثة هي أيضًا طريقة تمييز هذا الغلاف عن خدمة انهارت بعد ثانية من بدئها.

اسرد الوحدات قبل أن تقرأ الحالة مرة أخرى

اسأل systemd عمّا هو موجود قبل أن تسأل عمّا هو قيد التشغيل. يمكن تثبيت قالب بينما لا توجد نسخة مُنشأة، والوحدة المُنشأة وحدها تحمل نفقًا. ابدأ بالمجموعة المحمّلة:

systemctl list-units 'openvpn*'

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

systemctl list-unit-files 'openvpn*'

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

طابِق جهازك لا الدرس الذي وجدته. قد يكون اسم النسخة في مخرجات شخص آخر office بينما اسمك home أو work. ما ينتقل هو الطريقة، لا السلسلة.

اتبع اسم النسخة إلى الملف الذي تقرأه

في قالب العميل الأصلي يكون دليل عمل الوحدة /etc/openvpn/client ويأخذ أمرها %i.conf منه، لذا يقرأ openvpn-client@office الملف /etc/openvpn/client/office.conf. تحقق من ذلك التعيين في الوحدة المثبّتة بدلًا من الوثوق بالمثال، لأن القالب الذي لديك قد يكون أقدم أو إعادة كتابة من التوزيعة:

systemctl cat [email protected]

اقرأ الإضافات التي تظهر أسفل ذلك المخرج، لأن ملفًا تحت .d/ يمكن أن يغيّر ExecStart أو دليل العمل أو مسار التهيئة. الملف الشخصي الذي نزّلته باسم office.ovpn ليس الملف الذي تفتحه النسخة. تلك الفجوة هي السبب المعتاد في أن يسمّي خطأ مسارًا لم تحرره قط.

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

ابدأها، ثم اقرأ سجل تلك النسخة

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

sudo systemctl start [email protected]
journalctl -u [email protected] -b

البدء والتفعيل قراران منفصلان: start يشغّل الوحدة الآن، وenable يرتب الإقلاع التالي، وenable --now يفعل الاثنين في خطوة واحدة. يعيد daemon-reload قراءة تعريفات الوحدات ولا يعيد تشغيل عملية جارية ولا يطبّق ملفًا شخصيًا محررًا. بعد تغيير الملف الشخصي أعد تشغيل النسخة، لأن ذلك هو ما يعيد قراءة الملف.

لا تضع مديرًا ثانيًا على النفق نفسه

يملك NetworkManager ومديرو جلسات OpenVPN 3 حالة اتصالهم الخاصة، ووضع نسخة systemd بجانب أحدهم يضع مالكين على النفق نفسه. العرَض نفق يظهر ثم يُستبدل بعد ثوان، أو نفق يرفض البقاء متوقفًا. اختر المدير الذي توثّقه توزيعتك لسطح المكتب، واستخدم systemd عمدًا على خادم.

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

أجب عن السؤال الأصلي باسم النسخة، والملف الذي قرأته، وسطر السجل الذي فشل. ملاحظات تكامل systemd في OpenVPN تشرح تخطيط القالب وتعيين الملف الذي يُحلّ عبره اسم النسخة.

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