Kernel/Frissítés

From Gentoo Wiki
< Kernel
Jump to:navigation Jump to:search
This page is a translated version of the page Kernel/Upgrade and the translation is 100% complete.

Ez a cikk leírja a Linux újabb verziójára való frissítés lépéseit a kernel segítségével.

Új kernelképfájl létrehozása az új forrásokból alapvetően ugyanaz a folyamat, mint a kernelképfájl elkészítése a rendszer telepítésekor. Az egyetlen különbség az, hogy időt lehet megtakarítani azzal, hogy a régi kernelforráskód beállítását a változásokhoz igazítjuk az új kernelforráskódban, ahelyett, hogy újra végigmennénk az összes kernel forráskódjának az opcióin (például make menuconfig).

Az új kernel forráskódjában lehetnek újonnan hozzáadott vagy eltávolított opciók és funkciók az előző kernel forráskódjához képest. Ezért az új kernel forráskódjának a konfigurációs fájlja tartalmazhat olyan bejegyzéseket, amelyeket a régi kernelforráskód beállításfájlja nem tartalmaz, és előfordulhat, hogy már nem tartalmazza a régi kernel forráskódjában még meglévő bejegyzéseket.

Ez a cikk útmutatást nyújt arról, hogy miként kezelhetők az ilyen beállításfájl változások azáltal, hogy a régi beállítást olyan beállítássá alakítjuk át, amely az új kernel forráskódjával használható.

A Gentoo kernelfrissítése az alábbi lépéseket foglalja magában:

  1. Az új kernel forráskódjainak a telepítése.
  2. A szimbolikus hivatkozás beállítása a (frissen telepített) kernel forráskódjaira.
  3. Átlépés az új kernelforráskód könyvtárába.
  4. A .config fájl módosítása az új kernelforráskód beállításában bevezetett vagy eltávolított opciókhoz igazítva.
  5. A kernelforráskódok és az initramfs forráskódok lefordítása bináris futtatható képfájlokra.
  6. A bootloader (a rendszerbetöltő) frissítése.
  7. A régi futtatható bináris kernelképfájl eltávolítása vagy megtartása.
Important
Érdemes biztonsági mentést készíteni a kernel beállításáról annak érdekében, hogy a korábbi beállítások ne vesszenek el. Sok felhasználó jelentős időt fordít arra, hogy megtalálja az operációs rendszer számára legmegfelelőbb beállítást, és ennek elvesztése semmiképpen sem kívánatos. A cikkben bemutatott egyik módszer, amely megtalálható a Korábbi kernelforráskód beállításának a másolása részben, felhasználható a beállításfájl biztonsági mentésére.

Új bináris kernelfájl forráskódjainak a telepítése a számítógépre

A bináris futtatható kernelképfájl frissítése a számítógépen jó ötlet lehet, amikor új kernelforráskódokat telepítünk a számítógépünkre. Új kernelforráskódok néha az operációs rendszer frissítése során települnek az alábbi parancs futtatásával:

root #emerge --ask --update --deep --with-bdeps=y --newuse @world

Természetesen közvetlenül is feltelepíthetőek a számítógépre a következő parancs segítségével (cserélje le gentoo-sources szöveget az éppen használt kernel verziójára):

root #emerge --ask --update --deep --with-bdeps=y --newuse sys-kernel/gentoo-sources

Pusztán az új kernelforráskódok feltelepítése a számítógépre nem biztosítja a felhasználó számára az új bináris futtatható lefordított kernelképfájlt. Szükséges az új kernel forráskódjaiból lefordítani binárisra és telepíteni egy új kernelképfájlt, majd szükséges újraindítani az operációs rendszert, hogy ténylegesen az új bináris kernelképfájl fusson.

Szimbolikus hivatkozás beállítása az új kernel forráskódjaira

A kernelforráskód beállítása a .config nevű fájlban van elmentve abban a könyvtárban, amely a kernel forráskódjait tartalmazza. Egy szimbolikus hivatkozás mutat erre a könyvtárra.

A /usr/src/linux szimbolikus hivatkozásnak mindig arra a könyvtárra kell mutatnia, amely az éppen futó bináris kernelképfájl forráskódjait tartalmazza. Ez három módon valósítható meg:

  1. Alapértelmezett: A hivatkozás beállítása az eselect segítségével.
  2. Alternatív 1: A szimbolikus hivatkozás kézi úton történő frissítése.
  3. Alternatív 2: A kernelforráskódok telepítése USE="symlink" használatával.

Alapértelmezett: Hivatkozás beállítása az eselect segítségével

A szimbolikus hivatkozás beállításához az eselect segítségével:

user $eselect kernel list
Available kernel symlink targets:
 [1] linux-3.14.14-gentoo *
 [2] linux-3.16.3-gentoo

Ez megjeleníti az elérhető kernelforráskódokat. A csillag jelzi a kiválasztott forráskódot.

A kernel forráskódjainak a módosításához, például a második bejegyzésre, használja a következő parancsot:

root #eselect kernel set 2

Alternatíva 1: Szimbolikus hivatkozás kézi úton történő frissítése

A szimbolikus hivatkozás kézi úton történő beállításához:

root #ln -sf /usr/src/linux-3.16.3-gentoo /usr/src/linux
user $ls -l /usr/src/linux
lrwxrwxrwx 1 root root 19 Oct  4 10:21 /usr/src/linux -> linux-3.16.3-gentoo

Alternatíva 2: Kernelforráskódok telepítése a symlink USE jelölőzászló használatával

Ezáltal a /usr/src/linux a frissen telepített kernel forráskódjaira fog rámutatni (úgymond ráhivatkozni).

Ha szükséges, akkor később még mindig módosítható a másik két módszer egyikével.

Átlépés az új kernelforráskód könyvtárába

Most rendben van a szimbolikus hivatkozás módosítása, így a következő lépés az új kernelforráskód könyvtárába való átlépés. Ehhez használja az alábbi parancsot:

user $cd /usr/src/linux
Note
Ez a parancs továbbra is szükséges, még akkor is, ha a munkakönyvtár már korábban is a /usr/src/linux volt a szimbolikus hivatkozás módosításakor. Amíg az új szimbolikus hivatkozás ténylegesen nem követi az új kernel forráskódjait, addig a konzol még mindig a régi kernelforráskód könyvtárában marad.

A .config fájl módosítása az új kernelforráskódok számára

Korábbi kernelbeállítás másolása

A régi kernelforráskódok beállítását át kell másolni az új kernelforráskódokhoz. A korábbi beállítás több helyen is megtalálható:

  • A procfs fájlrendszerben, ha az Enable access to .config through /proc/config.gz (CONFIG_IKCONFIG_PROC) kernelforráskód opció aktiválva volt az aktuális kernelforráskódokban (előfordulhat, hogy a "modprobe" használata szükséges a "configs" modul betöltéséhez, ha a "configs" modulárisan lett lefordítva a forráskódból bináris kódra):
root #zcat /proc/config.gz > /usr/src/linux/.config
  • A régi kernel forráskódból. Ez csak akkor működik, ha a régi kernel forráskódja a CONFIG_IKCONFIG beállítással lett fordítva:
root #/usr/src/linux/scripts/extract-ikconfig /path/to/old/kernel >/usr/src/linux/.config
  • A /boot könyvtárban, ha a beállítás oda lett telepítve:
root #cp /boot/config-3.14.14-gentoo /usr/src/linux/.config
  • Az éppen futó bináris kernelképfájl könyvtárában:
root #cp /usr/src/linux-3.14.14-gentoo/.config /usr/src/linux/.config
  • A /etc/kernels/ könyvtárban, ha a /etc/genkernel.conf fájlban SAVE_CONFIG="yes" beállítás van megadva, és korábban a genkernel használatban volt:
root #cp /etc/kernels/kernel-config-x86_64-3.14.14-gentoo /usr/src/linux/.config

A .config fájl frissítése

Note
Ha az OLDCONFIG és MENUCONFIG paraméterek engedélyezve vannak a /etc/genkernel.conf fájlban, akkor a make oldconfig és make menuconfig parancsok automatikusan végrehajthatók a genkernel eszköz segítségével a forráskódfordítási folyamat során. Ha az OLDCONFIG engedélyezve van a genkernel beállításában, vagy ha a genkernel parancshoz az --oldconfig opciót hozzáadják, akkor ugorjon az ebben a cikkben található build szekcióhoz.

Egy új kernelforráskód általában egy új .config fájlt igényel az új kernelforráskódban fellelhető funkciók támogatásához. A régi kernelforráskód .config fájlja átalakítható annak érdekében, hogy használható legyen az új kernelforráskóddal. Az átalakítás többféleképpen elvégezhető, például a make oldconfig vagy a make olddefconfig parancsok futtatásával.

make oldconfig

Important
A make syncconfig egy belső megvalósítási részletté vált. Amikor lehetséges, ajánlott a make oldconfig használata. A make silentoldconfig cél el lett távolítva a Linux 4.19-es és újabb verzióiban.

Ez a beállítás hasonló a szöveges alapú beállításhoz, amelyet a make config használ. Az új beállítások esetén a felhasználó döntésére van szükség. Például:

root #cd /usr/src/linux
root #make oldconfig
Anticipatory I/O scheduler (IOSCHED_AS) [Y/n/m/?] (NEW)

A sor végén található (NEW) jelölés azt mutatja, hogy ez az opció új. A zárójelekben balra láthatók a lehetséges válaszok: Y igen, n nem, m modul vagy ? a súgó megjelenítéséhez. Vegyük észre, hogy a javasolt (azaz alapértelmezett) válasz nagybetűvel van írva (itt Y). A súgó ismerteti az opciót vagy az illesztőprogramot.

Sajnálatos módon a make oldconfig nem ad túl sok további információt az egyes opciókról, például a kontextusról, így néha nehéz helyesen dönteni. Ebben az esetben a legjobb megoldás az, ha megjegyzi az opció nevét, majd később átnézi azt valamelyik grafikus kernel beállítási eszközön keresztül. Az új beállítások listázásához és a róluk való kutatáshoz a make listnewconfig használható a make oldconfig futtatása előtt.

make olddefconfig

A make olddefconfig futtatásával minden opciót megőriz az előző .config fájlból, miközben az új opciókat az ajánlott (azaz alapértelmezett) értékekre állítja:

root #cd /usr/src/linux
root #make olddefconfig

make help

A make help parancs segítségével megtekintheti a többi elérhető átalakítási módszert:

user $make help

Különbségek megfigyelése

Egy diff szoftver használható a régi és az új .config fájlok összehasonlítására annak érdekében, hogy meg lehessen tekinteni, vajon milyen opciók lettek hozzáadva:

user $comm -2 -3 <(sort .config) <(sort .config.old)
# CONFIG_BATTERY_RT5033 is not set
# Compiler: gcc (Gentoo 12.2.1_p20230428-r1 p2) 12.2.1 20230428
# Linux/x86 4.19.284-gentoo Kernel Configuration
CONFIG_ARCH_USE_MEMREMAP_PROT=y
CONFIG_GCC_VERSION=120201
CONFIG_GENTOO_PRINT_FIRMWARE_INFO=y
CONFIG_INET_TABLE_PERTURB_ORDER=16
CONFIG_PLUGIN_HOSTCC=""
CONFIG_RANDOM_TRUST_BOOTLOADER=y
CONFIG_UNIX_SCM=y
CONFIG_USER_NS=y

És melyeket távolították el:

user $comm -1 -3 <(sort .config) <(sort .config.old)
# CONFIG_GCC_PLUGINS is not set
# CONFIG_NVM is not set
# CONFIG_RANDOM_TRUST_CPU is not set
# CONFIG_USER_NS is not set
# Compiler: gcc (Gentoo 10.2.0-r5 p6) 10.2.0
# Linux/x86 4.19.184-gentoo Kernel Configuration
CONFIG_GCC_VERSION=100200
CONFIG_PLUGIN_HOSTCC="g++"

Alternatívaként a kernel egy szkriptet biztosít, amely tisztán összehasonlít kettő beállításfájlt, még akkor is, ha az opciók magában a fájlban el lettek mozgatva másik helyekre fájlon belül:

user $/usr/src/linux/scripts/diffconfig .config.old .config

make menuconfig

Az opciókat ezután meg lehet vizsgálni és szükség esetén módosítani kell az alábbi parancs futtatásával:

root #make menuconfig

A menuconfig cél hasznos, mert biztonságosan kezeli a kernel szimbólumfüggőségek feloldását.

Build

Kézi úton történő forráskód lefordítása és a futtatható kernelképfájl telepítése

Az új kernelforráskódoknak a beállítása után, ahogyan azt az előző szakaszokban ismertettük, folytassa annak lefordítását bináris kódra. Ha a kernelképfájltól elkülönülő kernelmodulok (például nvidia vagy zfs) vannak telepítve a rendszeren, akkor azokat is újra kell a forráskódból létrehozni az újonnan lefordított kernelképfájl számára annak érdekében, hogy biztosítsuk a kompatibilitást. Kezdje az új kernel forráskódjának a lefordítását az alábbi parancs segítségével:

root #make
root #emerge --ask @module-rebuild
Note
A -jN opció használata a make parancsnál (ahol N a párhuzamos folyamatok száma) felgyorsíthatja a forráskódfordítási folyamatot több processzorszálon futó rendszerek esetében. Például a make -j5 egy olyan rendszeren, amely négy logikai processzormaggal rendelkezik.

Miután a kernel és a kernelmodulok forráskódjai le lettek fordítva a számítógép által futtatható bináris kódra, mindkettő fájlt telepíteni kell:

root #make modules_install
root #make install

Végül a bootloadert (tehát a rendszerbetöltőt) újra kell be kell állítani annak érdekében, hogy figyelembe vegye az új bináris futtatható kernelképfájlhoz tartozó neveket, amint az alább le van írva. Ha az initramfs bináris futtatható képfájl is használatban van, akkor azt is újra kell a forráskódból fordítani.

Automatikus úton történő forráskódból lefordítás és a bináris képfájl(ok) telepítése

Lehetőség van az újonnan letöltött kernelforráskódok automatikus úton történő lefordítására és telepítésére Portage szoftvercsomag-kezelő "hook"-jainak a segítségével. Bár más megközelítések is alkalmazhatóak, mégis az alábbi módszer a genkernel és a gentoo-sources szoftvercsomagjaira épül. Az alábbi előfeltételek szükségesek hozzá:

  1. A genkernel all képes a forráskódból lefordítani és telepíteni a bináris futtatható kernelképfájlt, amelyre a /usr/src/linux szimbolikus hivatkozás mutat, a $BOOTDIR könyvtárban és a boot loadernben.
  2. A kernel ebuild esetében a symlink USE jelölőzászlója be van állítva.

Ha ezek a feltételek teljesülnek, akkor egyszerűen telepítsen egy post_pkg_postinst Portage hook-ot az alábbi módon. Ne feledje, hogy ez a genkernel parancsot a --no-module-rebuild opcióval hívja meg, mivel a module-rebuild használata azt eredményezné, hogy az emerge saját magát futtatná, és ez zárolási problémát okozna. Ne felejtse el futtatni az emerge @module-rebuild parancsot minden olyan frissítés után, amely kernelfrissítést tartalmaz.

FILE /etc/portage/env/sys-kernel/gentoo-sourcesAutomatizált kernelképfájl létrehozása és portage hook telepítése
post_pkg_postinst() {
# Eselect the new kernel or genkernel will build the current one
	eselect kernel set linux-"${KV}"
	CURRENT_KV=$(uname -r)
# Check if genkernel has been run previously for the running kernel and use that config
	if [[ -f "${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" ]] ; then
		genkernel --no-module-rebuild --kernel-config="${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" all
# Use latest kernel config from current kernel
	elif [[ -f "${EROOT}/usr/src/linux-${CURRENT_KV}/.config" ]] ; then
		genkernel --no-module-rebuild --kernel-config="${EROOT}/usr/src/linux-${CURRENT_KV}/.config" all
# Use known running good kernel
	elif [[ -f /proc/config.gz ]] ; then
		zcat /proc/config.gz >> "${EROOT}/tmp/genkernel.config"
		genkernel --no-module-rebuild --kernel-config="${EROOT}/tmp/genkernel.config" all
		rm "${EROOT}/tmp/genkernel.config"
# No valid configs known, compile a clean one
	else
		genkernel --no-module-rebuild all
	fi
}

Forráskód lefordítási problémák megoldása

Ha a jelenlegi kernel forráskódjának újbóli lefordítása során forráskódfordítási problémák lépnek fel, akkor hasznos lehet a kernel forráskódjainak a megtisztítása. Mindenképpen készítsen biztonsági másolatot a .config fájlról, mielőtt folytatná a tisztítási műveletet, mivel a művelet törölni fogja a .config fájlt. Ne használjon .bak vagy ~ végződést a biztonsági mentés fájlneveként, mivel a make distclean ezeket is törölni fogja.

root #cp .config /usr/src/kernel_config_bk
root #make distclean
root #mv /usr/src/kernel_config_bk .config

Bootloader frissítése

Hivatkozzon a bootloader, EFI stub bejegyzés Telepítés, vagy a Kézikönyv oldalaira az új kernel használatához.

Systemd-boot

A systemd-boot beállításfájl az új kernel forráskódokhoz automatikusan létrejön a kernelképfájl telepítésekor. Nincs szükség a kézi úton történő beavatkozásra.

A grub-mkconfig használata

Győződjön meg róla, hogy a /boot partíció fel van csatolva a fájlrendszerbe.

A következő parancs futtatható a GRUB beállításfájl frissítéséhez:

root #grub-mkconfig -o /boot/grub/grub.cfg
Warning
Ha maga a GRUB bootloader is frissült (nemcsak a kernelképfájl), például egy teljes operációs rendszerfrissítés részeként, akkor szükséges a GRUB újratelepítése is, különben előfordulhat, hogy nem indul el az operációs rendszer. A részletekért tekintse meg a GRUB#GRUB Bootloader Installation leírást.
Tip
A grub USE jelölőzászló engedélyezésével a sys-kernel/installkernel szoftvercsomagon a grub-mkconfig automatikusan újragenerálódik minden alkalommal, amikor egy új kernelképfájl települ.

Régi kernel eltávolítása

Tekintse meg a kernel eltávolítása cikket.

További olvasnivaló a témában

Külső források