Ваш тунел је јуче радио, машина се поново покренула после ажурирања, а сада се интерфејс не подиже. На систему где се WireGuard гради као спољни модул, уобичајен узрок је то што модул на диску припада другом издању кернела од оног које сада ради. Заглавља сличног имена на истој машини не доказују ништа о том поклапању. То одлучује само ниска издања.

Кернел који ради или инсталирани кернел

Ажурирање инсталира нови пакет кернела и оставља стари на диску док се машина не поново покрене. После поновног покретања издање које ради се мења, и сваки модул изграђен за претходно постаје неупотребљив иако су његови фајлови још тамо. Тај јаз објашњава познати извештај о машини која је била у реду пре поновног покретања и покварена после, без икакве промене конфигурације између. Такође објашњава зашто поновна инсталација заглавља понекад изгледа да решава проблем, а понекад не.

Пакет заглавља који инсталирате може да одговара најновијем пакету кернела, а не кернелу које је заиста подигнуто, и ништа у имену пакета не разликује те случајеве; то чини само ниска издања. Проверите шта ради пре него што проверите шта је инсталирано.

Три провере пре поновне изградње

Прва провера је који кернел ради. Друга је да ли за то издање постоји модул и да ли може да се нађе. Трећа је да ли га је кернел већ учитао. Четврто питање, да ли интерфејс може да се створи, проверава привилегије, а не модул, па му је место после поновне изградње, а не на овом списку.

Команде испод одговарају на прве три без икакве промене. Прочитајте сваки резултат пре него што наставите, јер сваки одговор искључује другу поправку.

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

Ако други ред јави да путања не постоји, окружење за изградњу кернела који ради недостаје и ништа што компајлирате неће се поклопити. Ако modinfo не успе док путања постоји, модул можда уопште није инсталиран, што је нормално на кернелима који имплементацију испоручују у стаблу. Ако modinfo успе, а lsmod не покаже ништа, модул постоји али није учитан, што је проблем при учитавању, а не при изградњи. Сваки резултат вас води на друго место, зато је читање важније од команди.

Градите за издање које ради

Спољни модул се компајлира за припремљено стабло кернела, а водич кернела за спољне модуле описује коришћење директоријума за изградњу који припада кернелу који ради, а не оног са највишим бројем верзије. Тај директоријум за изградњу је симболичка веза коју одржава пакет кернела, па показује на стабло издања које је управо подигнуто. Индиректност је управо поента: уклања избор који бисте иначе направили погрешно. Његово јасно именовање чини циљ недвосмисленим.

Један детаљ је важан када је стабло само припремљено, а не потпуно изграђено. Циљ припреме не ствара датотеку верзионисања симбола која је потребна неким спољним изградњама, па стабло пуно заглавља није аутоматски потпуно окружење за изградњу. Ако изградња не успе због симбола који недостају, та датотека је прво место које треба погледати.

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

Када пакована заглавља касне

На дистрибуцијама и рачунарима са једном плочом који паковају сопствене кернеле, заглавља могу да касне данима или недељама за издањем. Пакет заглавља може бити исправан по имену и старији по садржају, што даје изградњу која се компајлира и затим не успе при учитавању, а не током компајлирања. Мешање извора то погоршава: дистрибуцијски кернел са заглављима из складишта треће стране, или кернел произвођача са општим заглављима, може чисто да се компајлира и ипак буде одбијен од кернела који ради јер се конфигурација разликује. Сами бројеви верзија то не решавају.

Ако машина прати експериментални канал кернела, свесно одлучите да ли да останете тамо са одговарајућим артефактима изградње или да се вратите на подржани скуп пакета. Понављање ажурирања и нада да ће се делови поклопити није план, јер се исто непоклапање понавља сваки пут.

Проверите интерфејс после поновне изградње

После успешне инсталације, стварање интерфејса је тест који је важан, а затим читање шта је кернел заиста учитао и шта каже дневник ако је одбио. Модул који се учита и интерфејс који не може да се створи различити су кварови са различитим узроцима. Три команде испод их раздвајају.

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

Ако модул одбије да се учита, дневник кернела наводи разлог, а непоклапање верзије је само једна од могућности. Прочитајте тај ред пре поновне изградње, јер друга идентична изградња троши истих десет минута и даје исто одбијање. Затим уклоните привремени интерфејс да би следећи тест почео из чистог стања.

Повезани чланци