Menjalankan systemctl start openvpn-client@office lalu mendapat pesan bahwa sistem tidak di-boot dengan systemd terasa seperti kegagalan layanan. Ini sama sekali bukan kegagalan layanan: systemctl yang Anda panggil tidak menemukan manajer yang berjalan untuk diajak bicara, jadi tidak ada yang diperiksa soal OpenVPN. sudo tidak membuat manajer, dan memasang berkas unit juga tidak membuatnya. Perintah dan mesinnya berasal dari dua dunia berbeda, dan galat itu satu-satunya tempat hal itu terlihat.

Mulailah dengan bertanya proses mana yang memiliki PID 1 di tempat perintah dijalankan, karena jawaban itu menentukan apakah unit ada sama sekali.

Galat itu menyebut lingkungan, bukan OpenVPN

systemctl adalah klien, bukan manajer. Ia terhubung ke manajer sistem lewat soket, dan bila tidak ada manajer di ujung lain, ia mencetak pesan yang orang tempel di forum. ps -p 1 -o pid=,comm= memperlihatkan apa yang sebenarnya berjalan sebagai PID 1, dan jawabannya sering berupa shell, pembungkus init, atau titik masuk kontainer itu sendiri. Dalam situasi seperti itu berkas unit bisa sepenuhnya sah dan tetap tidak pernah dibaca. Mengulang perintah sebagai root hanya mengubah kredensial klien.

Baca seluruh pesan sebelum baris pertama. Galat dari manajer itu sendiri, seperti unit yang hilang atau kondisi yang gagal, berarti Anda mencapainya; galat ini berarti Anda tidak.

WSL: mengaktifkan systemd adalah perubahan konfigurasi

WSL mendapat dukungan systemd pada rilis yang lebih baru, tetapi fitur ini diaktifkan per distribusi dan hanya di tempat versi WSL yang terpasang mendukungnya. wsl --version di sisi Windows menunjukkan apa yang Anda miliki, dan /etc/wsl.conf distribusi memuat [boot] bagian dengan systemd=true. Sunting berkas itu tanpa menghapus bagian yang sudah ada, lalu mulai ulang instans WSL agar perubahan berlaku. wsl --shutdown menghentikan setiap distribusi yang berjalan, jadi simpan pekerjaan Anda dulu.

Setelah membukanya lagi, pastikan manajernya sebelum menyentuh unit OpenVPN: ps -p 1 -o comm= seharusnya menampilkan systemd. Mengaktifkan systemd tidak memberi profil, kredensial, atau nama instans, jadi galat berikutnya akan menyangkut salah satunya, bukan PID 1.

Kontainer menjalankan titik masuknya, bukan unit

Kontainer normal menjalankan apa yang ditentukan titik masuk atau perintahnya, dan ia bukan mesin yang di-boot dengan systemd, apa pun paket yang Anda pasang. Menambahkan systemctl ke image memberi Anda klien tanpa apa pun untuk dihubungi. Untuk Community OpenVPN, pola yang didukung biasanya proses di latar depan, openvpn --config /path/to/client.conf, dijalankan oleh titik masuk dan diawasi dari luar. Pemilik itu menangani penyalaan, sinyal, dan pematian, dan hanya itulah yang seharusnya mengelola terowongan.

Jangan pernah menjalankan salinan interaktif di samping titik masuk yang sudah mengelola terowongan itu, karena dua proses akan berebut perangkat dan rute. Proses init minimal di dalam kontainer memungut anak dan meneruskan sinyal; itu tidak mengubah image menjadi host dengan unit.

Bila suatu penerapan benar-benar membutuhkan systemd di dalam kontainer, diperlukan image yang dirancang khusus untuk itu, bukan hak istimewa tambahan yang ditambahkan sampai systemctl berhenti mengeluh.

Baca galat berikutnya setelah manajernya ada

Begitu manajer sungguhan menjalankan layanan, galat yang berguna mulai muncul. Kegagalan izin perangkat, galat penguraian konfigurasi, kredensial yang hilang, dan rekan yang tidak terjangkau adalah empat masalah berbeda yang tidak pernah diuji oleh pesan PID 1. Bacalah sesuai urutan unit menghasilkannya, dengan journalctl -u openvpn-client@office -n 50 pada host systemd, atau dengan menjalankan klien di latar depan di tempat tidak ada manajer. Menjalankan di latar depan juga cara tercepat memastikan profilnya sendiri bekerja.

Pisahkan kedua lingkungan itu dalam catatan Anda: host yang menjalankan terowongan, dan tempat Anda mengetik perintah.

Artikel terkait