Instalacja sterownika dla Nvidia GeForce 920M
Jakiś czas temu musiałem zoptymalizować mój "zestaw", wymieniłem komputer gamingowy, na dwa latopy. Jeden z nich posiada grafikę Nvidia GeForce 920M, chciałem aby na tym sprzęcie rezydował immudex w wersji testing. I tutaj zaczęły się schody, bowiem obecny (dostępny w repozytorium Debian Bookworm) sterownik Nvidii w wersji 528, nie posiada wsparcia dla tej karty. Więc wpadłem na pomysł zainstalowania wersji 470 z Debian Bullseye. Poniżej znajduje się opis oraz to co udało mi się uzyskać.
⚠ Uwaga! Wykonywane tutaj czynności wykorzystują oprogramowanie własnościowe, jeśli jest to sprzeczne z Twoim zasadami etycznymi zrezyguj z dalszego wykonywania poniższych czynności.
⚠ Pro Tip! Najlepiej te czynności wykonywać na komputerze uruchomionym z pamięci USB.
Sterowniki do obrazu immudex, możemy dodać na zasadzie "przewinięcia". Więc czynności rozpoczniemy od sprawdzenia dostępności takich poleceń jak unsquashfs oraz mksquashfs. W najnowszych wersjach immudex lub immudex-testing powinny byś one zainstalowane. W celach porządkowych, utworzymy sobie katalog.
$ mkdir 0.1.7
Następnie na wypadek niepowodzenia naszych zmian, pobierzemy z partycji obecnie używane archiwum .squashfs.
$ cp /run/live/medium/live/filesystem.squashfs filesystem.squashfs_original
Teraz możemy przejść do katalogu i rozpakować nasze archiwum.
$ cd 0.1.7 $ sudo unsquashfs -f -d tmp /run/live/medium/live/filesystem.squashfs
Po rozpakowaniu archiwum, katalog tmp będzie zawierać rootfs najnowszego obrazu immudex. Aby był on pełnoprawnym obrazem systemu brakuje mu plików jądra, które nie wchodzi w skład archiwum (bo i po co, pliki jądra muszą znajdować się na zewnatrz archiwum, aby system mógł się uruchomić, archiwum zawierające initrd oraz jądro, marnuje po prostu miejsce). Z tego względu, że brakuje w ogóle kilku plików, nie możemy sobie od tak ich skopiować. Musimy posłużyć się narzędziem apt oraz trochę je oszukać, aby przywrócić te pliki. Wszystkie czynności przedstawione na poniższym przykładzie wykonywane są w środowisku zmienionego katalogu głównego (chroot). Aby moduły jądra zostały poprawnie zbudowane do środowiska zmienionego katalogu głównego potrzebne jest przekazanie kilku systemowych interfejsów: /dev /dev/pts /proc /run /sys.
⚠ Polecenie apt install może zawieści się. Wówczas należy przerwać operację i odświerzyć połączenie sieciowe poprzez komunikację z serwerem DHCP (polecenie dhclient).
0.1.7$ for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i tmp${i}; done 0.1.7$ sudo chroot tmp/ bash (chroot)/$ mkdir boot (chroot)/$ apt purge linux-image* -y (chroot)/$ apt install linux-image-amd64
Jeśli nie ma katalogu /boot w katalogu głównym, polecenie
apt
, zwróci błąd i zakończy działanie.
Aby jednak wykonał on zażądane przez nas czynności wystarczy mu sama
obecność tego katalogu (katalog może być pusty). Polecenie usuwania
pakietu, może zwrócić monit o tym, że usuwamy działające obecnie jądro
i czy chcemy przerwać tę czynność. Z pewnością 99% możemy kliknąć
Nie
,
osobiście kiedyś udało mi się zawieści działanie jednego z serwerów
przeprowadzając tę czynność, mimo wykonania jej środowisku zmienionego
katalogu głównego. Jeśli naszym system jest immudex, to mamy
100%.
Po odzyskaniu plików jądra, wypadałoby zainstalować pakiety wspomagające budowanie jego modułów (chociaż, pakiet build-essential, jest zainstalowany w immudex).
(chroot)/$ apt install build-essential dkms linux-headers-$(uname -r)
Po zainstalowaniu tych pakietów, możemy przejść do instalacji właściwego sterownika. W tym celu utworzymy sobie plik zawierający lokalizację źródeł repozytorium dla wersji Debian Bullseye, ale tylko do repozytoriów contrib oraz non-free (oczywiście, można użyć bardziej odpowiedniej nazyw niż nvidia.list, jednak dla mnie te repozytoria będą służyć jedynie do tego).
(chroot)/$ cp /etc/apt/sources.list /etc/apt/sources.list.d/nvidia.list (chroot)/$ sed -e 's/bookworm/bullseye/g' -e 's/main/contrib non-free/g' -i /etc/apt/sources.list.d/nvidia.list (chroot)/$ apt update (chroot)/$ apt install nvidia-detect (chroot)/$ nvidia-detect (chroot)/$ apt install nvidia-driver
Polecenie nvidia-detect
zwróci
informacje o tym że pasującym sterownikiem jest sterownik w wersji 470.
A nie jak w przypadku Debian 12, pakiet sterowników dla układów Nvidia
Tesla, który nie działa z tym układem.
Powykonaniu tych rootfs jest gotowy do pakowania. Jest jeden
mały szczegół. Otóż w tej instalacji zabrakło instalacji pakietu
nvidia-settings. Nie został on zainstalowany przez niespełnione
zależności. Ważna dla tego pakietu jest biblioteka
libxnvctrl0, powinna być ona zgodna z wersją
instalowanego sterownika Nvidii, jednak ze względu na to, że
zostawiliśmy repozytorium main dla Debian Bookworm, nie będzie
między nimi zgodności. Zatem, co trzeba zrobić? Otóż należy usunąć
obecnie zainstalowany wersję tej biblioteki wraz z pakietami, które jej
wymagają, są to dwa pakiety XFCE. Nie należy usuwać pakietów, już
niepotrzebnych, ponieważ za chwilę będą one znów potrzebne. Zapisujemy
sobie te pakiety (prawdopodbnie będą to:
xfce4-goodies oraz xfce4-sensors-plugin), ponieważ
będziemy je instalować ponownie, kiedy uzyskamy odpowiednią wersję
wspomnianej biblioteki. Po usunięciu pakietów, tymczasowo zmieniamy
wersję dystrybucji, z Bookworm na Bullseye (dla repozytorium
main). Instalujemy naszą
bibiotekę, następnie wracamy z powrotem do wersji Bookworm dla
repozytrium głównego. Teraz możemy zainstalować ponownie te dwa pakiety
oraz pakiet nvidia-settings. Poniżej przedstawiłem wyżej
wymieniony opis w postaci poleceń.
(chroot)/$ sed -i 's/Bookworm/Bullseye/g' /etc/apt/sources.list; (chroot)/$ apt remove libxnvctrl0 -y (chroot)/$ apt update (chroot)/$ apt install libxnvctrl0 -y (chroot)/$ sed -i 's/Bullseye/Bookworm/g' /etc/apt/sources.list; (chroot)/$ apt install xfce4-goodies xfce4-sensors-plugin nvidia-settings
Teraz rootfs jest gotowy do pakowania. Zanim jednak do tego przystąpimy, warto posprzątać po sobie, aby nie zaśmiecać niepotrzebnie obrazu. Następnie musimy odmontować zamontowane interfejsy systemowe. Do pakowania wykorzystamy polecenie mksquashfs.
(chroot)/$ apt-get clean (chroot)/$ apt-get autoclean (chroot)/$ apt-get autoremove (chroot)/$ history -c (chroot)/$ Ctrl+d 0.1.7$ for i in /dev/pts /dev /proc /run /sys; do sudo umount tmp${i}; done 0.1.7$ sudo mksquashfs tmp/ filesystem.squashfs -e boot
Ze względu na to iż sterowniki do moduły jądra, które mogą ładowane w niekoniecznie znanym nam momencie, warto było by przenieść na dysk docelowy także obraz jądra oraz obraz initrd.
0.1.7$ sudo cp tmp/boot/vmlinuz-6.1.0-7-amd64 vmlinuz 0.1.7$ sduo cp tmp/boot/initrd.img-6.1.0-7-amd64 initrd
Te trzy pliki kopiujemy na dysk. Po skopiowaniu możemy uruchomić system i sprawdzić czy wszytko jest działa. Zainstalowany sterownik z Debian 11, działa prawidłowo na Debian 12. Po wykonaniu dodatkowych czynności w systemie obecny jest również program nvidia-settings, jednak dla tej karty nie posiada on zbyt wielu opcji lub najzwyczajniej nie działa. Mimo to jeśli posiadamy komputer z tym układem, to warto wykonać te czynności, aby nie doświadczać wielu irytujących błędów substytutu sterownika, takich jak screen tearing czy jeszcze bardziej denerwującego restartu serwera X11 podczas odblokowywania sesji po wyłączeniu ekranu ze względu na brak aktywności.
~xf0r3m