Servis pada, u logovima se spominju spawn i direktorij, a prvi instinkt je provjeriti VPN konfiguraciju. Ništa u toj datoteci još nije pročitano. systemd je pao dok je pripremao proces, prije nego što se izvršna datoteka pokrenula, pa nijedan parser, nijedan certifikat i nijedan udaljeni host nisu bili konsultovani. Čitanje statusnog koda kao izjave o systemd-u, a ne o OpenVPN-u, pretvara ovo u kratku istragu.

Pročitajte statusni kod prije aplikacije

Numerički kod nakon naziva servisa imenuje fazu koja je pala. Greška direktorija prijavljuje se kao CHDIR status, dok je izvršna datoteka koja se nije mogla pokrenuti potpuno drugi kod. Ta dva u sažetku izgledaju slično i nemaju ništa zajedničko u uzrocima.

Ta razlika je važna jer su popravke u različitim datotekama. CHDIR greška se odnosi na putanju i na to kako je servis vidi. Exec greška se odnosi na binarnu datoteku, njen interpreter ili nepovezani mount. Promjena VPN udaljene tačke, liste šifri ili putanje certifikata ne može riješiti nijednu od njih.

Potvrdite da je greška na startu, a ne nakon uspješnog rada. Ako je servis jučer radio, a sada pada u istoj fazi, nešto se promijenilo u vezi s direktorijem, njegovim dozvolama ili samim unitom, i ta promjena je dokaz koji treba tražiti.

Pitajte unit gdje želi biti

Čitajte efektivni unit, a ne datoteku za koju mislite da je instalirana, jer drop-in fajlovi mogu nadjačati radni direktorij, a da nikada ne uredite glavni unit. Show izlaz direktno odgovara na pitanje:

systemctl cat [email protected]
systemctl show [email protected] -p WorkingDirectory -p RootDirectory -p User -p ProtectHome
journalctl -u [email protected] -b --no-pager | tail -30

Za šablon upstream servera, radni direktorij je direktorij konfiguracije servera, a naziv instance bira profil unutar njega. Instanca zvana branch zato očekuje svoju datoteku u tom istom direktoriju, a profil postavljen negdje drugdje uopšte ne zadovoljava zahtjev radnog direktorija.

Uporedite šta unit traži sa onim što postoji. Putanja koja je nekada postojala, simlink koji sada pokazuje negdje drugdje ili naziv instance koji više ne odgovara direktoriju jesu obične promjene koje proizvode upravo ovu grešku.

Provjerite putanju kako je vidi servis

Vaš shell i servis ne dijele isti pogled na datotečni sistem. Konfigurisani korijenski direktorij ili root image mijenja šta apsolutna putanja znači unutar unita, a putanja koja je očigledno prisutna na hostu može biti odsutna u tom namespace-u. Pročitajte postavke unita prije nego povjerujete ručnom testu.

Dozvole pogoršavaju problem. Servis radi kao određeni korisnik, a taj korisnik mora moći proći kroz svaki nadređeni direktorij da bi stigao do cilja, a ne samo čitati sam cilj. Direktorij čitljiv za root, a neprohodan za korisnika servisa, proizvodi grešku koja izgleda kao da putanja nedostaje.

namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths

Postavke očvršćivanja su također dio ove slike. Unit koji skriva kućne direktorije ili dio datotečnog sistema čini samo za čitanje radi upravo ono za šta je konfigurisan, a radni direktorij mora živjeti negdje gdje ga sandbox još izlaže.

Popravite vlasnika, pa očekujte drugu grešku

Ispravite raspored ili unit preko onoga ko posjeduje tu konfiguraciju. Premještanje profila u očekivani direktorij je legitimna popravka kada je raspored pogrešan, ali ne objašnjava direktorij u koji se ne može ući, pa to ne tretirajte kao opšti odgovor.

Oduprite se prečici proširenja dozvola na stablu konfiguracije ili uklanjanja sandbox-a. Oboje uklanja simptom, a istovremeno uklanja zaštite koje su tamo namjerno stavljene, i sljedeću grešku će biti teže protumačiti.

Restartujte instancu i pročitajte sljedeći događaj umjesto da pretpostavite uspjeh. Vjerovatna sljedeća greška je da OpenVPN ne može otvoriti svoju konfiguracijsku datoteku, što je napredak: u radni direktorij se ušlo i parser sada radi. Odatle slijedite stvarno mapiranje datoteka unita umjesto da se vraćate na mrežno rješavanje problema.

systemd referenca za izvršavanje definiše kako se radni direktorij tumači zajedno s korijenskim direktorijima i sandboxingom. Obrazac koji treba zapamtiti je jednostavan: svaki statusni kod imenuje drugu fazu, i samo vlastite greške aplikacije opisuju aplikaciju.

Povezani članci