Genkernel
- Article must be updated for genkernel-4 in general
- Add documentation for --boot-font feature
- Add documentation for --bcache feature
- Add documentation for gk.keep feature (including /etc/initramfs.mounts)
A genkernel karbantartása megszűnt. Az itt bemutatott dokumentáció lehet, hogy hiányos, és nem tükrözi a Gentoo eszköztárának jelenlegi állapotát. Azok a felhasználók, akik genkernel problémákba ütköznek, egy másik szoftver használatára lesznek felszólítva. Kérjük, tekintse meg a kézikönyv Terjesztési (Disztribúció) kernelek szakaszát egy támogatott alternatíváért.
A genkernel egy Gentoo által készített szoftvereszköz, amelyet a bináris futtatható kernel és bináris futtatható initramfs képfájlok létrehozási folyamatának automatizálására terveztek. Néhány általános jellemzője:
- A kernel forráskódok beállítása.
- A tömörített bináris kernelképfájl bzImage létrehozása és másolása a /boot könyvtárba.
- Egy initramfs bináris képfájl létrehozása és másolása a /boot könyvtárba.
- Szimbolikus linkek létrehozása a /boot könyvtárban.
- Egyedi tartalmak hozzáadása az initramfs bináris képfájlhoz, például titkosítással kapcsolatos fájlok, indítóképernyőn megjelenő képek, extra modulok és egyebek.
- A bootloader beállítása az újonnan létrehozott kernel és initramfs indításához.
Az újabb UEFI rendszerek esetén a /boot helyett a /efi használatához tekintse meg a Changing the boot directory to /efi leírást.
Gyakori tévhit, hogy a genkernel "automatikusan" létrehoz egy egyedi kernelbeállítást. A genkernel automatizálja a kernel létrehozási (felépítési) folyamatát és összeállítja a bináris initramfs képfájlt, de nem hoz létre egyedi kernelbeállítás fájlt. Ha nincs megadva kernelbeállítás, akkor a genkernel egy általános kernelbeállítás fájlt használ, amely általános célú kernelt eredményez, amely alkalmas mindennapi használatra (nagyméretű moduláris kernel árán).
Ugyanez igaz a genkernel initramfs képfájljára is: Elsődleges feladata, hogy csak az alapvető dolgokat hozza létre, amelyek szükségesek egy (blokk) eszköz felcsatolásához, amely tartalmazza a gyökérfájlrendszert, hogy a lehető leggyorsabban átadhassa az irányítást az igazi rendszernek.
Telepítés
USE jelölőzászlók
USE flags for sys-kernel/genkernel Gentoo automatic kernel building scripts
Emerge
Indítsa el a genkernel telepítését:
root #
emerge --ask sys-kernel/genkernel
Használat
A genkernel futtatásának az általános formája a következő:
root #
genkernel [options ...] action
Opciók
A genkernel tényleges működése számos különféle beállítástól függ, amelyek többsége a /etc/genkernel.conf fájlban állítható be vagy törölhető, vagy a genkernel parancs segítségével minden meghívás során megadható. A parancssoron keresztül megadott opciók elsőbbséget élveznek a /etc/genkernel.conf fájlban meghatározott opciókkal szemben. A beállításfájl rendkívül jól dokumentált, azonban a leggyakrabban használt opciók közül néhányat ebben a cikkben tárgyalunk. A cél az, hogy az olvasó megismerje a gyakori genkernel meghívásokat. A teljesebb magyarázatok érdekében tekintse meg a /etc/genkernel.conf fájlban található megjegyzéseket vagy a man genkernel kimenetét.
Néhány opció rendelkezik egy változattal, amely ellentétes működést vált ki, és
--[no-]option_name
formában van feltüntetve, az ellentétes hatás pedig szögletes zárójelben jelenik meg, az alábbi példában:
--[no-]menuconfig : Activates [deactivates] ...
no-
és annak hatása (amely ebben az esetben nem opcionális) szögletes zárójelek nélkül van feltüntetve.Opciók hatása a felhasználói interakcióra
Az alább felsorolt beállítási lehetőségek segítenek a felhasználónak eldönteni, hogy miként lépjen kapcsolatba a beállítási folyamattal. A felhasználók még azt is eldönthetik, hogy a folyamat során létrehozott beállításfájlt el kell-e menteni. Az alábbiak elsődleges beállítási lehetőségeknek számítanak:
--config=/path/to/genkernel.conf
- A genkernel beállításfájljára mutat, amelyet használni kell (alapértelmezés szerint: /etc/genkernel.conf).
--kernel-config=/path/to/kernel.config
- A használni kívánt kernelbeállítás fájlra mutat. Az aktuálisan futó kernel beállításának újrahasználatához megadható a /proc/config.gz, ha létezik. Alapértelmezés szerint a genkernel az előzőleg létrehozott ugyanazon kernelverzió beállítását használja, vagy ha nincs előző beállítás, akkor egy alapértelmezett kernelbeállítást használ. A default speciális érték használatával kényszeríthető a genkernel általános kernelbeállításának a használata. Ez a hely nem lehet /usr/src/linux/.config, mivel elveszhet, vagy hibákat okozhat.
--[no-]menuconfig
- Aktiválja (vagy deaktiválja) a make menuconfig parancsot (amely egy interaktív beállításmenüt hív elő), mielőtt a bináris kernelképfájl létrehozása megkezdődne.
--gconfig
- Egy kernelbeállítási eszközt biztosít, amely a GTK könyvtáraktól függ. Az előnye ennek az opciónak, hogy a legtöbb felhasználó könnyebbnek és érthetőbbnek találja a kernel beállítását ezen eszköz használatával, mivel az az X-ablakrendszerre támaszkodik. Az hátránya ennek az opciónak, hogy az X-ablakrendszer szükséges a használatához, tehát parancssorban nem működik.
--xconfig
- Egy kernelbeállítási eszközt biztosít, amely a QT könyvtáraktól függ. Az előnye ennek az opciónak, hogy a legtöbb felhasználó könnyebbnek és érthetőbbnek találja a kernel beállítását ezen eszköz használatával, mivel az az X-ablakrendszerre támaszkodik. Az hátránya ennek az opciónak, hogy az X-ablakrendszer szükséges a használatához, tehát parancssorban nem működik.
--[no-]save-config
- Elmenti [vagy nem menti el] a kernel beállítását egy fájlba a /etc/kernels könyvtárban későbbi használatra.
--kernel-append-localversion=-mycfg42
- Lehetővé teszi a kernel LOCALVERSION értékének módosítását, amely hatással lesz a kernel és az initramfs fájlnevére a /boot könyvtárban, valamint a modulokra a /lib/modules/ könyvtárban. Ez különösen hasznos egy új, önálló revízió létrehozásához, saját kernel binárissal, initramfs fájlal és modulokkal. A fentebbi példa alapján, a =sys-kernel/gentoo-sources-5.4.2 esetén a amd64 architektúrával és alapértelmezett beállításokkal a következőket hozná létre: /boot/vmlinuz-5.4.2-gentoo-x86_64-mycfg42, /boot/initramfs-5.4.2-gentoo-x86_64-mycfg42.img és /lib/modules/4.19.88-gentoo-x86_64-mycfg42.
Opciók hatása a létrejövő rendszerre
Az itt felsorolt beállítási lehetőségek meghatározzák, hogy a létrejövő bináris kernelképfájlban és initrd/initramfs bináris képfájlban mely funkciók lesznek engedélyezve vagy tiltva.
--[no-]splash
- Aktiválja (vagy deaktiválja) a Fbsplash framebuffer splash támogatását a genkernel által létrehozott initrd bináris képfájlon. Az fbsplash által használt alapértelmezett téma felülbírálásához használja a
--splash=PreferredTheme
opciót (ahol aPreferredTheme
a /etc/splash könyvtáron belüli egyik könyvtár neve). --splash-res=PreferredResolution
- Ez az opció lehetővé teszi annak kiválasztását, hogy mely indítóképernyő-felbontások legyenek támogatottak az initrd bináris képfájlban a rendszer indításakor. Ez két okból hasznos. Először is, lehetőség nyílik csak a rendszerhez kapcsolódó indítóképernyő-felbontások kiválasztására. Másodszor, elkerülhető az initrd által igényelt lemezterület felesleges növekedése (mivel az initrd fájlnak nem kell támogatnia a rendszer beállításához nem releváns felbontásokat). Azonban ezt az opciót célszerű elhagyni, ha a kernelt telepítő CD lemezhez állítják össze, mivel ez lehetővé teszi az indítóképernyő minden lehetséges felbontásának támogatását.
--do-keymap-auto
- Kényszeríti a billentyűzetkiosztás kiválasztását az indítási folyamat során.
--keymap
- Aktiválja a billentyűzetkiosztás kiválasztását indításkor (például LUKS konténer jelszó megadásához). A kívánt billentyűzetkiosztás az indítási opciókban adható meg
keymap
értékeként (a billentyűzetkiosztás fájl neve ".map" nélkül). Az elérhető billentyűzetkiosztási fájlok megtalálhatók a /usr/share/genkernel/defaults/keymaps/ könyvtárban. - Ha egy szükséges billentyűzetkiosztás nem érhető el a genkernelben, akkor lehetőség van az egyik meglévő sys-apps/kbd billentyűzetkiosztás (ami a /usr/share/genkernel/defaults/keymaps/ elérhető) konvertálására a
loadkeys --bkeymap
parancs segítségével. További részletekért tekintse meg a loadkeys man súgóját. --lvm
- Tartalmazza az adathordozó támogatást a Logical Volume Management (LVM2) számára statikus bináris fájlok segítségével, ha az elérhető a rendszeren. Ha nem állnak rendelkezésre releváns (statikus) LVM2 bináris fájlok, akkor azok le lesznek fordítva. Az opció engedélyezése előtt győződjön meg arról, hogy telepítve van a sys-fs/lvm2 szoftvercsomag az operációs rendszeren (emerge sys-fs/lvm2), majd tekintse át a Gentoo wiki LVM cikkét.
--dmraid
- Tartalmazza a DMRAID támogatását, az eszközt, amely RAID leképezéseket hoz létre a kernel eszköz-leképezési alrendszer segítségével. A DMRAID felismeri, aktiválja, deaktiválja és megjeleníti a szoftver RAID készletek (például ATARAID) és a bennük található DOS partíciók tulajdonságait.
--luks
- Tartalmazza a Linux Unified Key Setup vagy LUKS támogatását. Ez lehetővé teszi egy olyan adathordozó használatát, amelyet LUKS titkosított, és amely tartalmazza a root fájlrendszert. A bootloadernél a titkosított adathordozót állítsa be
crypt_root
értékeként, míg aroot
az a nem titkosított adathordozó lesz, amelyet a LUKS létrehoz (például: /dev/mapper/root lesz a felcsatolandó útvonal, és a helyes bootloader paraméterek sora így nézhet ki:GRUB_CMDLINE_LINUX="... crypt_root=UUID=<crypto_LUKS uuid> root=/dev/mapper/root ..."
). --iscsi
- iSCSI támogatást ad az initrd bináris képfájlhoz.
--multipath
- Multipath támogatást ad az initrd bináris képfájlhoz.
--linuxrc=/path/to/the/linuxrc_file
- Megad egy felhasználó által létrehozott linuxrc-t — egy olyan szkriptet, amely a kernel indítási szakaszában inicializálódik, az aktuális boot folyamat előtt. Egy alapértelmezett linuxrc szkript megtalálható a /usr/share/genkernel/ könyvtárban. Ez a szkript lehetővé teszi egy kis, modularizált kernel indítását, megpróbálja betölteni a rendszer számára szükséges legkevesebb mennyiségű illesztőprogramot (kernelmodulok formájában).
--cachedir=/path/to/alt/dir
- Felülírja az alapértelmezett gyorsítótár helyét a kernel forráskódjának a bináris kódra történő fordítása közben.
--tmpdir=/path/to/new/tempdir
- Megadja annak az ideiglenes könyvtárnak a helyét, amelyet a genkernel a kernel forráskódjának a fordítása közben használ.
--unionfs
- Támogatást nyújt a Unification File System számára az initrd bináris képfájlon belül.
--mountboot
- Érzékeli, hogy a /boot könyvtárat külön partícióra kell-e felcsatolni. Ellenőrzi az /etc/fstab szkriptet, hogy hogyan kell (ha szükséges) a boot partíciót a fájlrendszerre felcsatolni.
--microcode
- Létrehoz egy korai cpio fájlt, amely Intel/AMD processzorok mikrokódját tartalmazza a Xen és a Linux korai mikrokód támogatásához.
Létrehozáshoz használt eszközök kiválasztására ható opciók
A következő opciókat a genkernel támogatja, és a bináris kernelképfájl létrehozása közben továbbítja a releváns alkalmazásoknak. Ezek az opciók hatással vannak az alacsony szintű kernelfordító eszközökre.
--kernel-cc=someCompiler
- Meghatározza a kernel forráskódjának fordítási folyamatában használt fordítót.
--kernel-ld=someLinker
- Meghatározza a kernel forráskódjának fordítási folyamatában használt linkert.
--kernel-as=someAssembler
- Meghatározza a kernel forráskódjának fordítási folyamatában használt assembler programot.
--kernel-make=someMake
- Meghatároz egy alternatívát a GNU make segédprogramhoz, amelyet a kernel forráskódjának a fordítása során használnak.
--utils-cc=someCompiler
- Meghatározza a segédprogramok forráskódjának fordítása során használt fordítót.
--utils-ld=someLinker
- Meghatározza a segédprogramok forráskódjának fordítása során használt linkert.
--utils-as=someAssembler
- Meghatározza a segédprogramok forráskódjának fordítása során használt assembler programot.
--utils-make=someMake
- Meghatároz egy alternatívát a GNU make segédprogramhoz, amelyet a segédprogramok forráskódjának fordítása során használnak.
--makeopts=-jX
- Meghatározza a párhuzamos szálak számát, amelyeket a make segédprogram alkalmazhat a kernel (és segédprogramok) forráskódjának fordítása során. Az
X
változó egy szabadon választott szám, bár a leggyakoribb értékeket a rendszer által használt processzormagok számához egyet (1) hozzáadva kapjuk, vagy egyszerűen a rendszer processzormagjainak számát használjuk. Például egy egy processzormagos rendszer esetén a leggyakoribb opció értékek-j2
vagy-j1
, két processzormagos rendszer esetén pedig-j3
vagy-j2
opciókat alkalmazunk stb. (Egy processzorral rendelkező rendszer, amely támogatja a Hyper-Threading™ (HT) technológiát, feltételezhetően 2 maggal rendelkezik, feltéve, hogy a Symmetric Multi-Processing (SMP) támogatás engedélyezve van a kernelben.)
Forráskód kódfordítási folyamatára ható opciók
A következő opciók általában a tényleges fordítás során lépnek érvénybe:
--kerneldir=/path/to/sources/
- Megad egy alternatív kernelforráskód helyet, eltérően az alapértelmezett /usr/src/linux/ helytől.
--kernel-config=/path/to/config-file
- Meghatározza, hogy mely kernelbeállítást kell használni. Alapértelmezés szerint a genkernel megállapítja a kernel verzióját, amelyet a
--kerneldir
jelöl meg, és megkeresi a kernelbeállítást (KV) a /etc/kernels/kernel-config-$KV helyen. Ha nem található kernelbeállítás, akkor a genkernel egy általános kernelbeállítást keres a /usr/share/genkernel/$ARCH helyen. Egy speciálisdefault
érték használható arra, hogy kényszerítse a genkernel általános kernelbeállításának a használatát.Tip
Használja a--kernel-config=/proc/config.gz
opciót egy új kernel létrehozásának a megkezdéséhez az aktuálisan futó kernel kernelbeállítása alapján.
Megjegyzés: Ez csak akkor működik, ha az aktuálisan aktív kernelCONFIG_IKCONFIG=y
beállítással lett létrehozva, amely általában így van. --module-prefix=/path/to/prefix-directory/
- Meghatároz egy előtagot ahhoz a könyvtárhoz, ahová a kernelmodulok telepítve lesznek (alapértelmezett útvonal a /lib/modules könyvtár).
--[no-]clean
- Aktiválja (vagy deaktiválja) a make clean parancsot a kernel forráskódjának a kódfordítása előtt. A make clean parancs eltávolítja az összes objektumfájlt és szoftverfüggőséget a kernel forrásfájlfájából.
--[no-]mrproper
- Aktiválja (vagy deaktiválja) a make mrproper parancsot a kernel fordítása előtt. Az előzőleg említett make clean parancshoz hasonlóan a make mrproper eltávolítja az összes objektumfájlt és szoftverfüggőséget a kernel forrásfájlfájából. Azonban minden korábbi beállításfájl (a /path/to/sources/.config vagy a /path/to/sources/.config.old helyen) is törlésre kerül a kernel forrásfájlfájából. Ha nem kívánatos, hogy a kernel .config fájlja folyamatosan eltűnjön, akkor feltétlenül tiltsa le ezt az opciót!
--oldconfig
- Kiadja a make oldconfig parancsot, amely megkísérli összegyűjteni a rendszer architektúrájának beállítási információit egy általános szkripttől a /usr/share/genkernel helyről. Ez egy nem interaktív folyamat, a felhasználótól nem fogad bemenetet. Továbbá, ha a
--oldconfig
opciót a--clean
opcióval együtt használják, akkor az utóbbi opció érvénytelenítve lesz, és aktiválódik a--no-clean
opció. --[no-]module-rebuild
- Futtatja, vagy nem futtatja az emerge @module-rebuild parancsot annak érdekében, hogy a kernel és a kernelmodulok elkészülte után külső modulokat hozzon létre. Ez az opció alapértelmezés szerint engedélyezve van.
--callback="echo hello"
- Meghívja a megadott argumentumokat (jelen esetben echo hello), miután a kernel és a releváns kernelmodulok létrejönnek, de még az initramfs képfájl létrejötte előtt. Note
A genkernel-4 előtt ezt a visszahívást külső modulok újbóli létrehozásának a kiváltására használták. A genkernel-4 óta egy dedikált parancssori paramétert, a--module-rebuild
opciót vezették be. Részletek fentebb. --[no-]install
- Aktiválja (vagy deaktiválja) a make install parancsot, amely telepíti az új kernelképfájlt, beállításfájlt, initrd képfájlt és rendszerleképezést a boot partícióra. Minden lefordított modul is telepítésre kerül. Alapértelmezés szerint a genkernel megkísérli felcsatolni a /boot partíciót, ha az külön partíción van, mielőtt futtatná a telepítési parancsot.
--no-ramdisk-modules
- Tartózkodik attól, hogy bármilyen kernelmodult másoljon a genkernel által létrehozott initrd képfájlra. Ez az opció kivételt képez a
no-
előtag szabálya alól. Ennek az előtagnak az elhagyása érvénytelen genkernel opciót eredményez. --all-ramdisk-modules
- Az összes elérhető kernelmodult lemásolja a genkernel által létrehozott initrd képfájlra.
--genzimage
- Létrehozza az initrd képfájlt, a kernel képfájl előtt (ez a hack jelenleg csak PPC Pegasos rendszerekre vonatkozik).
Hibakeresési opciók
A kernel kódfordítási folyamat során használt hibakeresési opciók szabályozzák a jelentett információ mennyiségét, valamint az említett adatok bemutatását.
--loglevel=<0|1|2|3|4|5>
- Szabályozza a genkernel által nyomtatott információk részletességi szintjét. A
LOGLEVEL
változó egy 0 és 5 közötti egész szám. A '0' szint minimális kimenetet jelent (=nincs kimenet), míg az '5' a lehető legtöbb információt biztosítja a genkernel tevékenységeiről a kernel kódfordítási és az initramfs képfájl létrehozási folyamat során.Note
A genkernel alapértelmezés szerint mindig teljes kimenetet naplóz a /var/log/genkernel.log fájlba. A--loglevel
csak a képernyőn megjelenő kimenetet szabályozza. --logfile=/path/to/output_file
- Naplófájl, ahová a genkernel alapértelmezés szerint kimenetet ír. Alapértelmezett érték: /var/log/genkernel.log.
--[no-]color
- Aktiválja (vagy deaktiválja) a színes kimenetet.
--[no-]cleanup
- Aktiválja (vagy deaktiválja) a teljes futás utáni takarítást hibakeresési célokra.
Műveletek
A parancssoron keresztül megadott művelet a genkernel [options …] action segítségével megadja, hogy a genkernel milyen műveletet hajtson végre. A következő műveletek támogatottak:
Művelet | Leírás |
---|---|
all | Létrehozza az összes szakaszt. Initrd bináris képfájlt, a bináris kernelképfájlt és a bináris kernelmodulokat. |
bzImage | Kizárólag a bináris kernelképfájlt hozza létre. |
kernel | Kizárólag a kernelképfájlt és a modulokat hozza létre. |
initramfs | Kizárólag az initramfs/ramdisk bináris képfájlt hozza létre. |
ramdisk | Kizárólag az initramfs/ramdisk bináris képfájlt hozza létre. |
Beállítás
Kezdeti lépések
Bár több módja van a genkernel futtatásának, a legtöbb felhasználó számára ajánlott legkevésbé invazív megközelítést a genkernel all biztosítja. Ebben az esetben egy általános beállítást használnak, amely a legtöbb rendszerben jól működik. Mint korábban említettük, ez a megközelítés nem mentes a hátrányoktól, így az elkészített modulok többsége haszontalan az átlagfelhasználó számára, és növelheti a kódfordítási időt. Az alábbiakban bemutatjuk egy hatékonyabb megközelítést, amelyet bizonyos opciók root jogosultságú genkernel számára való átadásával érhetünk el:
root #
genkernel --luks --no-install --no-clean --menuconfig all
A fenti művelet eredményeként a genkernel létrehoz egy kernelt, amely képes megnyitni LUKS és LUKS2 titkosított köteteket, lefordítja és beágyazza a cryptsetup szoftvert az initramfs bináris képfájlba (--luks
), és mind a kernelképfájlt, mind az initramfs képfájlt manuálisan kell telepíteni (--no-install
). A kernel forráskódfájlfájának előkészítése során a genkernel tartózkodik attól, hogy kitisztítson bármilyen előzetesen meglévő objektumfájlt a forráskódfájlban (--no-clean
). Egy menü vezérelt kernel-beállító eszköz fog megjelenni, amely lehetővé teszi a felhasználó számára, hogy kiválassza, mely kernelmodulok jöjjenek létre a rendszer számára (--menuconfig
).
Ha a --symlink
opció meg van adva, akkor a --no-install
opció --install
opcióval történő helyettesítése lehetővé teszi a genkernel számára, hogy automatikusan telepítse az új kernelt a /boot könyvtárba, és szimbolikus linkeket hozzon létre. A --mountboot
opció használatával a genkernel automatikusan felcsatolhatja a /boot partíciót, amennyiben ez szükséges.
Ne felejtse el, hogy a /etc/genkernel.conf fájlt a genkernel parancs induláskor beolvassa, és minden ott meghatározott opció alkalmazásra kerül, kivéve, ha egy parancssori opció elsőbbséget élvez vele szemben.
Boot könyvtár megváltoztatása /efi könyvtárra
Most ajánlott az UEFI rendszer boot partíciót (ESP) a /efi alá csatolni a /boot helyett.
Alapértelmezés szerint a kernel a /boot könyvtárba kerül, amely bizonyos beállításokban korábban az ESP volt, de most a gyökérpartíción található. Az okok, amelyek miatt érdemes a kernelt a /efi könyvtárba írni, a következők lehetnek:
- A Secure Boot egy előre megadott ESP kernel útvonalat vár el.
- A GRUB2 függetlenné tétele a gyökérpartíciótól a stabilitás vagy biztonság érdekében.
- A GRUB2 nem támogatja a gyökérfájlrendszert (bcachefs).
- A grub-mkconfig által nem generált grub.cfg használata.
A genkernel a /efi helyre való mutatásához adja hozzá a --bootdir=/efi
opciót a genkernel
parancshoz, vagy a BOOTDIR="/efi"
beállítást a /etc/genkernel.conf fájlhoz.
/etc/genkernel.conf
Boot könyvtár megváltoztatása /efi könyvtárra az /etc/genkernel.conf fájlban# Állítsa be a boot könyvtárat. Alapértelmezett érték a /boot könyvtár.
BOOTDIR="/efi"
Kernel módosítása
Az első lépés az, hogy engedélyezze a make menuconfig indítását az /etc/genkernel.conf fájlban:
/etc/genkernel.conf
Beállításmenü használatának kényszerítése az /etc/genkernel.conf fájlban# Fut-e a 'make menuconfig', mielőtt lefordítja ezt a kernelt?"
MENUCONFIG="yes"
Fájlkezelés
A genkernel használata során a felhasználónak tisztában kell lennie a kernel beállítással és a bináris kernelképfájlok kezelésével kapcsolatos néhány szemponttal, valamint azzal, hogy miként kezeli a rendszer a kernelforráskódokat.
Forráskód fájlok
A emerge -u gentoo-sources parancs kiadása után egy könyvtár jön létre a /usr/src/ alatt az új források tárolására. Általában az aktív kernel forráskönyvtárra a /usr/src/linux szimbolikus link mutat.
A /usr/src könyvtár például így nézhet ki:
user $
ls -l /usr/src
total 24 drwxr-xr-x 6 root root 4096 Dec 16 00:56 . drwxr-xr-x 12 root root 4096 Dec 15 12:42 .. -rw-r--r-- 1 root root 0 Mar 19 2015 .keep lrwxrwxrwx 1 root root 22 Dec 16 00:56 linux -> linux-5.3.14-gentoo-r1 drwxr-xr-x 26 root root 4096 Nov 24 03:33 linux-4.19.85-gentoo drwxr-xr-x 27 root root 4096 Dec 9 15:10 linux-4.19.88-gentoo drwxr-xr-x 27 root root 4096 Dec 16 00:51 linux-4.19.89-gentoo drwxr-xr-x 25 root root 4096 Dec 16 00:58 linux-5.3.14-gentoo-r1
A /usr/src/linux szimbolikus linket többféleképpen lehet megváltoztatni.
- Ha a
symlink
USE jelölőzászló engedélyezve van, akkor a /usr/src/linux szimbolikus link automatikusan frissül, hogy az újonnan letöltött forráskódokra mutasson.
- Ha a
symlink
USE jelölőzászló nincs engedélyezve, akkor a felhasználó megváltoztathatja a szimbolikus link célpontját az eselect kernel list, majd az eselect kernel set parancs használatával.
A genkernel mindig (kizárólagosan) a /usr/src/linux szimbolikus link által megadott forráskódokat fogja használni.
Kernel beállításfájl
Ha már lefutott egy kernel forráskód fordítás az aktív kernel forráskódokkal, akkor előfordulhat, hogy az /etc/kernels könyvtárban található egy fájl, amely tartalmazza azt a kernelbeállítást, amelyet az utolsó kernel bzImage létrehozásakor alkalmaztak. Ez a fájl például a következő néven szerepelhet: kernel-config-5.3.14-gentoo-r1-x86_64-wifitest2, ahol a x86_64
helyére a rendszer architektúrája kerülhet, a 5.3.14-gentoo-r1
helyére a használt források szoftvercsomag/verziója, a wifitest2
helyére pedig a LOCALVERSION felhasználó által hozzáfűzött értéke kerülhet.
Ez a kernel-config-5.3.14-gentoo-r1-x86_64-wifitest2 fájl szolgál kiinduló beállításként a genkernel --menuconfig all futtatásakor.
Ha először futtatja a genkernel szoftvert az új kernel forráskódokkal, vagy ha az előző eredményt nem mentette el, akkor ezt a fájlt egy alapértelmezett beállításfájl helyettesíti, amely a usr/share/genkernel/arch/x86_64/generated-config könyvtárban található, ahol az x86_64 helyébe az aktuális architektúra lép.
Az alapértelmezett beállításfájl elérési útja módosítható a DEFAULT_KERNEL_CONFIG változó beállításával az /etc/genkernel.conf fájlban.
Lefordított beállítás mentése
Ha a --save-config
genkernel opció aktiválva van, akár a parancssorból, akár az /etc/genkernel.conf fájlban, akkor a lefordított kernel beállítás elmentésre kerül (a fent megadott néven) az /etc/kernels könyvtárba. Ugyanakkor a beállítás mentésre kerül a .config fájlba az /usr/src/linux könyvtárban, de ezt a fájlt nem lesz újra felhasználva a következő genkernel all futtatásakor.
Fontos tudni, hogy minden alkalommal, amikor a genkernel futtatásra kerül a
--save-config
opcióval, az /etc/kernels könyvtárban lévő beállításfájl felülíródik. Ezért erősen ajánlott ezt a fájlt egy új név alatt lemásolni mielőtt a genkernel futtatásra kerül, hogy megőrizhető legyen.Kernel és az initramfs bináris képfájlok telepítése a /boot könyvtárba
A --install
opció megadásával a genkernel parancs futtatásakor a genkernel telepíti a bináris kernelképfájlt és az bináris initramfs képfájlt a /boot könyvtárba. Az --install
kényelmes használatához állítsa be a következőt az /etc/genkernel.conf fájlban:
/etc/genkernel.conf
Kernel és az initramfs automatikus mentésének beállítása# BOOTDIR automatikus felcsatolása, ha az még nincs felcsatolva.
MOUNTBOOT="yes"
# Mentse el az új konfigurációt az /etc/kernels könyvtárba
# a fordítás sikeres befejezése után.
SAVE_CONFIG="yes"
# Készítsen szimbolikus linkeket a BOOTDIR-ben automatikusan.
SYMLINK="yes"
# Új kernel hozzáadása a grub bootloaderhez:
# Lehetséges értékek: empty/"no", "grub", "grub2"
BOOTLOADER="grub2"
- Az első paraméter önmagáért beszél.
- A második paraméter azt mondja meg a genkernel számára, hogy mentse el a lefordított kernelbeállítást az /etc/kernels könyvtárba.
- Az utolsó két opció arra utasítja a genkernel szoftvert, hogy automatikusan frissítse a grub beállítását. Gyakorlatban a következők történnek:
- Ha egy előző bináris kernelképfájl ugyanazzal a névvel már létezik, akkor a neve kiegészül a .old utótaggal. Ezzel egyidőben automatikusan létrejön egy kernel.old szimbolikus link, amely erre a régi kernel bináris képfájlra mutat.
- Az új bináris kernelképfájl a /boot könyvtárban átveszi bármelyik, ugyanazzal a névvel rendelkező bináris kernelképfájl helyét. Ha ez az első alkalom, hogy egy kernel lefordításra kerül, akkor automatikusan létrejön egy szimbolikus link, amely az új bináris kernelképfájlra mutat.
A genkernel --menuconfig all futtatása után a /boot könyvtár például így nézhet ki:
user $
ls -al /boot
total 69388 lrwxrwxrwx 1 root root 44 Dec 16 00:58 System.map -> System.map-5.3.14-gentoo-r1-x86_64-wifitest2 -rw-r--r-- 1 root root 3465443 Dec 9 15:05 System.map-4.19.88-gentoo-x86_64 -rw-r--r-- 1 root root 3465554 Dec 16 00:45 System.map-4.19.89-gentoo-x86_64 -rw-r--r-- 1 root root 3645309 Dec 15 16:07 System.map-5.3.14-gentoo-r1-x86_64 -rw-r--r-- 1 root root 3645309 Dec 15 16:07 System.map-5.3.14-gentoo-r1-x86_64.old -rw-r--r-- 1 root root 3645309 Dec 16 00:58 System.map-5.3.14-gentoo-r1-x86_64-wifitest2 drwxr-xr-x 2 root root 4096 Mar 21 2015 efi drwxr-xr-x 6 root root 4096 Dec 16 01:02 grub lrwxrwxrwx 1 root root 47 Dec 16 01:02 initramfs -> initramfs-5.3.14-gentoo-r1-x86_64-wifitest2.img -rw-r--r-- 1 root root 3631084 Dec 9 15:34 initramfs-4.19.88-gentoo-x86_64.img -rw-r--r-- 1 root root 3637148 Dec 16 00:54 initramfs-4.19.89-gentoo-x86_64.img -rw-r--r-- 1 root root 3670176 Dec 15 17:41 initramfs-5.3.14-gentoo-r1-x86_64.img -rw-r--r-- 1 root root 3669692 Dec 16 01:02 initramfs-5.3.14-gentoo-r1-x86_64-wifitest2.img -rw-r--r-- 1 root root 168960 Nov 16 19:10 intel-uc.img lrwxrwxrwx 1 root root 41 Dec 16 00:58 kernel -> vmlinuz-5.3.14-gentoo-r1-x86_64-wifitest2 -rw-r--r-- 1 root root 7509552 Dec 9 15:05 vmlinuz-4.19.88-gentoo-x86_64 -rw-r--r-- 1 root root 7509552 Dec 16 00:45 vmlinuz-4.19.89-gentoo-x86_64 -rw-r--r-- 1 root root 7784496 Dec 15 16:07 vmlinuz-5.3.14-gentoo-r1-x86_64 -rw-r--r-- 1 root root 7784496 Dec 15 16:07 vmlinuz-5.3.14-gentoo-r1-x86_64.old -rw-r--r-- 1 root root 7784496 Dec 16 00:58 vmlinuz-5.3.14-gentoo-r1-x86_64-wifitest2
Rendszerbetöltő (bootloader) beállítása
extlinux
TODO
GRUB Legacy
A következő szöveg a GRUB Legacy bootloaderről szól, amelyet 2019 februárjában eltávolítottak a Gentoo-ból. Ha csak lehetséges akkor kérjük, hogy migráljon a GRUB2 bootloaderre a lehető leghamarabb.
A bootloader beállításában bemutatott szimbolikus linkek használhatók arra, hogy még ha az új bináris kernelképfájl nem is indítható, akkor is a felhasználó még mindig elindíthatja az operációs rendszert a régi bináris kernelképfájl segítségével.
Annak érdekében, hogy a genkernel által biztosított kernel és initrd megfelelően működjön, adja meg a minimum információkat a rendszerbetöltő (bootloader) beállításfájljában:
- Adja hozzá a
root=/dev/sdaN
paramétert a kernelképfájlhoz továbbított kernelparaméterekhez, ahol a /dev/sdaN az gyökérpartícióra (root partícióra) mutat (azN
az adott partíció számát jelöli, ha létezik partíció). - Ha használ splash-t, akkor adjon hozzá egy megfelelő módvonalat, például
vga=0x317
a kernelhez továbbított paraméterekhez, és szintén adja hozzá asplash=verbose
vagysplash=silent
lehetőséget attól függően, hogy mennyi részletességet szeretne az boot folyamat során. - Adja hozzá az initrd információkat a bootloader igénye szerint. A részletekről, hogy miként teheti initrd-kompatibilissé a bootloadert, tekintse meg a Gentoo kézikönyv Bootloader beállítása fejezetét.
Íme, így nézhet ki a grub.conf fájl.
/boot/grub/grub.conf
Példa a grub.conf fájlra# This is a sample grub.conf for use with Genkernel, per the Gentoo handbook
# http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=1&chap=10#doc_chap2
# When not using Genkernel, see the handbook.
# Alternatively, see grub.conf.sample in the GRUB documentation.
default 0
timeout 5
splashimage=(hd1,0)/boot/grub/splash.xpm.gz
title Gentoo Linux
root (hd0,6)
kernel /boot/kernel initrd=/dev/ram0 root=/dev/sda7 rootfstype=ext4
initrd /boot/initramfs
title Gentoo Linux old kernel
root (hd0,6)
kernel /boot/kernel.old initrd=/dev/ram0 root=/dev/sda7 rootfstype=ext4
initrd /boot/initramfs.old
GRUB
TODO
systemd-boot
TODO
Munkafájlok megőrzése
A genkernel alkalmazás automatikusan menti a fájlokhoz végzett új módosításokat. Ha a korábbi módosításokat meg kell őrizni, akkor a következő lépéseket kell elvégezni.
- Az első megőrzendő fájl a kernel beállításfájl, amely a /etc/kernels/ elérési útvonalon található. Ha a forrás nem változott meg a kernel újrafordítása előtt, akkor a korábban használt név lesz alkalmazni ehhez a fájlhoz. Ezért az előző beállításfájl másik néven történő másolása segít megőrizni az információkat, miközben a fájl új beállítási kiindulópontjaként is elérhető marad.
- A második fontos dolog a már bootolható bináris kernelképfájl és bináris initramfs képfájlok megőrzése. Ennek megvalósítása a környezettől függ:
- Ha az utolsó lefordított kernel bootolható, akkor a genkernel futtatásakor ez a kernel (és hasonlóan az initramfs) képfájl át lesz nevezve vmlinuz-$KV.old névre, és létrejön egy új vmlinux-$KV bináris képfájl. Ez azt jelenti, hogy még akkor is, ha az új kernel nem bootolható, akkor is a felhasználók mindig képesek lesznek a régi kernel bootolására.
- Ha az utolsó lefordított kernel nem bootolható, és a forráskódok nem változtak meg azóta, hogy a felhasználó egy bootolható kerneltképfájlt elkészített, akkor a genkernel futtatása előtt először törölje az új kernelképfájlt, és távolítsa el a .old utótagot az utolsó bootolható bináris kernelképfájl nevéből. Enélkül, ha az újonnan fordított kernelképfájl másodjára sem bootolható, akkor a bootolható vmlinuz-$KV.old fájl törlésre kerül a nem bootolható vmlinuz-$KV képfájl átnevezése miatt, ami a felhasználónak egy bootolhatatlan rendszert eredményezhet. Ugyanezt az elvet alkalmazza az initramfs képfájl esetében is.
A genkernel-4 óta ajánlott új, független verziókat létrehozni, mindegyikhez saját bináris kernelképfájllal használva, bináris initramfs képfájllal és a /lib/modules könyvtárban telepített kernelmodulokkal a genkernel --kernel-append-localversion=-my-new-revision all parancs használatával.
Korábbi kernelbeállítás használata a forráskódok módosítása közben
A korábbi beállítás a /etc/genkernel.conf fájlban található MENUCONFIG változón keresztül használható az alábbiak szerint:
/etc/genkernel.conf
A make menuconfig beállítása# Futtassa a 'make menuconfig' parancsot a kernel kódfordítása előtt.
MENUCONFIG="yes"
Nincs szükség manuálisan futtatni a make oldconfig parancsot a genkernel használatakor, még akkor sem, ha a forráskódok megváltoztak. Ennek oka, hogy a make menuconfig megpróbálja a lehető legnagyobb mértékben betölteni az előző beállítást a menübe. Mindazonáltal ajánlott gondosan áttekinteni minden lehetőséget és az új szakaszokat.
Annak ellenőrzése, hogy az initramfs tartalmazza-e a szükséges modulokat/eszközöket az indítás előtt
Az bootolás előtt érdemes lehet ellenőrizni, hogy az initramfs bináris képfájl tartalmazza-e a szükséges eszközöket és modulokat. Például, ha távoli feloldási képességeket kíván használni egy képernyő nélküli operációs rendszeren a LUKS segítségével, akkor győződjön meg arról, hogy a hálózati interfészkártya, a dropbear és a cryptsetup kernelmoduljai bekerültek a bináris képfájlba.
Az lsinitrd használata
A genkernel-4 óta a létrehozott initramfs bináris képfájlok feldolgozhatóak a sys-kernel/dracut szoftvercsomagból származó lsinitrd parancs segítségével:
user $
lsinitrd /boot/initramfs-5.3.14-gentoo-r1-x86_64-wifitest2.img
Image: /boot/initramfs-5.3.14-gentoo-r1-x86_64-wifitest2.img: 4,5M ======================================================================== Version: Genkernel 4.0.1 (2019-12-16 00:48:10 UTC) Arguments: --boot-font=none --keymap --compress-initramfs --no-microcode-initramfs --ramdisk-modules --busybox --no-btrfs --no-iscsi --no-multipath --no-dmraid --mdadm --lvm --no-unionfs --no-zfs --no-splash --no-strace --no-gpg --luks --no-firmware --firmware-dir=/lib/firmware --ssh --no-e2fsprogs --no-xfsprogs dracut modules: ======================================================================== drwxr-xr-x 16 root root 0 Dec 16 01:49 . drwxr-xr-x 2 root root 0 Dec 16 01:49 bin lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/ash -> busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/[ -> busybox -rwxr-xr-x 1 root root 2351376 Dec 16 01:49 bin/busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/cat -> busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/cut -> busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/echo -> busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/mknod -> busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/mount -> busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/sh -> busybox lrwxrwxrwx 1 root root 7 Dec 16 01:49 bin/uname -> busybox drwxr-xr-x 2 root root 0 Dec 16 01:49 dev drwxr-xr-x 8 root root 0 Dec 16 01:49 etc -rw-r--r-- 1 root root 24 Dec 16 01:49 etc/build_date -rw-r--r-- 1 root root 16 Dec 16 01:49 etc/build_id drwxr-xr-x 2 root root 0 Dec 16 01:49 etc/dropbear -rw------- 1 root root 140 Dec 16 01:49 etc/dropbear/dropbear_ecdsa_host_key -rw------- 1 root root 806 Dec 16 01:49 etc/dropbear/dropbear_rsa_host_key prw-r--r-- 1 root root 0 Dec 16 01:49 etc/dropbear/fifo_root prw-r--r-- 1 root root 0 Dec 16 01:49 etc/dropbear/fifo_swap -rw-r--r-- 1 root root 97 Dec 16 01:49 etc/fstab -rw-r--r-- 1 root root 14 Dec 16 01:49 etc/group -rw-r--r-- 1 root root 3742 Dec 16 01:49 etc/initrd.defaults -rw-r--r-- 1 root root 69232 Dec 16 01:49 etc/initrd.scripts -rw-r--r-- 1 root root 441 Dec 16 01:49 etc/ld.so.cache -rw-r--r-- 1 root root 78 Dec 16 01:49 etc/ld.so.conf drwxr-xr-x 2 root root 0 Dec 16 01:49 etc/ld.so.conf.d -rw-r--r-- 1 root root 81 Dec 16 01:49 etc/ld.so.conf.d/05gcc-x86_64-pc-linux-gnu.conf -rw-r--r-- 1 root root 2298 Dec 16 01:49 etc/localtime drwxr-xr-x 3 root root 0 Dec 16 01:49 etc/lvm drwxr-xr-x 2 root root 0 Dec 16 01:49 etc/lvm/cache -rw-r--r-- 1 root root 95231 Dec 16 01:49 etc/lvm/lvm.conf -rw-r--r-- 1 root root 2882 Dec 16 01:49 etc/mdadm.conf drwxr-xr-x 3 root root 0 Dec 16 01:49 etc/mdev -rw-r--r-- 1 root root 1172 Dec 16 01:49 etc/mdev.conf drwxr-xr-x 2 root root 0 Dec 16 01:49 etc/mdev/helpers -rwxr-xr-x 1 root root 666 Dec 16 01:49 etc/mdev/helpers/nvme -rwxr-xr-x 1 root root 1295 Dec 16 01:49 etc/mdev/helpers/storage-device drwxr-xr-x 2 root root 0 Dec 16 01:49 etc/modprobe.d -rw-r--r-- 1 root root 1186 Dec 16 01:49 etc/modprobe.d/aliases.conf -rw-r--r-- 1 root root 122 Dec 16 01:49 etc/modprobe.d/i386.conf drwxr-xr-x 2 root root 0 Dec 16 01:49 etc/modules -rw-r--r-- 1 root root 24 Dec 16 01:49 etc/modules/ataraid -rw-r--r-- 1 root root 21 Dec 16 01:49 etc/modules/block -rw-r--r-- 1 root root 180 Dec 16 01:49 etc/modules/crypto -rw-r--r-- 1 root root 26 Dec 16 01:49 etc/modules/dmraid -rw-r--r-- 1 root root 23 Dec 16 01:49 etc/modules/firewire -rw-r--r-- 1 root root 123 Dec 16 01:49 etc/modules/fs -rw-r--r-- 1 root root 86 Dec 16 01:49 etc/modules/hyperv -rw-r--r-- 1 root root 40 Dec 16 01:49 etc/modules/iscsi -rw-r--r-- 1 root root 437 Dec 16 01:49 etc/modules/lvm -rw-r--r-- 1 root root 194 Dec 16 01:49 etc/modules/mdadm -rw-r--r-- 1 root root 75 Dec 16 01:49 etc/modules/multipath -rw-r--r-- 1 root root 214 Dec 16 01:49 etc/modules/net -rw-r--r-- 1 root root 56 Dec 16 01:49 etc/modules/nvme -rw-r--r-- 1 root root 519 Dec 16 01:49 etc/modules/pata -rw-r--r-- 1 root root 83 Dec 16 01:49 etc/modules/pcmcia -rw-r--r-- 1 root root 158 Dec 16 01:49 etc/modules/sata -rw-r--r-- 1 root root 523 Dec 16 01:49 etc/modules/scsi -rw-r--r-- 1 root root 350 Dec 16 01:49 etc/modules/usb -rw-r--r-- 1 root root 133 Dec 16 01:49 etc/modules/virtio -rw-r--r-- 1 root root 15 Dec 16 01:49 etc/modules/waitscan -rw-r--r-- 1 root root 47 Dec 16 01:49 etc/passwd -rw-r----- 1 root root 22 Dec 16 01:49 etc/shadow -rw-r--r-- 1 root root 25 Dec 16 01:49 etc/shells -rwxr-xr-x 1 root root 32331 Dec 16 01:49 init drwxr-xr-x 2 root root 0 Dec 16 01:49 .initrd drwxr-xr-x 6 root root 0 Dec 16 01:49 lib lrwxrwxrwx 1 root root 3 Dec 16 01:49 lib32 -> lib lrwxrwxrwx 1 root root 3 Dec 16 01:49 lib64 -> lib drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/console drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/dracut -rw-r--r-- 1 root root 312 Dec 16 01:49 lib/dracut/build-parameter.txt -rw-r--r-- 1 root root 42 Dec 16 01:49 lib/dracut/dracut-gk-version.info drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/keymaps lrwxrwxrwx 1 root root 9 Dec 16 01:49 lib/keymaps/10.map -> croat.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/11.map -> cz.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/12.map -> de.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/13.map -> dk.map lrwxrwxrwx 1 root root 10 Dec 16 01:49 lib/keymaps/14.map -> dvorak.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/15.map -> es.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/16.map -> et.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/17.map -> fi.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/18.map -> fr.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/19.map -> gr.map lrwxrwxrwx 1 root root 10 Dec 16 01:49 lib/keymaps/1.map -> azerty.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/20.map -> hu.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/21.map -> il.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/22.map -> is.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/23.map -> it.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/24.map -> jp.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/25.map -> la.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/26.map -> lt.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/27.map -> mk.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/28.map -> nl.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/29.map -> no.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/2.map -> be.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/30.map -> pl.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/31.map -> pt.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/32.map -> ro.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/33.map -> ru.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/34.map -> se.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/35.map -> sf.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/36.map -> sg.map lrwxrwxrwx 1 root root 8 Dec 16 01:49 lib/keymaps/37.map -> sk-y.map lrwxrwxrwx 1 root root 8 Dec 16 01:49 lib/keymaps/38.map -> sk-z.map lrwxrwxrwx 1 root root 11 Dec 16 01:49 lib/keymaps/39.map -> slovene.map lrwxrwxrwx 1 root root 8 Dec 16 01:49 lib/keymaps/3.map -> bepo.map lrwxrwxrwx 1 root root 7 Dec 16 01:49 lib/keymaps/40.map -> trf.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/41.map -> ua.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/42.map -> uk.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/43.map -> us.map lrwxrwxrwx 1 root root 10 Dec 16 01:49 lib/keymaps/44.map -> wangbe.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/4.map -> bg.map lrwxrwxrwx 1 root root 8 Dec 16 01:49 lib/keymaps/5.map -> br-a.map lrwxrwxrwx 1 root root 8 Dec 16 01:49 lib/keymaps/6.map -> br-l.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/7.map -> by.map lrwxrwxrwx 1 root root 6 Dec 16 01:49 lib/keymaps/8.map -> cf.map lrwxrwxrwx 1 root root 11 Dec 16 01:49 lib/keymaps/9.map -> colemak.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/azerty.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/be.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/bepo.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/bg.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/br-a.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/br-l.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/by.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/cf.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/colemak.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/croat.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/cz.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/de.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/dk.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/dvorak.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/es.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/et.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/fi.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/fr.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/gr.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/hu.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/il.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/is.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/it.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/jp.map -rw-r--r-- 1 root root 518 Dec 16 01:49 lib/keymaps/keymapList -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/la.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/lt.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/mk.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/nl.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/no.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/pl.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/pt.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/ro.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/ru.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/se.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/sf.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/sg.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/sk-y.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/sk-z.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/slovene.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/trf.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/ua.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/uk.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/us.map -rw-r--r-- 1 root root 2823 Dec 16 01:49 lib/keymaps/wangbe.map -rwxr-xr-x 1 root root 169376 Dec 16 01:49 lib/ld-linux-x86-64.so.2 -rwxr-xr-x 1 root root 1913648 Dec 16 01:49 lib/libc.so.6 -rwxr-xr-x 1 root root 26800 Dec 16 01:49 lib/libnss_dns.so lrwxrwxrwx 1 root root 13 Dec 16 01:49 lib/libnss_dns.so.2 -> libnss_dns.so -rwxr-xr-x 1 root root 51536 Dec 16 01:49 lib/libnss_files.so lrwxrwxrwx 1 root root 15 Dec 16 01:49 lib/libnss_files.so.2 -> libnss_files.so -rwxr-xr-x 1 root root 88736 Dec 16 01:49 lib/libresolv.so.2 drwxr-xr-x 3 root root 0 Dec 16 01:49 lib/modules drwxr-xr-x 3 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2 drwxr-xr-x 5 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/crypto -rw-r--r-- 1 root root 7152 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/crypto/algif_rng.ko drwxr-xr-x 6 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers drwxr-xr-x 3 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/hid drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/hid/usbhid -rw-r--r-- 1 root root 66448 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/hid/usbhid/usbhid.ko drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/md -rw-r--r-- 1 root root 19024 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/md/dm-log.ko -rw-r--r-- 1 root root 27256 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/md/dm-mirror.ko -rw-r--r-- 1 root root 49200 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/md/dm-raid.ko -rw-r--r-- 1 root root 16536 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/md/dm-region-hash.ko drwxr-xr-x 3 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/net drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/net/intel drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/net/intel/e1000 -rw-r--r-- 1 root root 70480 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/net/intel/e1000/e1000.ko drwxr-xr-x 6 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/common -rw-r--r-- 1 root root 6584 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/common/usb-common.ko drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/core -rw-r--r-- 1 root root 308944 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/core/usbcore.ko drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/host -rw-r--r-- 1 root root 60416 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/host/ehci-hcd.ko -rw-r--r-- 1 root root 10616 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/host/ehci-pci.ko -rw-r--r-- 1 root root 46072 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/host/ohci-hcd.ko -rw-r--r-- 1 root root 35896 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/host/uhci-hcd.ko drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/storage -rw-r--r-- 1 root root 126512 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/drivers/usb/storage/usb-storage.ko drwxr-xr-x 3 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/fs drwxr-xr-x 2 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/fs/fat -rw-r--r-- 1 root root 95664 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/fs/fat/fat.ko -rw-r--r-- 1 root root 16104 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/kernel/fs/fat/msdos.ko -rw-r--r-- 1 root root 32434 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.alias -rw-r--r-- 1 root root 42356 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.alias.bin -rw-r--r-- 1 root root 8132 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.builtin -rw-r--r-- 1 root root 11529 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.builtin.bin -rw-r--r-- 1 root root 15196 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.dep -rw-r--r-- 1 root root 23748 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.dep.bin -rw-r--r-- 1 root root 0 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.devname -rw-r--r-- 1 root root 8320 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.order -rw-r--r-- 1 root root 117 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.softdep -rw-r--r-- 1 root root 24707 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.symbols -rw-r--r-- 1 root root 29469 Dec 16 01:49 lib/modules/5.3.14-gentoo-r1-x86_64-wifitest2/modules.symbols.bin lrwxrwxrwx 1 root root 4 Dec 16 01:49 linuxrc -> init drwxr-xr-x 2 root root 0 Dec 16 01:49 mnt drwxr-xr-x 2 root root 0 Dec 16 01:49 proc drwxr-xr-x 3 root root 0 Dec 16 01:49 root drwx------ 2 root root 0 Dec 16 01:49 root/.ssh -rw------- 1 root root 742 Dec 16 01:49 root/.ssh/authorized_keys drwxr-xr-x 2 root root 0 Dec 16 01:49 run -rw-r--r-- 1 root root 0 Dec 16 01:49 run/utmp drwxr-xr-x 2 root root 0 Dec 16 01:49 sbin -rwxr-xr-x 1 root root 1105720 Dec 16 01:49 sbin/blkid -rwxr-xr-x 1 root root 2813384 Dec 16 01:49 sbin/cryptsetup lrwxrwxrwx 1 root root 19 Dec 16 01:49 sbin/dmsetup -> ../usr/sbin/dmsetup lrwxrwxrwx 1 root root 19 Dec 16 01:49 sbin/dmstats -> ../usr/sbin/dmstats lrwxrwxrwx 1 root root 7 Dec 16 01:49 sbin/init -> ../init lrwxrwxrwx 1 root root 15 Dec 16 01:49 sbin/lvm -> ../usr/sbin/lvm -rwxr-xr-x 1 root root 1510360 Dec 16 01:49 sbin/mdadm -rwxr-xr-x 1 root root 1267904 Dec 16 01:49 sbin/mdmon drwxr-xr-x 2 root root 0 Dec 16 01:49 sys drwxrwxrwt 2 root root 0 Dec 16 01:49 tmp drwxr-xr-x 6 root root 0 Dec 16 01:49 usr drwxr-xr-x 2 root root 0 Dec 16 01:49 usr/bin lrwxrwxrwx 1 root root 13 Dec 16 01:49 usr/bin/dropbearconvert -> dropbearmulti lrwxrwxrwx 1 root root 13 Dec 16 01:49 usr/bin/dropbearkey -> dropbearmulti -rwxr-xr-x 1 root root 1365144 Dec 16 01:49 usr/bin/dropbearmulti -rwxr-xr-x 1 root root 2881 Dec 16 01:49 usr/bin/login-remote.sh lrwxrwxrwx 1 root root 13 Dec 16 01:49 usr/bin/scp -> dropbearmulti drwxr-xr-x 2 root root 0 Dec 16 01:49 usr/lib lrwxrwxrwx 1 root root 3 Dec 16 01:49 usr/lib32 -> lib lrwxrwxrwx 1 root root 3 Dec 16 01:49 usr/lib64 -> lib drwxr-xr-x 2 root root 0 Dec 16 01:49 usr/sbin lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/cache_check -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/cache_dump -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/cache_metadata_size -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/cache_repair -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/cache_restore -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/cache_writeback -> pdata_tools -rwxr-xr-x 1 root root 1262952 Dec 16 01:49 usr/sbin/dmsetup lrwxrwxrwx 1 root root 7 Dec 16 01:49 usr/sbin/dmstats -> dmsetup lrwxrwxrwx 1 root root 20 Dec 16 01:49 usr/sbin/dropbear -> ../bin/dropbearmulti lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/era_check -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/era_dump -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/era_invalidate -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/era_restore -> pdata_tools -rwxr-xr-x 1 root root 2905416 Dec 16 01:49 usr/sbin/lvm -rwxr-xr-x 1 root root 3061192 Dec 16 01:49 usr/sbin/pdata_tools -rwxr-xr-x 1 root root 609 Dec 16 01:49 usr/sbin/resume-boot lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_check -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_delta -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_dump -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_ls -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_metadata_size -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_repair -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_restore -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_rmap -> pdata_tools lrwxrwxrwx 1 root root 11 Dec 16 01:49 usr/sbin/thin_trim -> pdata_tools -rwxr-xr-x 1 root root 3076 Dec 16 01:49 usr/sbin/unlock-luks drwxr-xr-x 3 root root 0 Dec 16 01:49 usr/share drwxr-xr-x 2 root root 0 Dec 16 01:49 usr/share/udhcpc -rwxr-xr-x 1 root root 1098 Dec 16 01:49 usr/share/udhcpc/default.script drwxr-xr-x 3 root root 0 Dec 16 01:49 var drwxr-xr-x 2 root root 0 Dec 16 01:49 var/log -rw-r--r-- 1 root root 0 Dec 16 01:49 var/log/lastlog -rw-r--r-- 1 root root 0 Dec 16 01:49 var/log/wtmp lrwxrwxrwx 1 root root 6 Dec 16 01:49 var/run -> ../run ========================================================================
A fenti kimenet azt mutatja, hogy a e1000.ko kernelmodulfájl egy Intel NIC számára, a dropbear végrehajtható fájl (usr/bin/dropbearmulti), és a cryptsetup végrehajtható fájl (sbin/cryptsetup) bekerült az initramfs bináris képfájlba.
Manuális kicsomagolás
A létrehozott bináris initramfs képfájl kicsomagolásához és tartalmának ellenőrzéséhez futtassa:
root #
mkdir /tmp/initramfs
root #
cd /tmp/initramfs
root #
xzcat /boot/initramfs-5.3.14-gentoo-r1-x86_64-wifitest2.img | cpio -idmv
root #
ls -l sbin/cryptsetup
-rwxr-xr-x 1 root root 2813384 Dec 16 01:49 sbin/cryptsetup
A manuális kicsomagolás nehézkes lehet, ha a CPU mikrokódfrissítések beépültek az initramfs bináris képfájlba.
Mikrokód betöltése
A mikrokód (ucode) frissítésekhez a kernelnek támogatnia kell a (korai) mikrokód betöltést, és a mikrokód frissítéseknek már az bootolás elején jelen kell lenniük. További részletekért tekintse meg a Mikrokód cikket.
Mikrokód betöltési támogatás a kernelben
Alapértelmezés szerint a genkernel engedélyezi a mikrokód betöltési támogatást a kernelben mind AMD, mind Intel processzorok esetében. Ez a viselkedés a /etc/genkernel.conf fájlban található MICROCODE opcióval vagy a --microcode=(no|all|amd|intel)
parancssori paraméter használatával szabályozható a futtatás során.
Mikrokód frissítések beágyazása az initramfs képfájlba
Ahhoz, hogy a mikrokód (ucode) frissítések beágyazhatóak legyenek az initramfs képfájlban, engedélyezni kell a MICROCODE_INITRAMFS opciót a /etc/genkernel.conf fájlban, vagy a genkernel futtatása során meg kell adni a --microcode-initramfs
parancssori paramétert. Ennek hatására a genkernel az initramfs képfájlhoz előrébb csatolja a kiválasztott processzorhoz szükséges mikrokódokat (részletek a fent említett --microcode
opciónál), abban az esetben, ha a sys-firmware/intel-microcode szoftvercsomag az split-ucode
USE jelölőzászlóval Intel processzorokhoz, illetve/vagy a sys-kernel/linux-firmware szoftvercsomag az AMD processzorokhoz telepítve van.
Az initramfs képfájlba történő mikrokód frissítések beágyazása modern rendszereken már elavult módszernek számít. Helyette ajánlott olyan bootloader-eket használni (például sys-boot/grub), amelyek képesek több initramfs képfájl betöltésére. GRUB vagy más modern bootloader használata esetén ajánlott telepíteni a sys-firmware/intel-microcode szoftvercsomagot Intel processzorok számára, és a sys-kernel/linux-firmware szoftvercsomagot az AMD processzorok számára. Mindkettőnél az
initramfs
USE jelölőzászlót engedélyezni kell. A bootloader számára engedélyezni kell a /boot/amd-uc.img és/vagy a /boot/intel-uc.img fájlok betöltését a genkernel initramfs fájlja mellett. Ez lehetővé teszi a CPU mikrokód frissítését a kernel/initramfs frissítéseitől függetlenül.Firmware betöltése
A genkernel által automatikusan generált initramfs bináris képfájlhoz konkrét firmware fájlok adhatóak hozzá, ha a relatív elérési útvonalaikkal együtt felsorolásra kerülnek a FIRMWARE_FILES változóban a /etc/genkernel.conf fájlban. Ha a sys-kernel/genkernel szoftvercsomag telepítve van USE="firmware"
beállítással, akkor előnyben fogja részesíteni a /lib/firmware könyvtárban található firmware fájlokat.
/etc/genkernel.conf
Firmware hozzáadása az initramfs bináris képfájlhoz# Add firmware(s) to initramfs
FIRMWARE="yes"
# Adja meg a könyvtárat, ahonnan a fájlokat be kell tölteni
FIRMWARE_DIR="/lib/firmware"
# Specify a comma-separated list of firmware files or directories to include,
# relative to FIRMWARE_DIR. If empty or unset, the full contents of
# FIRMWARE_DIR will be included (if FIRMWARE option above is set to YES).
FIRMWARE_FILES="<comma-separated list of firmware files here>"
Abban az esetben, ha a sys-kernel/gentoo-sources szoftvercsomag telepítve van USE="experimental" beállítással, és a kernel be van állítva a CONFIG_GENTOO_PRINT_FIRMWARE_INFO=y
opcióval, akkor a következő parancs segítségével egy vesszővel elválasztott lista generálható az összes jelenleg betöltött firmware fájlról. Ez a lista felhasználható a /etc/genkernel.conf fájl FIRMWARE_FILES változójában, ahogyan azt korábban bemutattuk. (A kimenet csak példa.) :
root #
dmesg -t | grep '^Loading firmware*' | sed 's/^Loading\sfirmware:\s//' | echo $(cat) | tr ' ' ','
amdgpu/green_sardine_sdma.bin,amdgpu/green_sardine_asd.bin,amdgpu/green_sardine_ta.bin,amdgpu/green_sardine_pfp.bin,amdgpu/green_sardine_me.bin,amdgpu/green_sardine_ce.bin,amdgpu/green_sardine_rlc.bin,amdgpu/green_sardine_mec.bin,amdgpu/green_sardine_dmcub.bin,amdgpu/green_sardine_vcn.bin,regulatory.db,regulatory.db.p7s,rtw89/rtw8852a_fw.bin,rtl_bt/rtl8852au_fw.bin,rtl_bt/rtl8852au_config.bin,rtl_nic/rtl8168h-2.fw
Lehetséges a firmware közvetlen beépítése a kernelképfájlba, azonban vegye figyelembe, hogy a kernel beállításfájlban CONFIG_EXTRA_FIRMWARE (általában /usr/src/linux útvonalon található .config fájlban) szóközzel elválasztott listát igényel (kimeneti példa):
root #
dmesg -t | grep '^Loading firmware*' | sed 's/^Loading\sfirmware:\s//' | echo $(cat)
amdgpu/green_sardine_sdma.bin amdgpu/green_sardine_asd.bin amdgpu/green_sardine_ta.bin amdgpu/green_sardine_pfp.bin amdgpu/green_sardine_me.bin amdgpu/green_sardine_ce.bin amdgpu/green_sardine_rlc.bin amdgpu/green_sardine_mec.bin amdgpu/green_sardine_dmcub.bin amdgpu/green_sardine_vcn.bin regulatory.db regulatory.db.p7s rtw89/rtw8852a_fw.bin rtl_bt/rtl8852au_fw.bin rtl_bt/rtl8852au_config.bin rtl_nic/rtl8168h-2.fw
Az ilyen lista csak akkor lesz teljes, ha az illesztőprogramok sikeresen betöltik az összes szükséges firmware fájlt: Abban az esetben, ha egy illesztőprogramnak egynél több firmware fájlra van szüksége, de nem sikerül betölteni az elsőt, akkor csak ez kerül listázásra, így a többi szükséges firmware fájl neve hiányozni fog. Ajánlott eljárás a szükséges firmware fájlok megtalálására az, hogy az adott illesztőprogramokat először kernelmodulokként fordítjuk le,
M
a kernel konfigurációjában, és nem az initramfs képfájlba kerülnek a modulok. A modulok a valódi /
(root) könyvtárra váltás után kerülnek betöltésre, ahol minden firmware fájl rendelkezésre áll a sys-kernel/linux-firmware (és mások) által a /lib/firmware alatt. Ha a rendszer ezzel a módszerrel sikeresen bootol, akkor a fenti parancs futtatásával megkaphatjuk az összes szükséges firmware fájl teljes listáját. Ezek a fájlok beépíthetők az initramfs képfájlba (vagy magába a kernel képfájlba), lehetővé téve, hogy az illesztőprogramok közvetlenül a kernelbe kerüljenek fordításra, *
a kernel beállításában, vagy az illesztőprogramok modulokként az initramfs képfájlba is bekerüljenek. Mindkét esetben a modulok korábban kerülnek betöltésre, és sikeres lesz a betöltés, ha a firmware fájlok elérhetők az bináris initramfs képfájlban, amelyeket a kernel mellett kell betölteni, például a GRUB használatával.Távoli mentésre szolgáló shell
A genkernel képes beágyazni a net-misc/dropbear SSH szolgáltatását a bináris initramfs képfájlba, amely lehetővé teszi bizonyos problémák távoli megoldását a bootolás során, amikor az initramfs legalább betölthető. A leggyakrabban használt funkció a távoli feloldási lehetőség LUKS-titkosított root vagy swap eszközökhöz, illetve ZFS kötetekhez.
SSH szolgáltatás támogatásához előkövetelmény az initramfs képfájlban
A authorized_keys fájlnak léteznie kell, mielőtt a genkernel meghívásra kerül. Alapértelmezés szerint a genkernel a /etc/dropbear/authorized_keys helyen fog keresni. A --ssh-authorized-keys-file=/path/to/custom/authorized_keys
parancssori argumentum vagy a genkernel beállítási opció SSH_AUTHORIZED_KEYS_FILE használható az alapértelmezett érték módosítására.
Hozzon létre egy /etc/dropbear/authorized_keys szimbolikus hivatkozást /root/.ssh/authorized_keys fájlra például azért, hogy a root hozzáférést és a távoli mentő shell hozzáférést szinkronban tartsa!
SSH támogatás hozzáadása az bináris initramfs képfájlhoz
Az SSH szolgáltatás beágyazásához a genkernel initramfs képfájlba, futtassa a genkernel parancsot a --ssh
parancssori argumentummal, vagy állítsa be a genkernel beállításfájlban a SSH="yes" értéket. Fontos megemlíteni, hogy ez a funkció működő hálózatot igényel a rendszer bootolásakor. Az alábbi példa csak az initramfs újbóli létrehozására szolgál, beágyazott SSH szolgáltatással:
root #
genkernel --ssh initramfs
* Gentoo Linux Genkernel; Version 4.0.1 * Using genkernel configuration from '/etc/genkernel.conf' ... * Running with options: --ssh initramfs * Working with Linux kernel 5.3.14-gentoo-r1-x86_64 for x86_64 * Using kernel config file '/etc/kernels/kernel-config-5.3.14-gentoo-r1-x86_64' ... * initramfs: >> Initializing ... * >> Appending devices cpio data ... * >> Appending base_layout cpio data ... * >> Appending auxilary cpio data ... * >> Appending blkid cpio data ... * >> Appending busybox cpio data ... * >> Appending dropbear cpio data ... ================================================================= This initramfs' sshd will use the following host key(s): 256 MD5:a5:13:09:90:5b:f6:a1:95:49:9f:87:d9:fa:e5:d8:02 (ECDSA) 256 SHA256:5dxNGEOwH9hvX4+sV4WtzRV/9m8/hrhgnNtTplZf5x8 (ECDSA) 2048 MD5:1d:e6:cc:ce:c8:96:a0:73:3e:4c:2a:56:ce:b9:10:26 (RSA) 2048 SHA256:V4WrMKhfVSxSeW3XIbW8dSaAmXiwN6jiMA/geNKLcqA (RSA) ================================================================= * >> Appending modprobed cpio data ... * >> Appending modules cpio data ... * >> Appending linker cpio data ... * >> Deduping cpio ... * >> Pre-generating initramfs' /etc/ld.so.cache ... * >> Compressing cpio data (.xz) ... * * You will find the initramfs in '/boot/initramfs-5.3.14-gentoo-r1-x86_64.img'. * WARNING... WARNING... WARNING... * Additional kernel parameters that *may* be required to boot properly: * - Add "dosshd" to start SSH daemon in initramfs * Do NOT report kernel bugs as genkernel bugs unless your bug * is about the default genkernel configuration... * * Make sure you have the latest ~arch genkernel before reporting bugs.
Alapértelmezés szerint a genkernel saját, dedikált SSH host számítógép kulcsokat generál minden hiányzó, támogatott kulcsalgoritmushoz a beágyazott SSH szolgáltatás számára. Ez lehetővé teszi a valódi rendszer SSH szolgáltatásának és az initramfs SSH szolgáltatásának a megkülönböztetését. Ha a host számítógép SSH host kulcsait szeretné használni, vagy minden bootoláskor új kulcsokat generálna futásidőben, akkor használja a
--ssh-host-keys
parancssori opciót, és további részletekért tekintse meg a genkernel man súgóját.SSH szolgáltatás engedélyezése a bootoláskor
Az SSH szolgáltatás egyszerű hozzáadása a bináris initramfs képfájlhoz nem elegendő. Mivel bármilyen hálózati szolgáltatás kitettsége biztonsági kockázatot jelenthet, ezt a funkciót kötelező engedélyezni a kernel parancssori argumentummal: dosshd
! A hálózat beállításával kapcsolatos információkért tekintse meg a genkernel hálózati beállítására vonatkozó részt.
Távoli feloldás
Két lehetőség van a LUKS-titkosított root és/vagy swap kötet feloldására: Egy manuális mód, amelyben SSH kapcsolaton keresztül futtat egy parancsot, és felszólítják a jelszó megadására, vagy egy automatikus mód, amelyben a felhasználó az SSH kapcsolaton keresztül parancsként adja át a jelszót.
Ehhez szükség van egy olyan kernelre/initramfs-re, amelyet a
--luks
parancssori argumentummal generáltak, és a kernelt a crypt_root (és/vagy crypt_swap) kernel parancssori argumentummal kell indítani.
A ZFS-felhasználónak a kernelképfájlt/initramfs képfájlt a --zfs
parancssori argumentummal kell generálnia, és a kernelképfájlt a dozfs kernel parancssori argumentummal kell indítani.Manuális feloldás
Csatlakozzon a távoli rendszerhez SSH kapcsolaton keresztül, és futtassa a következő parancsokat:
user $
ssh root@remote-system-running-genkernel-initramfs-with-dosshd
>> Welcome to Genkernel 4.0.1 (2019-12-16 22:34:14 UTC) remote rescue shell! >> ...running Linux kernel 5.3.14-gentoo-r1-x86_64 >> The lockfile '/tmp/remote-rescueshell.lock' was created. >> In order to resume boot process, run 'resume-boot'. >> Be aware that it will kill your connection which means >> you will no longer be able to work in this shell. >> To remote unlock LUKS-encrypted root device, run 'unlock-luks root'. remote rescueshell ~ # unlock-luks root >> Detected real_root as a md device. Setting up the device node ... Enter passphrase for /dev/md126: >> LUKS device /dev/md126 opened remote rescueshell ~ # resume-boot >> Resuming boot process ...
Ebben a példában a rendszer csak a
crypt_root=
beállítással indult a kernel parancssorában. Ha a rendszer a crypt_swap=
beállítással indult, akkor egy további felszólítást fog kapni a swap feloldásának módjáról. A ZFS-felhasználók a unlock-zfs
parancs használatára kapnak felszólítást.Automatikus feloldás
Ez alapvetően ugyanaz, mint a manuális feloldás, csak nincs szükség a resume-boot kézi futtatására. Abban az esetben, ha a felhasználónak mindkettője van, titkosított root és swap kötet, akkor először a swap kötetet kell feloldania:
user $
cat /path/to/secret.key/on/local/disk | ssh root@remote-system-running-genkernel-initramfs-with-dosshd post root
>> Detected real_root as a md device. Setting up the device node ... >> LUKS device /dev/md126 opened >> Resuming boot process ...
Az automatikus feloldás nem érhető el a ZFS-felhasználók számára.
Bootolás hálózatról
Telepítő CD lemezről
A genkernel segédprogram képes olyan bináris kernel képfájlokat és bináris initrd képfájlokat létrehozni, amelyek támogatják a hálózatról történő bootolást, vagy netbootot. Optimális esetben a felhasználók bármelyik újabb számítógépet hálózaton keresztül képesek bootolni a Gentoo telepítő CD által biztosított környezetbe.
A varázslat a genkernel linuxrc szkriptjében rejlik: Megpróbálja hálózaton keresztül felcsatolni a telepítő CD lemezt az NFS fájlrendszer használatával. Innen a telepítő CD init szkriptjei veszik át az irányítást, mintha a CD helyben lenne jelen.
Kernel és initramfs bináris képfájlok létrehozása netboot támogatással
A hálózati indítás (netbooting) támogatásának engedélyezéséhez a kernel beállításakor az alábbi opciókat kell beállítani:
A genkernel által biztosított netboot támogatás kísérleti jellegű, és hibákat tartalmazhat.
Először is, a bináris kernelképfájlnak tartalmaznia kell a rendszer Hálózati Interfész Kártyáinak (NIC) az illesztőprogramjait. Általában az ilyen hálózati eszközökhöz tartozó illesztőprogramok kernelmodulokként kerülnek lefordításra. Azonban a hálózati indítás (netboot) érdekében alapvető fontosságú, hogy ezek az illesztőprogramok közvetlenül a bináris kernelképfájlba legyenek beágyazva, és ne külső modulokként legyenek létrehozva.
Device Drivers --->
Networking Support --->
Ethernet (10 or 100Mbit) --->
[*] Ethernet (10 or 100Mbit)
<*> The driver(s) for each network card
Győződjön meg arról, hogy a <*> lehetőséget választja, és nem a <M> opciót.
Másodszor, ajánlott engedélyezni az IP: kernel szintű automatikus konfiguráció és az IP: DHCP támogatási opciók funkciókat. Ez elkerüli az indokolatlan komplexitást, mivel az IP-cím és a telepítő CD lemezhez tartozó NFS-útvonal beállítható egy DHCP-szerveren. Természetesen ez azt is jelenti, hogy a kernel parancssora minden számítógépnél állandó marad, ami különösen fontos az etherboot szempontjából.
Device Drivers --->
Networking Support --->
Networking options
[*] TCP/IP networking--->
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
Utasítja a kernelt, hogy indításkor DHCP-kérelmet küldjön.
Továbbá engedélyezze a SquashFS támogatását, mivel a legtöbb modern Gentoo telepítő CD megköveteli ezt. A SquashFS támogatás nem része az alapértelmezett kernelforráskód fájának. A SquashFS engedélyezéséhez alkalmazza a szükséges javításokat az általános kernel forráskód fájára, vagy telepítse a gentoo-sources szoftvercsomagot.
File systems--->
Miscellaneous filesystems --->
[*] SquashFS 2.X - Squashed file system support
Miután a forráskód fordítási folyamata befejeződött, hozzon létre egy tömörített tarball (tar.gz) fájlt, amely a kernel moduljait tartalmazza. Erre a lépésre csak akkor van szükség, ha a kernel verziója nem egyezik meg a telepítő CD lemezen található kernelképfájl verziójával.
Ahhoz, hogy létrehozzon egy tömörített fájlt, amely az összes modult tartalmazza, kövesse az alábbi lépéseket:
root #
cd /
root #
tar -cf /tmp/modules-X.Y.Z.tar.gz /lib/modules/X.Y.Z/
A hálózati indítási mechanizmustól függően az alábbi lépések egyikét kell követni:
Egy etherboot bináris képfájl létrehozásához kövesse az alábbi lépéseket:
root #
emerge --ask net-misc/mknbi
root #
cd /boot
root #
mkelf-linux -params="root=/dev/ram0 init=/linuxrc ip=dhcp" kernel... initrd... > etherboot.img
Egy OpenBoot/SPARC64 TFTP bináris képfájl létrehozásához:
root #
emerge --ask sys-apps/sparc-utils
root #
cd /boot
root #
elftoaout kernel... -o kernel.aout
root #
piggyback64 kernel.aout System.map-... initrd-...
root #
mv kernel.aout openboot.img
A openboot.img fájl maga a boot bináris képfájl.
Végül másolja át ezt a kernelt a TFTP szerverre. A részletek architektúrafüggőek, és túlmutatnak ezen útmutató keretein. Kérjük, hogy tekintse meg az adott platformhoz kapcsolódó dokumentációt.
NFS beállítása
Az NFS megosztás beállításához, amely tartalmazza a telepítő CD lemezképfájlt, használja a loop eszközt az ISO-képfájl felcsatolásához, majd másolja át a CD tartalmát az NFS megosztásba. Egy kellemes extra funkcióként a genkernel initrd szkriptjei automatikusan kicsomagolják az összes tar.gz tömörített fájlt, amelyek a /nfs/livecd/add/ könyvtárban találhatók. Az egyetlen teendő itt az, hogy a modules-X.Y.Z.tar.gz tömörített fájlt bemásolja a /nfs/livecd/add/ könyvtárba.
A következő lépések feltételezik, hogy a /nfs/livecd egy exportált NFS-megosztás:
root #
mount /tmp/gentoo-livecd.iso /mnt/cdrom -o loop
root #
cp -p /mnt/cdrom /nfs/livecd
root #
umount /mnt/cdrom
Most másolja be a modules.tar.gz fájlt a /add könyvtárba:
root #
mkdir /nfs/livecd/add
root #
cp /tmp/modules-X.Y.Z.tar.gz /nfs/livecd/add
DHCP beállítása
A netboot képfájlok kérni fognak a hálózaton lévő DHCP szervertől egy IP-címet, valamint egy root-path
opciót. Mindkettőt meg lehet adni egyes host számítógépek esetében a számítógépek azonosítására használt MAC-cím alapján:
/etc/dhcpd.conf
Példa a kliens számítógép dhcpd.conf beállítására# Here, 192.168.1.2 is the NFS server while 192.168.1.10 will be the IP address of the netbooted machine
host netbootableMachine {
hardware ethernet 11:22:33:44:55:66;
fixed-address 192.168.1.10;
option root-path "192.168.1.2:/nfs/livecd";
}
Netbooting utasítások
A hálózati indítás (netbooting) szintén nagyon platformspecifikus. A lényeg az, hogy a kernel parancssorában meg kell adni az ip=dhcp
és init=/linuxrc
paramétereket, mivel ezek indítják el a hálózati interfészt, és arra utasítják az initrd szkripteket, hogy az NFS-en keresztül csatolják a telepítő CD lemezt. Íme néhány platformspecifikus tipp.
Etherboot esetében helyezze be az etherboot lemezt a meghajtóba, majd indítsa újra a rendszert. A kernel parancssora a képfájl létrehozásakor lett meghatározva.
Sparc64 esetén nyomja meg a Stop+A billentyűgombokat a boot promptnál, majd írja be a következőt:
ok
boot net ip=dhcp init=/linuxrc
PXE esetében állítsa be a pxelinux-ot (a syslinux része), majd hozzon létre egy pxelinux.cfg/default fájlt, valami ilyesmi tartalommal:
pxelinux.cfg/default
Alapértelmezett bejegyzésDEFAULT gentoo
TIMEOUT 40
PROMPT 1
LABEL gentoo
KERNEL kernel-X.Y.Z
APPEND initrd=initrd-X.Y.Z root=/dev/ram0 init=/linuxrc ip=dhcp
Genkernel initramfs indítása
Bevezetés
Ha egy initramfs telepítve van a genkernel segítségével, akkor nézze meg a különböző boot opciókat, amelyeket meg kell (vagy ajánlott) határozni az bootloader beállításában. Az ebben az útmutatóban felsoroltak a leggyakoribbak közé tartoznak.
LVM vagy szoftver-RAID betöltése
Ha a rendszer LVM-et vagy szoftver-RAID-et használ, akkor az bináris initramfs képfájlt a --lvm
és --mdadm
opciók használatával kell létrehozni. Ne felejtse el az indítás során is engedélyezni a támogatást! Ezt a dolvm és domdadm opciókkal lehet megtenni.
/boot/grub/grub.conf
LVM és/vagy MDADM támogatás engedélyezése# Example for GRUB 1.x
title Gentoo Linux
root (hd0,0)
kernel /vmlinuz root=/dev/md3 dolvm domdadm
initrd /initramfs-genkernel-x86_64-3.4.3
Egyszerfelhasználós módú bootolás
Ha valamilyen okból az indítás sikertelen, akkor a rendszer mentése még lehetséges az egyszerfelhasználós módú indítással. Ez csak a legszükségesebb szolgáltatásokat tölti be, majd a felhasználót egy mentő (root) shellbe helyezi.
/boot/grub/grub.conf
Egyszerfelhasználós módú indítás# Example for GRUB 1.x
title Gentoo Linux
root (hd0,0)
kernel /vmlinuz root=/dev/md3 init_opts=S
initrd /initramfs-genkernel-x86_64-3.4.3
Keresztfordítás támogatása
A bináris kernelképfájl és/vagy bináris initramfs képfájl különböző platform számára történő létrehozásához, miközben a genkernel futtatása folyamatban van, a kernel/initramfs-t keresztfordítással kell elkészíteni.
root #
genkernel --mdadm --no-install --cross-compile=aarch64-linux-gnu all
A fentebb említett parancs arra készteti a genkernel szoftvert, hogy olyan bináris kernelképfájlt hozzon létre, amely támogatja az MD raidet, és beágyazza az mdadm-ot a bináris initramfs képfájlba (--mdadm
). Mind az elkészült bináris kernelképfájl, mind az elkészült bináris initramfs képfájl kézi telepítést igényel majd (--no-install
). A kernelképfájlba és az initramfs képfájlba ágyazott programok arm64 platformon futnak majd (--cross-compile=aarch64-linux-gnu
).
--cross-compile=<target triplet>
- A target triple-nek (pl.
aarch64-linux-gnu
) az a célja, hogy egy olyan architektúrára építsen, amely különbözik attól a rendszertől, amelyen a genkernel fut. Ez csak akkor szükséges, ha a létrehozott kernel/initramfs-t indító rendszer architektúrája eltér a jelenlegi rendszertől.
A keresztfordítási környezet létrehozásának ajánlott módja a sys-devel/crossdev használata. További részletekért tekintse meg a kereszt-fordítási környezet létrehozásáról szóló cikket.
Az initramfs kernel parancssori paraméterei
A következő paraméterlista csupán egy kivonat. Mindig ellenőrizze a verzióhoz tartozó man genkernel fájlt.
root=<...>
- Meghatározza a felcsatolandó root fájlrendszer eszközcsomópontját. Például
root=/dev/sda3
,root=UUID=a1e5968c-bd1b-41ee-bf08-2d0ed376fa83
. cdroot
- Megpróbálja betölteni a livecd.squashfs fájlt, és az live médiumok betöltésére szolgál.
crypt_root=<...>
- Ez meghatározza a LUKS által titkosított eszközt, amely tartalmazza a felcsatolandó root fájlrendszert. Ugyanazt a szintaxist támogatja, mint a fent említett
root
kernel parancssori paraméter.Note
Ez megköveteli, hogy az initramfs képfájl legalább--luks
opcióval legyen létrehozva. crypt_swap=<...>
- Meghatározza a LUKS által titkosított swap adathordozót. További részletekért tekintse meg a fent említett
crypt_root
kernel parancssori paramétert. root_trim=(yes|no)
- Engedélyezi a TRIM támogatást LUKS-alapú root eszköz esetén. Note
Megköveteli, hogy az initramfs képfájl legalább--luks
opcióval legyen létrehozva, és csak flash-alapú kötetek esetén hasznos. ip=<dhcp,addr/cidr>
- Általában arra használják, hogy a kernelt utasítsák egy hálózati interfész indítására, amelyet a
gk.net.iface
kernel paraméterrel lehet megadni. Alapértelmezés szerint adhcp
lesz használatban. Egy konkrét IP-cím beállítható azaddr/CIDR
szintaxis segítségével, például1.2.3.4/24
. gk.net.dhcp.retries=<...>
- Alapértelmezés szerint legfeljebb 3 DHCP felfedezési kérést küld.
gk.net.iface=<interface,macaddr>
- Alapértelmezés szerint az
eth0
nevű interfészt használja. Ezzel a kernelparaméterrel lehet megadni egy másik interfészt.
MAC-cím is megadható (00:00:00:00:00:00 formátumban) az interfész neve helyett. gk.net.gw=<...>
- Opcionális átjáró. Ha az IP dhcp protokollra van állítva, akkor ez a kernelparaméter figyelmen kívül lesz hagyva.
gk.net.routes=<...>
- Opcionális további útvonalak. Ha az IP dhcp protokollra van állítva, akkor ez a kernelparaméter figyelmen kívül lesz hagyva.
gk.net.timeout.dad=<...>
- Alapértelmezés szerint várjon legfeljebb 10 másodpercet az IPv6 DAD (Duplicate Address Detection) folyamatának befejezésére. Jelenleg a DAD-ra csak egy interfész leállítása közben vár, hogy elkerülje a versenyhelyzetet.
gk.net.timeout.deconfiguration=<...>
- Alapértelmezés szerint várjon legfeljebb 10 másodpercet egy interfész leállítása közben, hogy elkerülje a versenyhelyzetet.
gk.net.timeout.dhcp=<...>
- Alapértelmezés szerint várjon legfeljebb 10 másodpercet egy DHCP szerver válaszára.
gk.net.timeout.interface=<...>
- Alapértelmezés szerint várjon legfeljebb 10 másodpercet, amíg az interfész elérhetővé válik.
gk.prompt.timeout=<...>
- Alapértelmezés szerint a genkernel initramfs képfájlban megjelenő prompt, például amikor a root nem található, soha nem fog időtúllépni. Ezzel az opcióval beállíthat egy időkorlátot. Note
Ha a dosshd használatban van, és agk.prompt.timeout
nincs beállítva, akkor alapértelmezés szerint 30 másodpercre lesz állítva. Ez lehetővé teszi, hogy a távoli felhasználó válaszokat adjon a GK_PROMPT_FILE-en keresztül, amely alapértelmezés szerint /tmp/current_prompt értékre van állítva. dosshd
- Elindít egy interfészt és elindítja az SSH szolgáltatást az initramfs képfájlban, lehetővé téve a távolról történő titkosított eszközök feloldását vagy pusztán a hibakeresési célokra. Tekintse meg az "ip" opciót a hálózat beállításának a részleteiről. Note
Megköveteli, hogy az initramfs képfájl legalább--ssh
opcióval legyen létrehozva. gk.sshd.port=<...>
- Alapértelmezés szerint az sshd a 22-es porton fog hallgatni.
gk.sshd.wait=<...>
- X másodperc várakozás az sshd beállítása után. Hasznos a bejelentkezéshez (ezáltal szüneteltetve a boot folyamatot), mielőtt a valódi rendszer indulna.
dolvm
- Engedélyezi az LVM kötetek aktiválását rendszerindításkor. Note
Ez megköveteli, hogy az initramfs képfájl legalább--lvm
opcióval legyen létrehozva. lvmraid=<...>
- Megadja a RAID adathordozókat, amelyeket az LVM kötetek aktiválása előtt kell beállítani. Ez magában foglalja a fenti
dolvm
opciót. domdadm
(A Genkernel 4.2.0 verziójában elavult, mivel az MD összeállítást most már az udev szabályok vezérlik.)- RAID tömbök keresése rendszerindításkor. Note
Ez megköveteli, hogy az initramfs képfájl legalább--mdadm
opcióval legyen létrehozva. dozfs[=cache,force]
- Bootolható ZFS poolok keresése rendszerindításkor. Szükség esetén opcionálisan használhat cachefile-t vagy kényszerített importálást, illetve elvégezheti mindkét műveletet. Note
Ez megköveteli, hogy az initramfs képfájl legalább--zfs
opcióval legyen létrehozva. gk.log.disabled=<...>
- Alapértelmezés szerint minden megjelenített üzenet és külső parancshívás naplózásra kerül az initramfs képfájlban a /tmp/init.log fájlba. Ez a beállítás kikapcsolja a naplózást.
gk.log.keep=<...>
- Ha logikai értékre van állítva, akkor a genkernel megőrzi a /tmp/init.log fájlt (részletek fent), és átmásolja a fájlt a /genkernel-boot.log helyre a root eszközön (részletek a fent említett
root
vagyreal_root
kernel parancssori paramétereknél). A napló testreszabásához használhat egy egyedi fájlt, például /root/my-genkernel-boot.log.Note
Az alapértelmezett /genkernel-boot.log fájlt a root-on azért választották, mert a genkernel initramfs alapértelmezés szerint csak a root fájlrendszert csatolja fel. Ha a naplófájlt a /var/log/genkernel-boot.log helyre szeretné tárolni, akkor a csatolási pontnak elérhetőnek kell lennie (részletek: /etc/initramfs.mounts). gk.hw.load-all=<...>
- Alapértelmezés szerint a genkernel különféle modulcsoportokat (nvme, sata, scsi, pata, usb...) tölt be, amíg a fent említett
root
paraméterben megadott blokkeszköz elérhetővé nem válik. Ez a logikai opció arra használható, hogy kényszerítse az összes modulcsoport betöltését, függetlenül attól, hogy a root eszköz már elérhető-e, ha yes értékre van állítva.
Gyakran ismételt kérdések
Használható-e a genkernel systemd-alapú rendszerekhez?
Igen.
Genkernel? Genkernel-next? Dracut?
A sys-kernel/genkernel-next 2020. augusztus 20-án eltávolításra került a Gentoo szoftvercsomag-tárolóból.
A Gentoo a választásokról szól. A sys-kernel/genkernel-next a sys-kernel/genkernel fejlesztési elágazódásaként jött létre, amikor a genkernel fejlesztése elakadt. Akkoriban probléma volt egy systemd-alapú rendszer indítása a sys-kernel/genkernel által létrehozott kernel/initramfs segítségével (a sys-kernel/genkernel systemd támogatása már egy ideje javítva lett), és néhány fejlesztő támogatni akarta az olyan dolgokat, mint a sys-boot/plymouth, amely sys-fs/udev szoftvercsomagot igényel, ami nem és jelenleg sem kompatibilis a genkernel alapvető elképzelésével (részletek a "Megjegyzés" résznél a cikk elején). Bár a név arra utal, hogy a sys-kernel/genkernel-next a sys-kernel/genkernel utódja vagy az lesz, ez valójában félrevezető: 2013 óta vannak olyan kérések, hogy egyesítsék vissza a genkernel-next szoftvert a genkernel szoftverbe, de a folyamat elakadt. A sys-kernel/genkernel-4 kiadásának megjelenésével, amely jelentős változásokat hozott, és mivel a sys-kernel/genkernel-next fejlesztésében 2018 óta nem történt előrelépés, most már nagyon valószínűtlen, hogy a genkernel-next valaha is egyesülni fog a genkernel szoftverrel.
A sys-kernel/dracut egy általános szoftver az initramfs létrehozásához a sys-kernel/genkernel szoftverhez képest. Nem hoz létre kernelt, mint ahogy azt a genkernel teszi. Például, bár mind a genkernel, mind a dracut támogatja a LUKS-titkosított root kötetből történő indítást, csak a genkernel biztosítja, hogy a kernelhez minden szükséges opció be legyen állítva. Érdemes megemlíteni, hogy a genkernel saját maga fordítja le az initramfs fájlban használt legtöbb szoftvercsomagot (LVM, cryptsetup, mdadm, sshd...), míg a dracut a host számítógépes rendszerből másolja a bináris fájlokat, ami problémát okozhat bizonyos beállításoknál. Így a genkernel támogatja a kernel/initramfs létrehozását más rendszerhez (keresztfordítás), ellentétben a dracut szoftverrel vagy a genkernel-next szoftverrel.
Létrehozható külön kernel/initramfs tesztelési célokra?
root #
genkernel --kernel-config=/proc/config.gz --kernel-append-localversion=-test42 --menuconfig all
A fenti parancs arra készteti a genkernel szoftvert, hogy új bináris kernelképfájlt és új bináris initramfs képfájlt készítsen (all
), az aktuálisan futó kernelbeállítás alapján (--kernel-config=/proc/config.gz
). Ezenkívül elindítja a menuconfig szoftvert (--menuconfig
), amely lehetővé teszi a felhasználónak, hogy módosítsa a beállítást. A kernel LOCALVERSION változójához pedig hozzáfűzi a -test42
értéket (--kernel-append-localversion=-test42
), amely alapértelmezés szerint hatással lesz a kernelképfájl, a kernelmodulok könyvtárának és az initramfs képfájl elnevezésére.
Hogyan lehet a külső kernelmodulokat (például xtables-addons, nvidia-drivers...) az új kernelhez újból létrehozni?
Alapértelmezés szerint a genkernel a emerge @module-rebuild parancsot hívja meg a kernel létrehozása során, hogy biztosítsa, hogy a szoftvercsomag-kezelőn keresztül telepített külső kernelmodulok továbbra is elérhetők legyenek az újra létrehozott kernelben. Ez a funkció a --[no-]module-rebuild
parancssori argumentummal vagy a /etc/genkernel.conf fájlban található MODULEREBUILD beállítással kapcsolható ki és be.
Hogyan lehet további parancsokat futtatni a kernel fordítása után?
A Genkernel lehetőséget biztosít erre egy callback segítségével (a 4-es verzió előtt a callback-et külső kernelmodulok újbóli létrehozására használták). További részletekért tekintse meg a /etc/genkernel.conf fájlban található CMD_CALLBACK részt.
Hogyan használható a ccache vagy a distcc a genkernel szoftverrel?
Állítsa be a ccache szotvert vagy a distcc szotvert a szokásos módon, ahogy a sys-apps/portage esetében. A kívánt eszköz használatához adja meg a --kernel-cc
parancssori paramétert, vagy módosítsa a /etc/genkernel.conf fájlban a KERNEL_CC értékét. Ugyanezt tegye meg a UTILS_CC (--utils-cc
) és a UTILS_CXX (--utils-cxx
) esetében is.
ERROR: compile_kernel(): compile_generic() failed to compile the "bzImage" target!
Ellenőrizze először a /var/log/genkernel.log fájlt. A legtöbb esetben az alapvető probléma valami ilyesmi formájában fog megjelenni:
/var/log/genkernel.log
[...]
AR drivers/usb/built-in.a
AR drivers/built-in.a
GEN .version
CHK include/generated/compile.h
AR built-in.a
LD vmlinux.o
MODPOST vmlinux.o
ld: .tmp_vmlinux1: final close failed: No space left on device
make: *** [Makefile:1032: vmlinux] Error 1
* ERROR: compile_kernel(): compile_generic() failed to compile the "bzImage" target!
* Please consult '/var/log/genkernel.log' for more information and any
* errors that were reported above.
*
* Report any genkernel bugs to bugs.gentoo.org and
* assign your bug to genkernel@gentoo.org. Please include
* as much information as you can in your bug report; attaching
* '/var/log/genkernel.log' so that your issue can be dealt with effectively.
*
* Please do *not* report kernel compilation failures as genkernel bugs!
*
* mount: >> Boot partition state on '/boot' was not changed; Skipping restore boot partition state ...
>>> Ended on: 2019-12-16 02:30:19 (after 0 days 0 hours 07 minutes 49 seconds)
</pre>
Más szavakkal: A rendszer kifogyott a lemezterületből (No space left on device
) a fordítás során.
Az ilyen problémák elkerülése érdekében állítsa be a CHECK_FREE_DISK_SPACE_BOOTDIR=50
és CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR=4000
értékeket a /etc/genkernel.conf fájlban, így a genkernel már korán hibát jelezne egy olyan üzenettel, mint például:
root #
genkernel --kernel-config=/proc/config.gz all
* Gentoo Linux Genkernel; Version 4.0.1 * Using genkernel configuration from '/etc/genkernel.conf' ... * Running with options: --kernel-config=/proc/config.gz all * Working with Linux kernel 4.19.89-gentoo-x86_64 for x86_64 * Using kernel config file '/proc/config.gz' ... * * Note: The version above is subject to change (depends on config and status of kernel sources). * ERROR: 4000 MB free disk space is required in '/usr/src/linux' but only 1026 MB is available! [...]
Fontos a kernel parancssori argumentumainak sorrendje?
Nem.
Hiányzó szükséges kernel opció: 'CONFIG_MICROCODE_INTEL' vagy 'CONFIG_MICROCODE_AMD', amelyet a genkernel megpróbált beállítani!
A kernel v6.6 véglegesen alkalmazta a kernel beállítási paramétereket (részletek: ezt a commitot). Ez a [https://packages.gentoo.org/packages/sys-kernel/genkernel sys-kernel/genkernel 4.3.10-es verziójában] került javításra.
Segítség! Valami nem működik!
A probléma bejelentéséhez mindig biztosítsa a /var/log/genkernel.log fájlt (előfordulhat, hogy a fájlt tömöríteni kell, mielőtt megosztaná vagy csatolná a hibajelentéshez), mivel ez nagymértékben segítheti a fejlesztőket. Még akkor is, ha a parancsot --loglevel=1
(alapértelmezett) opcióval futtatja, a naplófájl mindig tartalmazni fogja a teljes kimenetet (nincs szükség újrafuttatásra bekapcsolt naplózással). Ez segíti a fejlesztőket a probléma megértésében, reprodukálásában és esetlegesen a javításában is.
További olvasnivaló a témában
- Dracut — an initramfs infrastructure and aims to have as little as possible hard-coded into the initramfs.
- Kernel — az operációs rendszer magja.
- Kernel/Configuration — describes the manual configuration and setup of the Linux kernel.
- Project:Distribution Kernel — aims to maintain sys-kernel/*-kernel packages.
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Tim Yamin, Jimi Ayodele, Thomas Seiler, Joshua Saddler (nightmorph), Sebastian Pipping (sping) , José Fournier (jaaf)
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.