systemctl, systemd'nin PID 1 olmadığını söylüyor: peki şimdi?
PID 1 mesajı OpenVPN'le değil, ortamla ilgilidir. PID 1 olarak neyin çalıştığını kontrol edin, systemd'yi desteklendiği yerde açın ve ardından gerçek hatayı okuyun.
Eğer systemctl start openvpn-client@office çalıştırıp sistemin systemd ile önyüklenmediğine dair bir mesaj alırsanız, bu bir hizmet arızası gibi görünür. Oysa bu hiç de hizmet arızası değildir: çağırdığınız systemctl, konuşacak çalışan bir yönetici bulamaz, dolayısıyla OpenVPN ile ilgili hiçbir şey incelenmemiştir. sudo bir yönetici oluşturmaz; bir unit dosyası kurmak da oluşturmaz. Komut ile makine iki farklı dünyadan gelir ve bunun ortaya çıktığı tek yer hatadır.
Önce komutun çalıştığı yerde PID 1'i hangi sürecin sahiplendiğini sorun, çünkü bu yanıt unit dosyalarının var olup olmadığını belirler.
Hata OpenVPN'i değil, ortamı adlandırır
systemctl bir istemcidir, yönetici değildir. Sistem yöneticisine bir soket üzerinden bağlanır ve karşı tarafta yönetici yoksa insanların forumlara yapıştırdığı mesajı yazdırır. ps -p 1 -o pid=,comm= gerçekte PID 1 olarak neyin çalıştığını gösterir ve yanıt çoğu zaman bir kabuk, bir init sarmalayıcısı ya da konteynerin kendi giriş noktasıdır. Böyle bir durumda unit dosyası tamamen geçerli olabilir ve yine de hiç okunmayabilir. Komutu root olarak yinelemek yalnızca istemcinin kimlik bilgilerini değiştirir.
İlk satırdan önce mesajın tamamını okuyun. Yöneticinin kendisinden gelen bir hata, örneğin eksik bir unit ya da başarısız bir koşul, ona ulaştığınız anlamına gelir; bu hata ise ulaşmadığınız anlamına gelir.
WSL: systemd'yi açmak bir yapılandırma değişikliğidir
WSL, sonraki sürümlerde systemd desteği kazandı, ancak bu özellik her dağıtım için ayrı ayrı açılır ve yalnızca kurulu WSL sürümünün desteklediği yerlerde çalışır. wsl --version Windows tarafında neye sahip olduğunuzu gösterir ve dağıtımın /etc/wsl.conf dosyası [boot] bölümü içerir, içinde de systemd=true bulunur. Bu dosyayı zaten var olan bölümleri kaldırmadan düzenleyin, ardından değişikliğin geçerli olması için WSL örneğini yeniden başlatın. wsl --shutdown çalışan her dağıtımı durdurur, bu yüzden önce çalışmanızı kaydedin.
Yeniden açtıktan sonra, OpenVPN unit dosyasına dokunmadan önce yöneticiyi doğrulayın: ps -p 1 -o comm= göstermelidir systemd. systemd'yi açmak profil, kimlik bilgisi ya da örnek adı sağlamaz, bu yüzden sonraki hata PID 1 ile değil bunlardan biriyle ilgili olacaktır.
Konteynerler unit dosyalarını değil, giriş noktalarını çalıştırır
Normal bir konteyner, giriş noktasının ya da komutunun belirlediğini başlatır ve hangi paketleri kurarsanız kurun systemd ile önyüklenmiş bir makine değildir. İmaja systemctl eklemek size bağlanacak hiçbir şeyi olmayan bir istemci verir. Community OpenVPN için desteklenen düzen genellikle ön planda çalışan bir süreçtir, openvpn --config /path/to/client.conf, giriş noktası tarafından başlatılır ve dışarıdan denetlenir. O sahip başlatmayı, sinyalleri ve kapatmayı yönetir ve tüneli yöneten tek şey o olmalıdır.
O tüneli zaten yöneten bir giriş noktasının yanında asla etkileşimli bir kopya başlatmayın, çünkü iki süreç aygıt ve rotalar için kavga eder. Konteyner içindeki asgari bir init süreci alt süreçleri toplar ve sinyalleri iletir; imajı unit dosyaları olan bir ana makineye çevirmez.
Bir dağıtım gerçekten konteyner içinde systemd'ye ihtiyaç duyuyorsa, bunun için bilinçli olarak tasarlanmış bir imaja ihtiyaç duyar, systemctl şikâyet etmeyi bırakana kadar eklenen ek ayrıcalıklara değil.
Yönetici varken sonraki hatayı okuyun
Gerçek bir yönetici hizmeti başlattığında yararlı hatalar başlar. Aygıt izni hatası, yapılandırma ayrıştırma hatası, eksik kimlik bilgisi ve ulaşılamayan eş, PID 1 mesajının hiç test etmediği dört ayrı sorundur. Bunları unit dosyasının ürettiği sırayla okuyun; journalctl -u openvpn-client@office -n 50 ile bir systemd ana makinesinde ya da yöneticinin olmadığı yerde istemciyi ön planda çalıştırarak okuyun. Ön planda çalıştırmak, profilin kendisinin çalıştığını doğrulamanın en hızlı yolu da.
İki ortamı notlarınızda ayrı tutun: tüneli çalıştıran ana makine ve komutları yazdığınız yer.