WireGuard modul se ne učitava nakon ažuriranja kernela? Provjerite ovo
Vanjski modul mora se graditi prema kernelu koji će ga učitati, a ne prema najnovijem paketu zaglavlja na disku. Provjerite aktivno izdanje prije ponovne gradnje.
Vaš tunel je jučer radio, mašina se ponovo pokrenula nakon ažuriranja, a sada se interfejs ne podiže. Na sistemu na kojem se WireGuard gradi kao vanjski modul, uobičajen uzrok je to što modul na disku pripada drugom izdanju kernela od onog koje sada radi. Zaglavlja sa sličnim imenom na istoj mašini ne dokazuju ništa o tom podudaranju. To odlučuje samo niz izdanja.
Aktivni ili instalirani kernel
Ažuriranje instalira novi paket kernela i ostavlja stari na disku dok se mašina ne ponovo pokrene. Nakon ponovnog pokretanja aktivno izdanje se mijenja, a svaki modul izgrađen prema prethodnom postaje neupotrebljiv iako su njegove datoteke još tu. Taj jaz objašnjava poznati izvještaj o mašini koja je bila ispravna prije ponovnog pokretanja i pokvarena nakon njega, bez ikakve promjene konfiguracije između. Takođe objašnjava zašto ponovna instalacija zaglavlja ponekad izgleda kao da rješava problem, a ponekad ne.
Paket zaglavlja koji instalirate može odgovarati najnovijem paketu kernela, a ne kernelu koji je stvarno podignut, i ništa u imenu paketa ne razlikuje te slučajeve; to čini samo niz izdanja. Provjerite šta radi prije nego što provjerite šta je instalirano.
Tri provjere prije ponovne gradnje
Prva provjera je koji kernel radi. Druga je postoji li modul za to izdanje i može li se pronaći. Treća je da li ga je kernel već učitao. Četvrto pitanje, može li se kreirati interfejs, provjerava privilegije, a ne modul, pa pripada nakon ponovne gradnje, a ne u ovaj spisak.
Komande ispod odgovaraju na prve tri bez ikakve promjene. Pročitajte svaki rezultat prije nego što nastavite, jer svaki odgovor isključuje drugačiju popravku.
uname -r
ls -l /lib/modules/$(uname -r)/build
modinfo wireguard
lsmod | grep wireguard
Ako drugi red javlja da putanja ne postoji, okruženje za gradnju aktivnog kernela nedostaje i ništa što kompajlirate neće se s njim podudarati. Ako modinfo ne uspije dok putanja postoji, modul možda uopšte nije instaliran, što je normalno na kernelima koji implementaciju isporučuju unutar stabla. Ako modinfo uspije, a lsmod ne pokaže ništa, modul postoji ali nije učitan, što je problem pri učitavanju, a ne pri gradnji. Svaki ishod vas vodi na drugo mjesto, zato je čitanje važnije od komandi.
Gradite prema aktivnom izdanju
Vanjski modul se kompajlira prema pripremljenom stablu kernela, a vodič kernela za vanjske module opisuje korištenje direktorija za gradnju koji pripada aktivnom kernelu, a ne bilo kojeg direktorija s najvišim brojem verzije. Taj direktorij za gradnju je simbolička veza koju održava paket kernela, pa pokazuje na stablo za izdanje koje je trenutno podignuto. Indirekcija je upravo poenta: uklanja izbor koji biste inače pogrešno napravili. Izričito imenovanje cilja čini ga nedvosmislenim.
Jedan detalj je važan kada je stablo samo pripremljeno, a ne potpuno izgrađeno. Cilj pripreme ne proizvodi datoteku verzionisanja simbola koja je potrebna nekim vanjskim gradnjama, pa stablo puno zaglavlja nije automatski potpuno okruženje za gradnju. Ako gradnja ne uspije zbog nedostajućih simbola, ta datoteka je prvo mjesto koje treba pogledati.
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
Kada pakirana zaglavlja kasne
Na distribucijama i računarima s jednom pločom koji pakuju vlastite kernele, zaglavlja mogu kasniti za izdanjem danima ili sedmicama. Paket zaglavlja može biti ispravan po imenu i stariji po sadržaju, što daje gradnju koja se kompajlira i zatim ne uspije pri učitavanju, a ne tokom kompajliranja. Miješanje izvora pogoršava stvar: distribucijski kernel sa zaglavljima iz repozitorija treće strane, ili kernel proizvođača s generičkim zaglavljima, može se čisto kompajlirati i ipak ga aktivni kernel odbiti jer se konfiguracija razlikuje. Sami brojevi verzija to ne rješavaju.
Ako mašina prati eksperimentalni kanal kernela, svjesno odlučite da li ćete ostati tamo s odgovarajućim artefaktima gradnje ili se vratiti na podržani skup paketa. Ponavljanje ažuriranja i nada da će se dijelovi poklopiti nije plan, jer se isto nepodudaranje ponavlja svaki put.
Provjerite interfejs nakon ponovne gradnje
Nakon uspješne instalacije, kreiranje interfejsa je test koji je važan, a zatim čitanje onoga što je kernel stvarno učitao i šta kaže zapis ako je odbio. Modul koji se učita i interfejs koji se ne može kreirati različiti su kvarovi s različitim uzrocima. Tri komande ispod razdvajaju ih.
sudo ip link add wg9 type wireguard
lsmod | grep wireguard
sudo dmesg | tail -5
Ako modul odbije da se učita, zapis kernela navodi razlog, a nepodudaranje verzije samo je jedna od mogućnosti. Pročitajte taj red prije nego što ponovo gradite, jer druga identična gradnja troši istih deset minuta i daje isto odbijanje. Zatim uklonite privremeni interfejs da bi sljedeći test počeo iz čistog stanja.