يقول systemctl إن systemd ليس PID 1: فما العمل بعد ذلك؟
رسالة PID 1 تتعلق بالبيئة لا بـ OpenVPN. تحقق مما يعمل كـ PID 1، وفعّل systemd حيث يكون مدعومًا، ثم اقرأ الخطأ الحقيقي.
إن تشغيل systemctl start openvpn-client@office ثم ظهور رسالة تفيد بأن النظام لم يُقلع باستخدام systemd يبدو كفشل في الخدمة. وهو ليس فشلًا في الخدمة على الإطلاق: فـ systemctl الذي استدعيته لا يجد مديرًا يعمل ليتحدث إليه، لذلك لم يُفحص شيء يخص OpenVPN أصلًا. sudo لا ينشئ مديرًا، كما أن تثبيت ملف وحدة لا ينشئه هو الآخر. الأمر والجهاز يأتيان من عالمين مختلفين، والخطأ هو المكان الوحيد الذي ظهر فيه ذلك.
ابدأ بسؤال: أي عملية تملك PID 1 في المكان الذي يُنفَّذ فيه الأمر؟ لأن هذا الجواب يحدد ما إذا كانت الوحدات موجودة أصلًا.
الخطأ يسمّي البيئة لا OpenVPN
systemctl عميل وليس مديرًا. فهو يتصل بمدير النظام عبر مقبس، وعندما لا يوجد مدير في الطرف الآخر يطبع الرسالة التي يلصقها الناس في المنتديات. ps -p 1 -o pid=,comm= يُظهر ما يعمل فعلًا كـ PID 1، والجواب غالبًا صدفة أو غلاف init أو نقطة دخول الحاوية نفسها. في تلك الحالة قد يكون ملف الوحدة صالحًا تمامًا ومع ذلك لا يُقرأ أبدًا. وإعادة الأمر بصلاحيات الجذر لا تغيّر سوى بيانات اعتماد العميل.
اقرأ الرسالة كاملة قبل السطر الأول. خطأ من المدير نفسه، مثل وحدة مفقودة أو شرط فاشل، يعني أنك وصلت إليه؛ أما هذا الخطأ فيعني أنك لم تصل.
WSL: تفعيل systemd تغيير في الإعدادات
حصل WSL على دعم systemd في إصدارات أحدث، لكن الميزة تُفعَّل لكل توزيعة على حدة، ولا تعمل إلا حيث يدعمها إصدار WSL المثبَّت. wsl --version على جانب Windows يبيّن ما لديك، وملف /etc/wsl.conf الخاص بالتوزيعة يحمل قسم [boot] يحتوي على systemd=true. حرّر هذا الملف دون حذف الأقسام الموجودة فيه، ثم أعد تشغيل نسخة WSL ليصبح التغيير ساريًا. wsl --shutdown يوقف كل توزيعة تعمل، لذا احفظ عملك أولًا.
بعد إعادة الفتح، تحقق من المدير قبل أن تلمس وحدة OpenVPN: ps -p 1 -o comm= ينبغي أن يذكر systemd. وتشغيل systemd لا يوفّر أي ملف تعريف ولا أي بيانات اعتماد ولا أي اسم نسخة، لذا سيتعلق الخطأ التالي بأحد هذه الأمور لا بـ PID 1.
الحاويات تشغّل نقطة دخولها لا الوحدات
الحاوية العادية تبدأ ما تحدده نقطة الدخول أو الأمر، وهي ليست جهازًا يُقلع بـ systemd مهما ثبّتت من حزم. وإضافة systemctl إلى الصورة تمنحك عميلًا لا شيء ليتصل به. وبالنسبة إلى Community OpenVPN فالنمط المدعوم عادةً هو عملية في المقدمة، openvpn --config /path/to/client.conf، تبدأها نقطة الدخول ويُشرف عليها من الخارج. ذلك المسؤول يتولى البدء والإشارات والإيقاف، وينبغي أن يكون الشيء الوحيد الذي يدير النفق.
لا تشغّل نسخة تفاعلية إلى جانب نقطة دخول تدير ذلك النفق بالفعل، لأن عمليتين ستتقاتلان على الجهاز والمسارات. أما عملية init صغيرة داخل الحاوية فتحصد الأبناء وتُمرِّر الإشارات، لكنها لا تحوّل الصورة إلى مضيف فيه وحدات.
إن كان النشر يحتاج فعلًا إلى systemd داخل حاوية، فهو يحتاج صورة مصممة لذلك عن قصد، لا صلاحيات إضافية تُضاف حتى systemctl يتوقف عن الشكوى.
اقرأ الخطأ التالي بعد أن يوجد المدير
بمجرد أن يطلق مدير حقيقي الخدمة، تبدأ الأخطاء المفيدة. فشل إذن الجهاز، وخطأ تحليل الإعدادات، وبيانات اعتماد مفقودة، ونظير لا يمكن الوصول إليه، كلها أربع مشكلات مختلفة لم تختبرها رسالة PID 1 قط. اقرأها بالترتيب الذي أنتجها به ملف الوحدة، باستخدام journalctl -u openvpn-client@office -n 50 على مضيف systemd، أو بتشغيل العميل في المقدمة حيث لا يوجد مدير. والتشغيل في المقدمة هو أيضًا أسرع طريقة للتأكد من أن ملف التعريف نفسه يعمل.
افصل البيئتين في ملاحظاتك: المضيف الذي يشغّل النفق، والمكان الذي تكتب فيه الأوامر.