הרצת systemctl start openvpn-client@office וקבלת הודעה שהמערכת לא אתחלה עם systemd נראית כמו כשל שירות. זה בכלל לא כשל שירות: systemctl שהפעלתם לא מוצא מנהל פעיל לדבר איתו, ולכן שום דבר שקשור ל-OpenVPN לא נבדק. sudo לא יוצר מנהל, וגם התקנת קובץ unit לא יוצרת אחד. הפקודה והמכונה מגיעות משני עולמות שונים, והשגיאה היא המקום היחיד שבו זה נראה.

התחילו בשאלה איזה תהליך מחזיק ב-PID 1 במקום שבו הפקודה רצה, כי התשובה הזו קובעת אם קיימים unit-ים בכלל.

השגיאה נוקבת בשם הסביבה, לא ב-OpenVPN

systemctl הוא לקוח, לא מנהל. הוא מתחבר למנהל המערכת דרך socket, וכשאין מנהל בצד השני הוא מדפיס את ההודעה שאנשים מדביקים בפורומים. ps -p 1 -o pid=,comm= מראה מה באמת רץ כ-PID 1, והתשובה היא לעיתים קרובות shell, עטיפת init או נקודת הכניסה של הקונטיינר עצמו. במצב כזה קובץ unit יכול להיות תקף לחלוטין ובכל זאת לא להיקרא לעולם. חזרה על הפקודה כ-root משנה רק את פרטי ההתחברות של הלקוח.

קראו את ההודעה כולה לפני השורה הראשונה. שגיאה מהמנהל עצמו, כמו unit חסר או תנאי שנכשל, פירושה שהגעתם לאחד; השגיאה הזו פירושה שלא הגעתם.

WSL: הפעלת systemd היא שינוי תצורה

WSL קיבל תמיכה ב-systemd בגרסאות מאוחרות יותר, אך התכונה מופעלת לכל הפצה בנפרד ורק במקום שבו גרסת WSL המותקנת תומכת בה. wsl --version בצד Windows מראה מה יש לכם, וקובץ /etc/wsl.conf של ההפצה מכיל [boot] מקטע עם systemd=true. ערכו את הקובץ בלי למחוק את המקטעים שכבר קיימים, ואז הפעילו מחדש את מופע WSL כדי שהשינוי ייכנס לתוקף. wsl --shutdown עוצר כל הפצה שרצה, אז שמרו את העבודה קודם.

לאחר הפתיחה מחדש, ודאו את המנהל לפני שנוגעים ב-unit של OpenVPN: ps -p 1 -o comm= אמור להראות systemd. הפעלת systemd לא מספקת פרופיל, פרטי התחברות או שם מופע, ולכן השגיאה הבאה תעסוק באחד מאלה ולא ב-PID 1.

קונטיינרים מריצים את נקודת הכניסה שלהם, לא unit-ים

קונטיינר רגיל מפעיל את מה שנקודת הכניסה או הפקודה שלו מגדירות, והוא אינו מכונה שהופעלה עם systemd, לא משנה אילו חבילות תתקינו. הוספת systemctl לתמונה נותנת לכם לקוח שאין לו למה להתחבר. ב-Community OpenVPN התבנית הנתמכת היא בדרך כלל תהליך בחזית, openvpn --config /path/to/client.conf, שמופעל על ידי נקודת הכניסה ומפוקח מבחוץ. הבעלים הזה מטפל בהפעלה, באותות ובכיבוי, והוא אמור להיות הדבר היחיד שמנהל את המנהרה.

לעולם אל תפעילו עותק אינטראקטיבי לצד נקודת כניסה שכבר מנהלת את המנהרה הזו, כי שני תהליכים ייאבקו על ההתקן ועל המסלולים. תהליך init מינימלי בתוך הקונטיינר אוסף ילדים ומעביר אותות; הוא לא הופך את התמונה למארח עם unit-ים.

אם פריסה באמת זקוקה ל-systemd בתוך קונטיינר, היא זקוקה לתמונה שתוכננה בכוונה לכך, לא להרשאות נוספות שמתווספות עד ש-systemctl יפסיק להתלונן.

קראו את השגיאה הבאה כשהמנהל קיים

ברגע שמנהל אמיתי מפעיל את השירות, השגיאות השימושיות מתחילות. כשל בהרשאת התקן, שגיאת ניתוח תצורה, פרטי התחברות חסרים ועמית שאינו נגיש — אלה ארבע בעיות שונות שהודעת PID 1 מעולם לא בדקה. קראו אותן לפי הסדר שבו ה-unit יצר אותן, באמצעות journalctl -u openvpn-client@office -n 50 במארח systemd, או בהרצת הלקוח בחזית במקום שבו אין מנהל. הרצה בחזית היא גם הדרך המהירה ביותר לאשר שהפרופיל עצמו עובד.

שמרו את שתי הסביבות בנפרד בהערות שלכם: המארח שמריץ את המנהרה, והמקום שבו אתם מקלידים פקודות.

מאמרים קשורים