Tjenesten fejler, loggen nævner en spawn og en mappe, og den første indskydelse er at tjekke VPN-konfigurationen. Der er endnu ikke læst noget i den fil. systemd fejlede, mens den forberedte processen, før den kørbare fil blev startet, så ingen parser, intet certifikat og ingen fjernvært er blevet konsulteret. At læse statuskoden som en udtalelse om systemd i stedet for om OpenVPN er det, der gør dette til en kort undersøgelse.

Læs statuskoden før applikationen

Det numeriske kodeord efter tjenestenavnet angiver det trin, der fejlede. En mappefejl rapporteres som CHDIR-status, mens en kørbar fil, der ikke kunne køres, er en helt anden kode. De to ser ens ud i en oversigtslinje og har intet til fælles i deres årsager.

Den forskel betyder noget, fordi rettelserne er i forskellige filer. En CHDIR-fejl handler om en sti og tjenestens syn på den. En exec-fejl handler om binæren, dens fortolker eller et uvedkommende mount. At ændre VPN-remoten, cifferlisten eller certifikatstien kan ikke løse nogen af dem.

Bekræft, at fejlen er ved start og ikke efter et vellykket kørselsforløb. Hvis tjenesten virkede i går og nu fejler på samme trin, er noget ændret ved mappen, dens tilladelser eller unit'en selv, og den ændring er det bevis, du skal lede efter.

Spørg unit'en, hvor den vil være

Læs den effektive unit i stedet for den fil, du tror er installeret, fordi drop-ins kan tilsidesætte arbejdsmappen, uden at du nogensinde redigerer hovedunit'en. Show-outputtet besvarer spørgsmålet direkte:

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

For upstream-server-skabelonen er arbejdsmappen serverens konfigurationsmappe, og instansnavnet vælger profilen indeni. En instans kaldet branch forventer derfor sin egen fil i samme mappe, og en profil placeret et andet sted opfylder slet ikke kravet om arbejdsmappen.

Sammenlign, hvad unit'en beder om, med hvad der findes. En sti, der plejede at findes, et symbolsk link, der nu peger et andet sted hen, eller et instansnavn, der ikke længere matcher en mappe, er alle almindelige ændringer, der giver netop denne fejl.

Tjek stien, som tjenesten ser den

Din shell og tjenesten deler ikke samme filsystemvisning. En konfigureret rodmappe eller root image ændrer, hvad en absolut sti betyder inde i unit'en, og en sti, der tydeligt findes på værten, kan mangle i det namespace. Læs unit'ens indstillinger, før du stoler på en manuel test.

Tilladelser forværrer problemet. Tjenesten kører som en bestemt bruger, og den bruger skal kunne gennemgå hver overordnet mappe for at nå målet, ikke blot læse målet selv. En mappe, der er læsbar for root og ikke kan gennemgås af tjenestebrugeren, giver en fejl, der ligner en manglende sti.

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

Hærdningsindstillinger er også en del af billedet. En unit, der skjuler hjemmemapper eller gør en del af filsystemet skrivebeskyttet, gør præcis det, den er konfigureret til, og arbejdsmappen skal ligge et sted, hvor sandkassen stadig viser den.

Ret ejeren, og forvent så en anden fejl

Ret layoutet eller unit'en gennem den, der ejer den konfiguration. At flytte en profil ind i den forventede mappe er en legitim rettelse, når layoutet er forkert, men det forklarer ikke en mappe, der ikke kan betrædes, så behandl det ikke som det generelle svar.

Modstå genvejen med at udvide tilladelserne på konfigurationstræet eller fjerne sandkassen. Begge får symptomet til at forsvinde, mens de beskyttelser, der blev sat der med vilje, fjernes, og den næste fejl bliver sværere at fortolke.

Genstart instansen, og læs den næste hændelse i stedet for at antage succes. Den sandsynlige næste fejl er, at OpenVPN ikke kan åbne sin konfigurationsfil, hvilket er fremskridt: arbejdsmappen blev betrådt, og parseren kører nu. Følg unit'ens faktiske filmapping derfra i stedet for at vende tilbage til netværksfejlfinding.

systemds kørereference definerer, hvordan arbejdsmappen fortolkes sammen med rodmapper og sandkasse. Mønstret at huske er enkelt: hver statuskode angiver et forskelligt trin, og kun applikationens egne fejl beskriver applikationen.

Relaterede artikler