systemctl spune că systemd nu este PID 1: și acum?
Mesajul despre PID 1 privește mediul, nu OpenVPN. Verificați ce rulează ca PID 1, activați systemd unde este acceptat și apoi citiți eroarea reală.
Când systemctl start openvpn-client@office este rulat și apare mesajul că sistemul nu a fost pornit cu systemd, pare o defecțiune a serviciului. Nu este deloc o defecțiune a serviciului: systemctl, pe care l-ați invocat, nu găsește niciun manager în execuție cu care să vorbească, așa că nimic despre OpenVPN nu a fost examinat. sudo nu creează un manager, iar instalarea unui fișier unit nici nu creează unul. Comanda și mașina vin din două lumi diferite, iar eroarea este singurul loc unde acest lucru a devenit vizibil.
Începeți prin a întreba ce proces deține PID 1 acolo unde rulează comanda, pentru că acest răspuns decide dacă unit-urile există măcar.
Eroarea numește mediul, nu OpenVPN
systemctl este un client, nu un manager. Se conectează la managerul de sistem printr-un socket, iar când nu există niciun manager la celălalt capăt, afișează mesajul pe care oamenii îl lipesc pe forumuri. ps -p 1 -o pid=,comm= arată ce rulează cu adevărat ca PID 1, iar răspunsul este adesea un shell, un înveliș init sau punctul de intrare al containerului însuși. Într-o astfel de situație, un fișier unit poate fi perfect valid și totuși niciodată citit. Repetarea comenzii ca root schimbă doar acreditările clientului.
Citiți întregul mesaj înainte de prima linie. O eroare de la managerul însuși, cum ar fi o unit lipsă sau o condiție eșuată, înseamnă că ați ajuns la unul; această eroare înseamnă că nu.
WSL: activarea systemd este o modificare de configurație
WSL a primit suport pentru systemd în versiuni mai recente, dar funcția se activează pentru fiecare distribuție în parte și doar acolo unde versiunea WSL instalată o acceptă. wsl --version pe partea Windows arată ce aveți, iar /etc/wsl.conf al distribuției conține [boot] o secțiune cu systemd=true. Editați acel fișier fără a elimina secțiunile deja existente, apoi reporniți instanța WSL pentru ca modificarea să intre în vigoare. wsl --shutdown oprește fiecare distribuție care rulează, așa că salvați mai întâi lucrul.
După ce îl deschideți din nou, confirmați managerul înainte de a atinge unit-ul OpenVPN: ps -p 1 -o comm= ar trebui să afișeze systemd. Activarea systemd nu oferă profil, acreditări sau nume de instanță, deci următoarea eroare va privi unul dintre acestea, nu PID 1.
Containerele își rulează punctul de intrare, nu unit-urile
Un container normal pornește ce specifică punctul său de intrare sau comanda, și nu este o mașină pornită cu systemd, indiferent ce pachete instalați. Adăugarea systemctl în imagine vă oferă un client fără nimic cu care să se conecteze. Pentru Community OpenVPN, modelul acceptat este de obicei un proces în prim-plan, openvpn --config /path/to/client.conf, pornit de punctul de intrare și supravegheat din exterior. Acel proprietar se ocupă de pornire, semnale și oprire, și ar trebui să fie singurul care administrează tunelul.
Nu lansați niciodată o copie interactivă lângă un punct de intrare care administrează deja acel tunel, pentru că două procese se vor certa pe dispozitiv și pe rute. Un proces init minimal din container adună copiii și retransmite semnale; nu transformă imaginea într-un host cu unit-uri.
Dacă o implementare are într-adevăr nevoie de systemd într-un container, are nevoie de o imagine proiectată intenționat pentru asta, nu de privilegii suplimentare adăugate până când systemctl nu se mai plânge.
Citiți următoarea eroare când managerul există
De îndată ce un manager real pornește serviciul, încep erorile utile. O eroare de permisiune a dispozitivului, o eroare de analiză a configurației, acreditări lipsă și un partener inaccesibil sunt patru probleme diferite pe care mesajul despre PID 1 nu le-a testat niciodată. Citiți-le în ordinea în care unit-ul le-a produs, folosind journalctl -u openvpn-client@office -n 50 pe un host systemd, sau rulând clientul în prim-plan acolo unde nu există niciun manager. Rularea în prim-plan este și cea mai rapidă cale de a confirma că profilul în sine funcționează.
Țineți cele două medii separate în notițele dumneavoastră: hostul care rulează tunelul și locul unde tastați comenzi.