Profil, ki se je prej zagnal, zdaj odpove z napako možnosti, in vrstica, ki jo navaja razčlenjevalnik, je na zaslonu videti povsem razumna. To je past: konfiguracijska datoteka je seznam fizičnih vrstic, vsaka vsebuje eno ključno besedo možnosti in njene argumente, in dolga vrstica, ki jo urejevalnik prelomi, je videti enaka dvema vrsticama, dokler ne pogledate bajtov. Nič pri omrežju, potrdilu ali tunelu ni vpleteno v to vrsto napake. Dve vrstici, ki sta na zaslonu videti enaki, se lahko razlikujeta v enem samem bajtu.

Preverjanja spodaj opravite po vrsti in se ustavite pri prvem, ki odpove. Vsako je cenejše od naslednjega in vsako izloči drugo razlago.

Ena vrstica, ena direktiva

Razčlenjevalnik prebere vrstico, vzame prvo besedo kot možnost in preostanek obravnava kot argumente te možnosti. Vrstica, kot je cert server.crt port 1194, torej nista dve zaporedni navodili. To je ena možnost cert s tremi argumenti, tretji pa ni ime datoteke, ki bi jo možnost sprejela. Brati napako kot manjkajočo novo vrstico je prav; brati jo kot manjkajočo direktivo ni.

# malformed: one option, three arguments
cert server.crt port 1194

# intended: two options, one argument each
cert server.crt
port 1194

Ti dve popravljeni vrstici sta drobec, ne konfiguracija. Obstajata zato, da pokažeta, kam sodi meja. Vsaka običajna direktiva v profilu sledi istemu pravilu, in vrstica, ki združi dve od njih, ustvari bodisi napako argumenta bodisi vrednost, ki je možnost ni pričakovala.

Dokažite, da je prelom vrstice resničen

Urejevalniki prelamljajo zaradi prikaza. Nekateri pri lepljenju vstavijo tudi trde prelome, drugi ne, zato lahko isti vizualni rezultat izhaja iz dveh zelo različnih datotek. Pokažite konce vrstic in preštejte vrstice, preden karkoli spremenite. Merjenje stane en ukaz; ugibanje stane večer.

cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf

V prvem izpisu se vsak resničen prelom vrstice prikaže kot oznaka $, zato prelomljena, a ne razdeljena vrstica ne pokaže nobene oznake tam, kjer se vaš zaslon prelomi. Drugi ukaz izpiše oštevilčene vrstice, kar je najhitrejši način za primerjavo tega, kar poroča razčlenjevalnik, s tem, kar vsebuje datoteka.

Tudi dodatni presledki ne ustvarijo direktive. Zamik je kozmetičen, in vrstica, ki se začne s presledkom, je še vedno ista posamezna možnost. Če sporočilo o napaki kaže na številko vrstice, preberite točno tisto vrstico, ne odstavka, ki mu pripada.

Citirajte pot, ne seznama direktiv

Narekovaji obstajajo za argumente s presledki, ne za združevanje možnosti. Pot do potrdila s presledkom potrebuje svoje narekovaje; dve direktivi, ki si delita par narekovajev, sta še vedno ena poškodovana vrstica.

cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"

Preverite imena možnosti hkrati s postavitvijo, ker lahko združena vrstica ustvari verjetno videti žeton, ki ni nikoli obstajal. Direktiva vrat je port; profil, ki za isto idejo uporablja kaj drugega, odpove tudi po popravku meja vrstic. Ko je ime videti neznano, ga primerjajte s seznamom možnosti za različico, ki jo izvajate, namesto s primerom s foruma.

Vgradne bloke ohranite kot bloke

Profili lahko nosijo potrdila in ključe vgradne, in ti bloki so podatki, ne konfiguracija. Vrstice PEM znotraj bloka niso možnosti, ki bi jih bilo treba sploščiti, znova zamakniti ali združiti, in oznake bloka morajo ostati v svojih vrsticah.

Z vgradnim blokom ravnajte kot z neprozornim območjem: popravite vrstice možnosti okoli njega, njegovo vsebino pustite bajt za bajtom pri miru in ga nikoli ne prilepite v javno nit za podporo. Če je blok prepisalo orodje za oblikovanje, ga obnovite iz svoje PKI, namesto da bi ga popravljali ročno.

Popravite najmanjši razdelek, ne predloge

Mamljivo popravilo je zamenjati celotno datoteko s konfiguracijo iz vadnice, ki „deluje“. To zamenja eno poškodovano vrstico za niz sprememb pravilnika, ki jih ni nihče pregledal: drugi parametri DH, nastavitve stiskanja, izbira šifre, podvojeni poslušalci. Prvotna težava je majhna in lokalna, zamenjava pa ni niti eno niti drugo.

Kopirajte profil v zaščiteno delovno datoteko, popravite meje vrstic v tej kopiji in pustite običajnemu lastniku storitve, da jo naloži. Nato zaženite primer in preberite prvo napako, če obstaja, od začetka.

openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log

Ko faza razčlenjevanja uspe, bo naslednja napaka o datoteki, potrdilu ali šifri namesto o besedišču, in to je resničen napredek. Obdržite delovno kopijo in enovrstično opombo o tem, kaj je bilo združeno; isto lepljenje se bo znova zgodilo nekomu drugemu v isti ekipi.

Sorodni članki