Kernel/Frissítés
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:
- Az új kernel forráskódjainak a telepítése.
- A szimbolikus hivatkozás beállítása a (frissen telepített) kernel forráskódjaira.
- Átlépés az új kernelforráskód könyvtárába.
- 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.
- A kernelforráskódok és az initramfs forráskódok lefordítása bináris futtatható képfájlokra.
- A bootloader (a rendszerbetöltő) frissítése.
- A régi futtatható bináris kernelképfájl eltávolítása vagy megtartása.
É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:
- Alapértelmezett: A hivatkozás beállítása az eselect segítségével.
- Alternatív 1: A szimbolikus hivatkozás kézi úton történő frissítése.
- 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
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
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
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
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
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á:
- 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. - 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.
/etc/portage/env/sys-kernel/gentoo-sources
Automatizált kernelképfájl létrehozása és portage hook telepítésepost_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
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.
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
- Dracut — an initramfs infrastructure and aims to have as little as possible hard-coded into the initramfs.
- Genkernel
- Kernel/Configuration — describes the manual configuration and setup of the Linux kernel.
- Updating GRUB to a new kernel