Modul WireGuard sa po aktualizácii jadra nenačíta? Skontrolujte to
Externý modul sa musí zostavovať pre jadro, ktoré ho načíta, nie pre najnovší balík hlavičiek na disku. Pred opätovným zostavením skontrolujte bežiace vydanie.
Váš tunel včera fungoval, po aktualizácii sa stroj reštartoval a teraz sa rozhranie nezodvihne. V systéme, kde sa WireGuard zostavuje ako externý modul, je obvyklou príčinou to, že modul na disku patrí k inému vydaniu jadra než tomu, ktoré práve beží. Hlavičky s podobným názvom na tom istom stroji o tejto zhode nič nedokazujú. Rozhoduje o tom iba reťazec vydania.
Bežiace alebo nainštalované jadro
Aktualizácia nainštaluje nový balík jadra a starý ponechá na disku, kým sa stroj nereštartuje. Po reštarte sa bežiace vydanie zmení a každý modul zostavený pre predchádzajúce prestane fungovať, aj keď jeho súbory stále existujú. Táto medzera vysvetľuje známe hlásenie o stroji, ktorý bol pred reštartom v poriadku a po ňom nefunkčný, bez akejkoľvek zmeny konfigurácie medzitým. Vysvetľuje aj to, prečo preinštalovanie hlavičiek niekedy vyzerá, že problém rieši, a niekedy nie.
Balík hlavičiek, ktorý inštalujete, môže zodpovedať najnovšiemu balíku jadra, a nie jadru, ktoré sa skutočne zaviedlo, a nič v názve balíka tieto prípady nerozlišuje; robí to iba reťazec vydania. Skontrolujte, čo beží, skôr než skontrolujete, čo je nainštalované.
Tri kontroly pred opätovným zostavením
Prvá kontrola je, ktoré jadro beží. Druhá je, či pre toto vydanie existuje modul a či sa dá nájsť. Tretia je, či ho jadro už načítalo. Štvrtá otázka, či sa dá vytvoriť rozhranie, preveruje oprávnenia a nie modul, takže patrí po opätovnom zostavení a nie do tohto zoznamu.
Nižšie uvedené príkazy odpovedajú na prvé tri bez toho, aby čokoľvek menili. Prečítajte si každý výsledok, skôr než budete pokračovať, pretože každá odpoveď vylučuje inú opravu.
uname -r
ls -l /lib/modules/$(uname -r)/build
modinfo wireguard
lsmod | grep wireguard
Ak druhý riadok hlási, že cesta neexistuje, chýba prostredie na zostavenie bežiaceho jadra a nič, čo skompilujete, mu nebude zodpovedať. Ak modinfo zlyhá, hoci cesta existuje, modul možno vôbec nie je nainštalovaný, čo je u jadier dodávajúcich implementáciu v strome normálne. Ak modinfo uspeje a lsmod nič nezobrazí, modul existuje, ale nie je načítaný, čo je problém pri načítaní a nie pri zostavovaní. Každý výsledok vás zavedie inam, preto je čítanie dôležitejšie než príkazy.
Zostavujte pre bežiace vydanie
Externý modul sa kompiluje proti pripravenému stromu jadra a príručka jadra pre externé moduly opisuje použitie adresára na zostavenie, ktorý patrí bežiacemu jadru, a nie toho, ktorý má najvyššie číslo verzie. Ten adresár na zostavenie je symbolický odkaz spravovaný balíkom jadra, takže ukazuje na strom vydania, ktoré je práve zavedené. Práve v tejto nepriamosti je zmysel: odstraňuje voľbu, ktorú by ste inak urobili nesprávne. Keď ho pomenujete výslovne, cieľ je jednoznačný.
Jeden detail je dôležitý, keď je strom iba pripravený a nie úplne zostavený. Cieľ prípravy nevytvára súbor verzovania symbolov, ktorý niektoré externé zostavenia potrebujú, takže strom plný hlavičiek nie je automaticky úplné prostredie na zostavenie. Ak zostavenie zlyhá na chýbajúcich symboloch, tento súbor je prvým miestom, kam sa pozrieť.
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
Keď balené hlavičky zaostávajú
V distribúciách a počítačoch s jednou doskou, ktoré si balia vlastné jadrá, môžu hlavičky za vydaním zaostávať dni alebo týždne. Balík hlavičiek môže byť správny menom a starší obsahom, čo dáva zostavenie, ktoré sa skompiluje a potom zlyhá pri načítaní, a nie počas kompilácie. Miešanie zdrojov to zhoršuje: distribučné jadro s hlavičkami z repozitára tretej strany alebo jadro výrobcu so všeobecnými hlavičkami sa môže čisto skompilovať a napriek tomu ho bežiace jadro odmietne, pretože konfigurácia sa líši. Samotné čísla verzií to neriešia.
Ak stroj sleduje experimentálny kanál jadra, vedome sa rozhodnite, či tam zostanete s vhodnými artefaktmi zostavenia, alebo sa vrátite k podporovanej sade balíkov. Opakovanie aktualizácie a nádej, že si diely sadnú, nie je plán, pretože sa ten istý nesúlad opakuje zakaždým.
Overte rozhranie po opätovnom zostavení
Po úspešnej inštalácii je vytvorenie rozhrania tou skúškou, na ktorej záleží, a nasleduje čítanie toho, čo jadro skutočne načítalo a čo hovorí záznam, ak odmietlo. Modul, ktorý sa načíta, a rozhranie, ktoré sa nedá vytvoriť, sú rôzne poruchy s rôznymi príčinami. Nižšie uvedené tri príkazy ich oddeľujú.
sudo ip link add wg9 type wireguard
lsmod | grep wireguard
sudo dmesg | tail -5
Ak modul odmietne načítanie, záznam jadra uvedie dôvod a nesúlad verzií je len jednou z možností. Prečítajte si ten riadok, skôr než budete znova zostavovať, pretože druhé rovnaké zostavenie spotrebuje tých istých desať minút a dá rovnaké odmietnutie. Potom odstráňte dočasné rozhranie, aby ďalší test začal z čistého stavu.