Το systemctl λέει ότι το systemd δεν είναι PID 1: και τώρα;
Το μήνυμα για το PID 1 αφορά το περιβάλλον και όχι το OpenVPN. Ελέγξτε τι τρέχει ως PID 1, ενεργοποιήστε το systemd όπου υποστηρίζεται και μετά διαβάστε το πραγματικό σφάλμα.
Η εκτέλεση του systemctl start openvpn-client@office και η εμφάνιση μηνύματος ότι το σύστημα δεν εκκινήθηκε με systemd μοιάζει με αποτυχία υπηρεσίας. Δεν είναι καθόλου αποτυχία υπηρεσίας: το systemctl που καλέσατε δεν βρίσκει κάποιον διαχειριστή σε λειτουργία για να μιλήσει, οπότε τίποτα σχετικά με το OpenVPN δεν εξετάστηκε ποτέ. sudo δεν δημιουργεί διαχειριστή, και η εγκατάσταση ενός αρχείου unit δεν δημιουργεί επίσης. Η εντολή και το μηχάνημα προέρχονται από δύο διαφορετικούς κόσμους, και το σφάλμα είναι το μόνο σημείο όπου αυτό φάνηκε.
Ξεκινήστε ρωτώντας ποια διεργασία κατέχει το PID 1 εκεί όπου εκτελείται η εντολή, γιατί αυτή η απάντηση καθορίζει αν υπάρχουν καθόλου units.
Το σφάλμα ονομάζει το περιβάλλον, όχι το OpenVPN
systemctl είναι πελάτης, όχι διαχειριστής. Συνδέεται με τον διαχειριστή του συστήματος μέσω socket, και όταν δεν υπάρχει διαχειριστής στην άλλη άκρη εκτυπώνει το μήνυμα που επικολλούν οι άνθρωποι στα φόρουμ. ps -p 1 -o pid=,comm= δείχνει τι τρέχει πραγματικά ως PID 1, και η απάντηση είναι συχνά ένα shell, ένα περιτύλιγμα init ή το δικό του entrypoint του container. Σε αυτή την κατάσταση ένα αρχείο 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.
Τα container εκκινούν το entrypoint τους, όχι units
Ένα κανονικό container ξεκινά ό,τι ορίζει το entrypoint ή η εντολή του, και δεν είναι μηχάνημα που εκκίνησε με systemd, ανεξάρτητα από τα πακέτα που εγκαθιστάτε. Η προσθήκη του systemctl στην εικόνα σας δίνει έναν πελάτη χωρίς τίποτα για να συνδεθεί. Για το Community OpenVPN το υποστηριζόμενο μοτίβο είναι συνήθως μια διεργασία στο προσκήνιο, openvpn --config /path/to/client.conf, που ξεκινά από το entrypoint και επιτηρείται από έξω. Αυτός ο ιδιοκτήτης χειρίζεται την εκκίνηση, τα σήματα και το κλείσιμο, και θα πρέπει να είναι το μόνο πράγμα που διαχειρίζεται το τούνελ.
Μην εκκινείτε ποτέ ένα διαδραστικό αντίγραφο δίπλα σε ένα entrypoint που διαχειρίζεται ήδη αυτό το τούνελ, γιατί δύο διεργασίες θα μαλώσουν για τη συσκευή και τις διαδρομές. Μια ελάχιστη διεργασία init μέσα στο container μαζεύει τα παιδιά και προωθεί σήματα· δεν μετατρέπει την εικόνα σε host με units.
Αν κάποια ανάπτυξη χρειάζεται πραγματικά systemd μέσα σε container, χρειάζεται μια εικόνα σχεδιασμένη σκόπιμα γι’ αυτό, όχι πρόσθετα προνόμια που προστίθενται μέχρι το systemctl να σταματήσει να παραπονιέται.
Διαβάστε το επόμενο σφάλμα όταν υπάρχει ο διαχειριστής
Μόλις ένας πραγματικός διαχειριστής εκκινήσει την υπηρεσία, αρχίζουν τα χρήσιμα σφάλματα. Αποτυχία άδειας συσκευής, σφάλμα ανάλυσης ρυθμίσεων, απόντα διαπιστευτήρια και μη προσβάσιμος ομότιμος είναι τέσσερα διαφορετικά προβλήματα που το μήνυμα για το PID 1 δεν δοκίμασε ποτέ. Διαβάστε τα με τη σειρά που τα παρήγαγε το unit, χρησιμοποιώντας journalctl -u openvpn-client@office -n 50 σε host με systemd, ή εκτελώντας τον πελάτη στο προσκήνιο όπου δεν υπάρχει διαχειριστής. Η εκτέλεση στο προσκήνιο είναι επίσης ο γρηγορότερος τρόπος να επιβεβαιώσετε ότι το ίδιο το προφίλ λειτουργεί.
Κρατήστε τα δύο περιβάλλοντα χωριστά στις σημειώσεις σας: τον host που εκτελεί το τούνελ και το μέρος όπου πληκτρολογείτε εντολές.