Модулот WireGuard не се вчитува по ажурирање на јадрото? Проверете го ова
Надворешен модул треба да се изгради за јадрото што ќе го вчита, а не за најновиот пакет со заглавија на дискот. Проверете го тековното издание пред повторна изградба.
Вашиот тунел работеше вчера, машината се рестартира по ажурирање, а сега интерфејсот не се крева. На систем каде 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
Ако модулот одбие да се вчита, дневникот на јадрото го наведува причината, а несовпаѓањето на верзијата е само една од можностите. Прочитајте го тој ред пред да изградите повторно, затоа што втора идентична изградба троши исти десет минути и дава исто одбивање. Потоа отстранете го привремениот интерфејс за следниот тест да започне од чиста состојба.