Slembið OpenVPN-val í systemd: hvers vegna ExecStart bregst
systemd er ekki skel, svo blönduð afrit inni í ExecStart deyja. Færðu valið í ExecStartPre, eða láttu OpenVPN velja netþjón sjálft.
Fjörutíu .ovpn skrár fyrir eitt land berast frá þjónustuveitanda, og áætlunin virðist augljós: afritaðu eina af handahófi á sinn stað og ræstu svo göngin. Skrifuð sem pípa inni í ExecStart deyr sú áætlun við ræsingu með stöðukóða sem útskýrir ekkert. Unit-skráin er ekki skrifta, og viðgerðin er annaðhvort að sækja skel inn á skýran hátt eða hætta alveg að velja skrár.
Einkennið: unit sem ræsist og deyr samstundis
Staðan sýnir að þjónustan féll á broti úr sekúndu, og dagbókarlínan nefnir skipun sem engin skel hefði nokkurn tíma fengið. Ekkert um göngin birtist, því göngin hófust aldrei.
Að lesa nákvæmu skipanalínuna úr dagbókinni er fljótlegasta leiðin til að staðfesta þetta. systemd endursegir það sem það keyrði, og strengurinn mun sýna tákn pípunnar sem bókstafleg rök en ekki sem virkja.
Hvers vegna ExecStart getur ekki keyrt pípu
systemd skiptir sjálft skipanalínunni, beitir eigin tilvitnunum og breytuskiptum og keyrir svo niðurstöðuna beint. Pípur, endurbeining, glob-útvikkun skeljar og skipanaskipti eru einfaldlega ekki hluti af þessari málfræði. Þetta er hönnunarval en ekki yfirsjón: unit er yfirlýsandi um hvað á að keyra, og skellógík tilheyrir skriftu sem unit kallar á. Báðar viðgerðirnar leiða af þessu, og hvorug krefst þess að unit fái meiri réttindi.
Það útskýrir líka villandi útgöngukóðann. Fyrsta rökin eru meðhöndluð sem tvíundin, svo gölluð lína fellur áður en nokkur hluti rökfræðinnar þinnar keyrir.
Gerðu valið í ExecStartPre
Beina viðgerðin er undirbúningsskref sem kallar á skel á skýran hátt og heldur valinu og ræsingunni í sama uniti svo bilun í öðru geti ekki látið hitt keyra eitt og sér.
[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
Þrjú atriði ráða því hvort þetta þolir kynni við raunverulega vél. Nöfnun er fyrsta gildran: systemd skiptir út %i þegar unitið er þáttað, löngu áður en bash keyrir, svo tilgreiningin verður að standa utan einfaldra gæsalappa. xargs -r kemur í veg fyrir að cp keyri án röksemda þegar globið passar við ekkert. Og misheppnað undirbúningsskref stöðvar unitið, og það er rétta niðurstaðan: að byrja með stillingum gærdagsins er verra en að byrja ekki. Slembið val sem tekur alltaf sömu skrá er yfirleitt ekki óheppni. Athugaðu hvort afritaða skráin sé skrifuð yfir af pakkauppfærslu, eða hvort globið passi aðeins við eina úrelta færslu.
Eða láttu OpenVPN velja endapunktinn
OpenVPN getur þegar haft nokkra endapunkta í einu prófíli og valið af handahófi á milli þeirra, sem fjarlægir skelina, afritið og skrifheimildina alfarið úr ræsingarferlinu.
client
remote-random
<connection>
remote au1.example.net 1194 udp
</connection>
<connection>
remote au2.example.net 1194 udp
</connection>
Þetta form heldur netþjónvalinu inni í skránni sem þjónustuveitandinn bjó til, svo snúningur sem endurnefnir skrár brýtur ekki unitið. Það gerir frambjóðendalistann einnig endurskoðanlegan, sem glob yfir möppu er aldrei. Blöndunin á samt enn rétt á sér þegar prófílarnir eru ólíkir í meiru en endapunkti: ólík skírteini, ólíkar leiðbeiningar um leiðsögn, ólík dulkóðunarstefna. Í því tilfelli er valið á milli heildarstillinga og skeljarskref er heiðarleg leið til að koma því í orð.
Lestu til baka tilvikið og skrána sem það notaði
Staðfestu hvaða unit keyrir í raun áður en þú kembir innihaldi þess. Pakkaða metaþjónustan og sniðmátið eru innviðir; unitin sem svara til skránna þinna eru tilvikin sem nefnd eru eftir þeim.
systemctl list-units 'openvpn*'
systemctl cat [email protected]
journalctl -u openvpn@au -n 30 --no-pager
Tilvik sem enginn man eftir að hafa virkjað leiðir venjulega til villtra stillingaskráa í pakkamöppunni. Slökktu á því nefnda tilviki í stað sniðmátsins, annars færir næsta pakkauppfærsla það aftur. Eftir breytinguna skaltu ræsa unitið og lesa skipanalínuna sem dagbókin greinir frá, og staðfesta svo stillingarslóðina sem það opnaði í raun. Þessi eina athugun aðgreinir slembið val sem virkar frá þjónustu sem endurnýtir hljóðlega skrá frá síðasta mánuði.