DKMS

A Wikipédiából, a szabad enciklopédiából

A Dynamic Kernel Module Support egy olyan eszköz/módszer linuxban, amivel külső (az adott disztribúcióhoz nem tartozó) forrásprogramokból kernel-modulokat lehet előállítani. A kernel (rendszermag) magasabb megbízhatósági szinten fut, mint az ún. userspace programok: olyan utasításokat is végrehajthat, melyeket az utóbbiak nem. Ilyen utasítások szükségesek a hardver eszközök (pl. diszk, hálózat) közvetlen kezeléséhez.

A userspace programok rendszerhívásokkal férnek hozzá a kernel szolgáltatásaihoz. A DKMS kernel-modulok a kernelt bővítik a hivatalos kernelfán kívüli szolgáltatásokkal.

Példák DKMS-t használó alkalmazásokra: ZFS fájlrendszer, VirtualBox(en), geoIP(en) adatbázis.

A DKMS-t a Dell fejlesztette ki az eszközkezelő-javítások gyorsabb telepítésére. Ezáltal nem kellett megvárni, amíg a javítás bekerül a hivatalos kernelfába, a felhasználóknak pedig nem kellett a modulfordítással vesződniük.

A DKMS telepítése[szerkesztés]

A Linux-disztribúciók bináris programcsomagban terjesztik a DKMS-t. Debianban és Fedorában a csomag neve egyaránt dkms.

A kernelmodul előállításához a szokásos, bináris formában terjesztett kernel esetén szükség van a kernel headerfájljaira.[1] A headereket tartalmazó csomag automatikusan települ a dkms installálásakor.

A másik lehetőség a teljes kernelforrás (saját kernel fordítására használják): ez a headerfájlokat is tartalmazza.

Új bináris kernel installálásakor a DKMS lefordítja a külső kernelmodulokat az új kernelhez. Forrásból fordított kernel esetén kézzel kell a kernelmodulokat lefordítani.[2]

A DKMS használata[szerkesztés]

A DKMS-t használó csomagok telepítéskor automatikusan lefordítják a nekik szükséges kernel-modulokat, így a dkms utasítás használatára csak hiba esetén van szükség. A két legfontosabb alparancs:

dkms status

kiírja a DKMS adatbázisában szereplő kernel-modulokat, azok verzióját, és a kernelek verzióját és architektúráját, amiben a modult lefordította. Példa:

zfs, 0.6.5.9, 4.9.0-7-amd64, x86_64: installed
zfs, 0.6.5.9, 4.9.113-ber, x86_64: installed
zfs, 0.6.5.9, 4.9.113-gylap, x86_64: installed
dkms install modul/modulverzió -k kernelverzió

lefordítja és felinstallálja a megadott modult a megadott kernelverzió számára. Például:

dkms install zfs/0.6.5.9 -k 4.9.100-gylap

A DKMS adatbázisa[szerkesztés]

Az adatbázist a /var/lib/dkms alatti, meghatározott könyvtárszerkezetben tárolt fájlok adják. Az egyes modulok külön könyvtárban vannak. Pl.:

-rw-r--r-- 1 root root    6 Aug 31  2016 dkms_dbversion
drwxr-xr-x 3 root root 4096 Jul 19 18:37 spl
drwxr-xr-x 3 root root 4096 Jul 19 17:59 virtualbox
drwxr-xr-x 3 root root 4096 Jul 20 00:16 xtables-addons
drwxr-xr-x 3 root root 4096 Jul 19 16:13 zfs

Egy könyvtár a modul verzióit tartalmazza (linuxban egyet), és szimbolikus linkeket a verziófüggő modulkönyvtárakra. Pl. a zfs könyvtár tartalma:

drwxr-xr-x 5 root root 4096 Jul 19 16:13 0.6.5.9
lrwxrwxrwx 1 root root   28 Jul 19 16:13 kernel-4.9.0-7-amd64-x86_64 -> 0.6.5.9/4.9.0-7-amd64/x86_64
lrwxrwxrwx 1 root root   26 Jul 19 09:16 kernel-4.9.113-ber-x86_64 -> 0.6.5.9/4.9.113-ber/x86_64
lrwxrwxrwx 1 root root   28 Jul 19 02:59 kernel-4.9.113-gylap-x86_64 -> 0.6.5.9/4.9.113-gylap/x86_64

0.6.5.9-ben a már említett modulkönyvtárakon kívül a modul forrásprogramjára mutató szimbolikus link található:

drwxr-xr-x 3 root root 4096 Jul 19 16:13 4.9.0-7-amd64
drwxr-xr-x 3 root root 4096 Jul 19 09:16 4.9.113-ber
drwxr-xr-x 3 root root 4096 Jul 19 02:59 4.9.113-gylap
lrwxrwxrwx 1 root root   20 Jul 19 02:56 source -> /usr/src/zfs-0.6.5.9

A modulkönyvtárban minden architektúra külön könyvtárban van.[3] A 4.9.0-7-amd64/x86_64/ tartalma például:

-rw-r--r-- 1 root root 80984 Jul 19 16:13 Module.symvers
drwxr-xr-x 2 root root  4096 Jul 19 16:13 log
drwxr-xr-x 2 root root  4096 Jul 19 16:13 module
-rw-r--r-- 1 root root 12242 Jul 19 16:13 zfs_config.h

A log alatt vannak a fordítás közben keletkezett információk, module alatt a lefordított modulok, melyek az installálás során a /lib/modules/kernelverzió/updates/dkms (fedorában a /lib/modules/kernelverzió/extra/dkms) könyvtár alá másolódtak.

Jegyzetek[szerkesztés]

  1. A kernelt C nyelven írták meg, a .h kiterjesztésű fájlokat nevezik headereknek.
  2. Kivéve, ha a fordítás eredménye a bináris kernelcsomag, pl. a debian kernel-package csomagjával fordított kerneleknél. Ilyenkor a bináris kernelcsomag installálásakor automatikusan lefordulnak a DKMS-modulok.
  3. A gcc nevű C-fordító lehetővé teszi a fordítást az éppen használttól eltérő architektúra számára. Ez az ún. keresztfordítás.

Források[szerkesztés]