Vaš tunel je včeraj deloval, stroj se je po posodobitvi znova zagnal, zdaj pa se vmesnik ne dvigne. V sistemu, kjer se WireGuard gradi kot zunanji modul, je običajen vzrok, da modul na disku pripada drugi izdaji jedra kot tisti, ki zdaj teče. Glave s podobnim imenom na istem stroju ne dokazujejo ničesar o tem ujemanju. To odloča samo niz izdaje.

Tekoče ali nameščeno jedro

Posodobitev namesti nov paket jedra, starega pa pusti na disku, dokler se stroj ne znova zažene. Po ponovnem zagonu se delujoča izdaja spremeni in vsak modul, zgrajen za prejšnjo, postane neuporaben, čeprav so njegove datoteke še tam. Ta vrzel pojasnjuje znano poročilo o stroju, ki je bil pred ponovnim zagonom v redu, po njem pa pokvarjen, brez kakršne koli spremembe konfiguracije vmes. Pojasnjuje tudi, zakaj se ponovna namestitev glav včasih zdi, da reši težavo, včasih pa ne.

Paket glav, ki ga namestite, lahko ustreza najnovejšemu paketu jedra in ne jedru, ki se je dejansko zagnalo, in nič v imenu paketa ne razlikuje teh primerov; to stori samo niz izdaje. Preverite, kaj teče, preden preverite, kaj je nameščeno.

Trije pregledi pred ponovno gradnjo

Prvi pregled je, katero jedro teče. Drugi je, ali za to izdajo obstaja modul in ali ga je mogoče najti. Tretji je, ali ga je jedro že naložilo. Četrto vprašanje, ali je vmesnik mogoče ustvariti, preverja pravice in ne modula, zato sodi po ponovni gradnji in ne na ta seznam.

Spodnji ukazi odgovorijo na prve tri, ne da bi karkoli spremenili. Preberite vsak rezultat, preden nadaljujete, ker vsak odgovor izključi drugačno popravilo.

uname -r
ls -l /lib/modules/$(uname -r)/build
modinfo wireguard
lsmod | grep wireguard

Če druga vrstica sporoča, da pot ne obstaja, manjka gradbeno okolje za tekoče jedro in nič, kar prevedete, se ne bo ujemalo. Če modinfo spodleti, medtem ko pot obstaja, modul morda sploh ni nameščen, kar je običajno pri jedrih, ki izvedbo prinašajo v drevesu. Če modinfo uspe in lsmod ne pokaže ničesar, modul obstaja, a ni naložen, kar je težava pri nalaganju in ne pri gradnji. Vsak rezultat vas pelje drugam, zato je branje pomembnejše od ukazov.

Gradite za tekočo izdajo

Zunanji modul se prevede proti pripravljenemu drevesu jedra in vodnik jedra za zunanje module opisuje uporabo gradbenega imenika, ki pripada tekočemu jedru, in ne tistega z najvišjo številko različice. Ta gradbeni imenik je simbolna povezava, ki jo vzdržuje paket jedra, zato kaže na drevo izdaje, ki je pravkar zagnana. Prav v tej posrednosti je smisel: odstrani izbiro, ki bi jo sicer naredili napačno. Če ga izrecno poimenujete, je cilj nedvoumen.

Ena podrobnost je pomembna, ko je drevo samo pripravljeno in ne v celoti zgrajeno. Cilj priprave ne ustvari datoteke za različice simbolov, ki jo potrebujejo nekatere zunanje gradnje, zato drevo, polno glav, ni samodejno popolno gradbeno okolje. Če gradnja spodleti zaradi manjkajočih simbolov, je ta datoteka prvo mesto za ogled.

sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
sudo depmod -a

Ko pakirane glave zaostajajo

V distribucijah in računalnikih z eno ploščo, ki pakirajo lastna jedra, lahko glave za izdajo zaostajajo dneve ali tedne. Paket glav je lahko pravilen po imenu in starejši po vsebini, kar da gradnjo, ki se prevede in nato spodleti pri nalaganju, ne pa med prevajanjem. Mešanje virov poslabša stanje: distribucijsko jedro z glavami iz skladišča tretje strani ali jedro proizvajalca s splošnimi glavami se lahko čisto prevede in ga tekoče jedro vseeno zavrne, ker se konfiguracija razlikuje. Samo številke različic tega ne rešijo.

Če stroj sledi poskusnemu kanalu jedra, se zavestno odločite, ali boste ostali tam z ustreznimi artefakti gradnje ali se vrnili k podprtemu naboru paketov. Ponavljanje posodobitve in upanje, da se bodo deli ujeli, ni načrt, ker se isto neskladje ponavlja vsakič.

Preverite vmesnik po ponovni gradnji

Po uspešni namestitvi je ustvarjanje vmesnika tisti preizkus, ki šteje, sledi pa branje, kaj je jedro dejansko naložilo in kaj pravi dnevnik, če je zavrnilo. Modul, ki se naloži, in vmesnik, ki ga ni mogoče ustvariti, sta različni okvari z različnimi vzroki. Spodnji trije ukazi ju ločijo.

sudo ip link add wg9 type wireguard
lsmod | grep wireguard
sudo dmesg | tail -5

Če modul noče naložiti, dnevnik jedra navede vzrok, in neskladje različic je le ena od možnosti. Preberite tisto vrstico, preden znova gradite, ker druga enaka gradnja porabi istih deset minut in da enako zavrnitev. Nato odstranite začasni vmesnik, da se naslednji preizkus začne iz čistega stanja.

Sorodni članki