Layanan Anda gagal sebelum OpenVPN sempat berjalan, dan galatnya membicarakan unit mount yang tidak pernah Anda konfigurasi. Itulah petunjuknya: systemd menolak seluruh transaksi karena unit mount akar ter-mask, dan profil VPN Anda belum dibaca. Penyebab biasanya berkas sisa di direktori unit runtime, bukan fstab yang rusak dan bukan sertifikat yang hilang. Telusuri berkasnya lebih dulu, karena itulah penjelasan termurah untuk disingkirkan.

Galat menyebut mount akar, bukan profil Anda

systemd menghasilkan unit mount akar sendiri dari informasi mount kernel, dan menamai unit itu -.mount karena tanda hubung mewakili jalur akar. Unit itu biasanya hanya ada di memori dan tidak punya berkas di belakangnya. Ketika galat mengatakan unit itu ter-mask, seseorang telah menaruh berkas unit di tempat systemd akan memuatnya dan mengarahkan berkas itu ke /dev/null. Mask adalah keadaan nyata, bukan salah ketik dalam pesan.

Unit instans gagal karena graf tugasnya mencapai mount akar melalui pengurutan dan melalui persyaratan mount-nya sendiri. Transaksi ditolak sebelum biner OpenVPN dijalankan, jadi tidak ada apa pun dalam konfigurasi klien yang bisa menjadi penyebabnya. Itu sebabnya mengganti profil, sertifikat, atau kredensial tidak berpengaruh pada kegagalan khusus ini.

Periksa direktori runtime sebelum Anda men-debug OpenVPN

Cari berkas dengan nama persis itu di direktori unit runtime, lalu tanyakan kepada systemd apa menurutnya unit itu. Kedua jawaban cepat, dan bersama-sama keduanya memisahkan berkas sisa dari masalah mount yang sebenarnya.

ls -l /run/systemd/system/-.mount
systemctl status -.mount
systemctl list-unit-files --state=masked | grep mount

Mesin normal tidak punya berkas seperti itu, dan daftar yang ter-mask tidak memuat mount akar. Jika perintah pertama mencetak symlink ke /dev/null, diagnosisnya sudah pasti. Direktori yang sama bisa berisi mask tmp.mount yang dibuat oleh perkakas yang sama, dan itu menghasilkan kelas kegagalan yang sama dengan nama berbeda. Lihat seluruh direktori, bukan hanya nama dalam galat.

ls -la /run/systemd/system/*.mount

Jika direktorinya bersih dan unitnya tetap ter-mask, mask-nya berada di tempat lain dalam jalur pencarian, dan systemctl cat -.mount akan menunjukkan berkas mana yang dimuat.

Hapus berkasnya, muat ulang, lalu mulai lagi

Menghapus berkas runtime dan memuat ulang manajer sudah cukup, dan itu tidak menyentuh apa pun yang berasal dari paket. Muat ulang sebelum memulai, karena systemd menyimpan keadaan unit yang dimuat sampai ia membaca ulang direktorinya.

sudo rm -f /run/systemd/system/-.mount /run/systemd/system/tmp.mount
sudo systemctl daemon-reload
systemctl status -.mount
sudo systemctl start [email protected]

Lalu baca jurnal layanannya sendiri alih-alih menganggap perbaikannya berhasil. Mulai dengan bersih hanya membuktikan bahwa systemd menerima unitnya; klien masih bisa mati karena profil yang hilang, peer yang tak terjangkau, atau sertifikat yang tidak tervalidasi. Itu masalah OpenVPN biasa yang tadinya tersembunyi di balik unit yang ter-mask. Jurnal mencatat profil mana yang dimuat dan apakah terowongannya benar-benar terbentuk. Jika unit mulai tetapi terowongannya tidak, Anda sudah pindah ke masalah lain, dan itu kemajuan.

journalctl -u [email protected] -b --no-pager

Karena /run adalah sistem berkas sementara, reboot juga membersihkan berkas itu. Itu membuat reboot menjadi uji yang berguna: jika layanan bekerja setelah reboot dan gagal lagi setelah penerapan berikutnya, berkas itu dipanggang ke dalam image.

Cegah berkas itu kembali dari image

Templat kontainer atau mesin virtual yang me-mask unit mount saat pembuatannya akan membawa mask itu ke setiap klon. Apa pun yang berikutnya membutuhkan sistem berkas akan rusak, dan pesannya menyalahkan mount, bukan image asalnya. Memperbaikinya di dalam satu instans yang sedang berjalan menyembunyikan masalah sampai instans berikutnya dibuat.

Telusuri konteks build untuk nama berkas dan perintah yang membuatnya, lalu hapus mask dari templat dan build ulang. Jika mask benar-benar dibutuhkan selama build, hapus di lapisan yang sama yang menyelesaikan build, agar image yang dikirim mulai bersih. Verifikasi pada klon baru, bukan pada mesin yang Anda perbaiki dengan tangan. Itu satu-satunya uji yang membuktikan image-nya berubah.

Gejala yang perlu diingat adalah ketidakcocokan antara galat dan hal yang sedang Anda konfigurasi. Ketika systemd mengeluh soal mount sementara Anda menyalakan klien VPN, bacalah nama unit dalam pesan sebelum membaca nama layanan.

Artikel terkait