Véierzeg .ovpn-Dateie fir een Land komme vun engem Provider, an de Plang schéngt evident: kopéier eng zoufälleg op hire Plaz, an da start den Tunnel. Als Pipeline an ExecStart geschriwwen, stierft dee Plang beim Boot mat engem Statuscode, deen näischt erkläert. D’Unit-Datei ass kee Skript, an d’Reparatur ass entweder eng Shell explizit erbäizesetzen oder ganz ophéieren, Dateien auszewielen.

D’Symptom: eng Unit, déi startet an direkt stierft

De Status weist, datt de Service an engem Brochdeel vun enger Sekonn gescheitert ass, an d’Journal-Linn nennt eng Kommando, déi keng Shell jee kritt hätt. Iwwer den Tunnel erschéngt näischt, well den Tunnel ni ugefaange huet.

Déi exakt Kommandozeil aus dem Journal ze liesen ass de séiersten Wee, dat ze bestätegen. systemd widdergëtt, wat et ausgefouert huet, an de String weist d’Pipeline-Zeechen als wuertwiertlech Argumenter amplaz als Operatoren.

Firwat ExecStart keng Pipeline kann ausféieren

systemd deelt d’Kommandozeil selwer, applizéiert seng eege Quotéierung a Variabel-Substitutioun, an exekutéiert dann d’Resultat direkt. Pipes, Ëmleedung, Glob-Erweiderung duerch eng Shell a Kommando-Substitutioun sinn einfach net Deel vun dëser Grammatik. Et ass eng Design-Entscheedung an net en Auslooss: eng Unit seet deklarativ, wat soll lafen, an d’Shell-Logik gehéiert an e Skript, dat d’Unit oprufft. Béid Reparature folgen doraus, an keng vun deenen zwee verlaangt, datt d’Unit méi Rechter kritt.

Et erkläert och de misverständlechen Exit-Code. Den éischten Argument gëtt als Binär behandelt, also feelt eng falsch Linn, ier en Deel vun Ärer Logik leeft.

Maacht d’Auswiel an ExecStartPre

Déi direkt Reparatur ass en Virbereedungsschrëtt, deen eng Shell explizit oprufft an d’Auswiel an de Start an der selwechter Unit hält, sou datt e Fehler an deem engen deen aneren net eleng lafe léisst.

[Service]
Type=notify
ExecStartPre=/bin/bash -c "ls /etc/openvpn/profiles/au* | shuf -n 1 | xargs -r -I{} cp -f {} /etc/openvpn/%i.conf"
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf

Dräi Detailer entscheeden, ob dëst den Kontakt mat enger richtege Maschinn iwwersteet. D’Benennen ass déi éischt Fal: systemd ersetzt %i schonn beim Parsen vun der Unit, laang ier bash leeft, also muss de Spezifizierer ausserhalb vun eenzelen Anführungszeeche stoen. xargs -r verhënnert, datt cp ouni Argument leeft, wann de Glob op näischt passt. An e gescheiterten Virbereedungsschrëtt stoppt d’Unit, an dat ass dat richtegt Resultat: mat der Konfiguratioun vun gëschter starten ass schlëmmer wéi net starten. Eng zoufälleg Auswiel, déi ëmmer déi selwecht Datei hëlt, ass meeschtens keen Pech. Kontrolléiert, ob déi kopéiert Datei vun engem Pak-Update iwwerschriwwe gëtt, oder ob de Glob nëmmen op een eenzegen alen Entrée passt.

Oder loosst OpenVPN den Endpunkt auswielen

OpenVPN kann schonn e puer Endpunkten an engem Profil halen an zoufälleg dorauser auswielen, wat d’Shell, d’Kopie an den Schreibzougrëff komplett aus dem Boot-Wee hëlt.

client
remote-random
<connection>
remote au1.example.net 1194 udp
</connection>
<connection>
remote au2.example.net 1194 udp
</connection>

Dës Form hält d’Server-Auswiel an der Datei, déi de Provider geschriwwen huet, also brécht eng Rotatioun, déi Dateien ëmbenennt, d’Unit net. Si mécht och d’Kandidatelëscht auditbar, wat e Glob iwwer en Verzeechnes ni ass. D’Duercherneen verdéngt nach ëmmer seng Plaz, wann d’Profiler sech a méi wéi engem Endpunkt ënnerscheeden: aner Zertifikater, aner Routing-Direktiven, aner Chiffréierungspolitik. An deem Fall ass d’Auswiel tëscht ganze Konfiguratiounen, an e Shell-Schrëtt ass déi éierlech Manéier, dat auszedrécken.

Liest d’Instanz an d’Datei zréck, déi se benotzt huet

Bestätegt, wéi eng Unit tatsächlech leeft, ier Dir hiren Inhalt debugt. De gepackte Meta-Service an den Template sinn Infrastruktur; d’Uniten, déi Ären Dateie entspriechen, sinn d’Instanzen, déi no hinnen benannt sinn.

systemctl list-units 'openvpn*'
systemctl cat [email protected]
journalctl -u openvpn@au -n 30 --no-pager

Eng Instanz, un déi sech keen erënnert, se aktivéiert ze hunn, féiert meeschtens op eng verierrt Konfiguratiounsdatei am Pakverzeechnes zréck. Schalt déi benannt Instanz amplaz vum Template aus, soss bréngt se den nächsten Pak-Upgrade zréck. No der Ännerung start d’Unit a liest d’Kommandozeil, déi den Journal mellt, a bestätegt dann de Konfiguratiounspfad, deen se tatsächlech opgemaach huet. Dee eenzege Kontroll trennt eng funktionéierend zoufälleg Auswiel vun engem Service, dee roueg eng Datei vum leschte Mount erëmbenotzt.

Ähnlech Artikelen