Schließen Sie das Upgrade (4.18.0 → 5.8.8) des in AWS EC2 installierten Kernels (Red Hat Enterprise Linux 8 (HVM), SSD-Volume-Typ) ab.
Ein AWS EC2-Server (Red Hat Enterprise Linux 8 (HVM), SSD-Volume-Typ) wurde erstellt. Die Neuerstellung des Kernels wird reibungsloser, wenn Sie zum Zeitpunkt der Kompilierung und Installation einige hohe Systemressourcen (CPU, Speicher usw.) vorbereiten. Wenn Sie nicht über einen bestimmten Speicherplatz verfügen, wird beim Kompilieren möglicherweise ein Fehler angezeigt. In diesem Artikel lautet der Instanztyp "m5a.xlarge" (0,344 USD / Stunde) und die Festplattenkapazität "50 GB". Beachten Sie außerdem, dass das Kompilieren und Installieren je nach Spezifikation ** eine Stunde oder länger ** dauern kann.
Das Kompilieren und Installieren des Kernels nach Bedarf wird als "Neuerstellen des Kernels" bezeichnet. Es scheint, dass Sie in Betracht ziehen sollten, den Kernel in den folgenden Mustern neu zu erstellen.
-Der erforderliche Gerätetreiber (Kernelmodul) ist nicht im Kernel enthalten. -Ich möchte einen Kernel verwenden, der für die von mir verwendete Hardware optimiert ist. ・ Ich möchte die neuesten Funktionen des Kernels verwenden.
Sie benötigen den gcc-Compiler, das Dienstprogramm make, die Kernelquelle und die Kernel-Header, um den Kernel neu zu erstellen. Wenn Sie den Kernel neu erstellen, müssen Sie auch das Kernelmodul neu kompilieren.
Artikelnummer | Titel |
---|---|
1 | Bereiten Sie die Kernelquelle vor |
2 | Kernel-Einstellungen |
3 | Kompilieren von Kerneln und Kernelmodulen |
4 | Kernelmodul- und Kernelinstallation |
5 | Bestätigt |
Linux-Lehrbuch LPIC Level 2 Version 4.5 kompatibel So erstellen Sie den Kernel neu und aktivieren das Kernelmodul in CentOS Ich habe versucht, den Kernel (Linux-4.8.6) zu kompilieren und zu installieren
** ① Installation von Entwicklungswerkzeugen ** Root-Switch nach der Anmeldung des Betriebssystems
sudo su -
Überprüfen Sie die aktuelle Kernel-Version mit uname -r
#Die aktuelle Kernel-Version ist 4.18.0
[root@ip-172-31-42-117 ~]# uname -r
4.18.0-193.el8.x86_64
Installieren Sie die Tools, die zum Wiederherstellen des Kernels erforderlich sind (*). Es gab eine ungewöhnlich große Anzahl von Tools, die nicht installiert waren, aber es ist mir egal. ..
#Installieren Sie basierend auf der Referenzsite
yum groupinstall "Development Tools"
yum install kernel-devel
yum install rpm-build redhat-rpm-config unifdef
yum install ncurses ncurses-devel
#Danach wird eine zusätzliche Installation basierend auf dem Fehler durchgeführt, der tatsächlich während der Erstellung aufgetreten ist.
yum install elfutils-libelf-devel
yum install openssl-devel
yum install bc
** ② Kernelquelle herunterladen ** Installieren Sie den Befehl wget (laden Sie die Datei unter Angabe der URL herunter).
yum install wget
Wählen Sie die Kernelquelle unter https://www.kernel.org/ aus und laden Sie sie herunter.
Holen Sie sich diesmal die Kernel-Version 5.8.8
(09.09.2020).
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.8.8.tar.xz
Entpacken und auspacken.
tar Jxvf linux-5.8.8.tar.xz
Wechseln Sie in das Verzeichnis der extrahierten Kernelquelle
cd linux-5.8.8
** ① Aktualisiere die vorhandene Einstellungsdatei mit make old config **
Kopieren Sie die vom aktuellen Kernel verwendete Konfigurationsdatei in .config
(die Kernel-Konfigurationsdatei), um zu vermeiden, dass eine Kernel-Konfigurationsdatei von Grund auf neu erstellt wird.
cp -p /boot/config-4.18.0-193.el8.x86_64 .config
Aktualisieren Sie die Kernelkonfiguration.
Mit make oldconfig
können Sie nur nach den im neuen Kernel hinzugefügten Funktionen fragen.
Es ist möglich, die vorhandenen Einstellungen so zu verwenden, wie sie für die vorhandenen Einstellungen sind.
In diesem Artikel werden alle neuen Elemente auf die Standardeinstellungen gesetzt (drücken Sie einfach die Eingabetaste, ohne y oder n einzugeben). Für den "Kernel-Komprimierungsmodus", der eingestellt werden muss, wurde diesmal "1. Gzip (KERNEL_GZIP)" eingestellt.
make oldconfig
#Ausgabebeispiel für make old config
[root@ip-172-31-42-117 linux-5.8.8]# make oldconfig
scripts/kconfig/conf --oldconfig Kconfig
.config:1089:warning: symbol value 'm' invalid for NF_CT_PROTO_GRE
.config:2949:warning: symbol value 'm' invalid for ISDN_CAPI
*
* Restart config...
*
*
* General setup
*
#In der Vergangenheit vorhandene Elemente werden automatisch so umgeleitet, wie sie sind
Compile also drivers which will not load (COMPILE_TEST) [N/y/?] n
Local version - append to kernel release (LOCALVERSION) []
Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?] n
# (NEW)Erkundigen Sie sich hier nur nach neuen Artikeln, die als beschrieben werden
Build ID Salt (BUILD_SALT) [](NEW)
Kernel compression mode
> 1. Gzip (KERNEL_GZIP)
2. Bzip2 (KERNEL_BZIP2)
3. LZMA (KERNEL_LZMA)
4. XZ (KERNEL_XZ)
5. LZO (KERNEL_LZO)
6. LZ4 (KERNEL_LZ4)
choice[1-6?]: 1
(Kürzung)
** ② Passen Sie die Kerneleinstellungen mithilfe der Konfiguration make make ** an
Darüber hinaus ist es mit make menuconfig
möglich, Anpassungen mit der Auswahlformel jedes Einstellungselements des Kernels vorzunehmen.
Verwenden Sie dieses Mal make menu config, um die Kerneleinstellungen zu korrigieren (*), die den Kompilierungsfehler in der Überprüfungsphase verursacht haben.
Laut der Referenzsite ist die Kerneleinstellung, die den Fehler verursacht, ein Element namens CONFIG_SYSTEM_TRUSTED_KEYS (Wenn Sie die vorhandene Kerneleinstellungsdatei unter / boot kopieren, scheint dieses Element einen Kompilierungsfehler zu verursachen, es sei denn, Sie korrigieren ihn in eine leere Zeichenfolge.)
[root@ip-172-31-42-117 linux-5.8.8]# cat .config | grep "CONFIG_SYSTEM_TRUSTED_KEYS"
CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"
Beginnen Sie mit dem Ändern der Kerneleinstellungen.
make menuconfig
Wenn die folgende Konsole angezeigt wird, können Sie mit dem Cursor die Kernelkonfiguration festlegen. Bewegen Sie den Cursor auf den roten Rahmenteil des Bildes unten und drücken Sie die Eingabetaste, um ihn auszuwählen. Löschen Sie die standardmäßig aufgeführte Zeichenfolge, leeren Sie sie und geben Sie die Eingabetaste ein Speichern Sie schließlich in .config
Überprüfen Sie den Inhalt von .config, um festzustellen, ob die Änderungen übernommen werden
[root@ip-172-31-42-117 linux-5.8.8]# cat .config | grep "CONFIG_SYSTEM_TRUSTED_KEYS"
CONFIG_SYSTEM_TRUSTED_KEYS=""
Kompilieren Sie den Kernel und die Kernelmodule mit make
.
Es kann ohne Argumente ausgeführt werden. Da dieser Kompilierungsprozess jedoch viel Zeit in Anspruch nimmt, können Sie mit der Option -j die Anzahl der parallelen Prozesse ändern, um die Kompilierungszeit zu verkürzen (*).
Mit der Konfiguration in diesem Artikel dauerte das Kompilieren weniger als eine Stunde.
#Starten Sie die optimale Anzahl von Prozessen entsprechend der Anzahl der CPU-Kerne
JOBS=$[$(grep cpu.cores /proc/cpuinfo | sort -u | sed 's/[^0-9]//g') + 1]
make -j${JOBS}
#Der folgende Fehler tritt beim Erstellen auf
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
#Wie gesagt, CONFIG_DEBUG_INFO_BTF deaktivieren
[root@ip-172-31-42-117 linux-5.8.8]# cat .config | grep CONFIG_DEBUG_INFO_BTF
CONFIG_DEBUG_INFO_BTF=n
** ① Installation des Kernelmoduls **
#Vollständig ohne Fehler
make modules_install
Es ist in Ordnung, wenn das Verzeichnis / lib / modules / kernel version
wie unten gezeigt konfiguriert ist.
[root@ip-172-31-42-117 linux-5.8.8]# ls -l /lib/modules/5.8.8/
total 3440
lrwxrwxrwx. 1 root root 17 Sep 10 09:46 build -> /root/linux-5.8.8
drwxr-xr-x. 13 root root 141 Sep 10 09:47 kernel
-rw-r--r--. 1 root root 873761 Sep 10 09:47 modules.alias
-rw-r--r--. 1 root root 837562 Sep 10 09:47 modules.alias.bin
-rw-r--r--. 1 root root 8171 Sep 10 09:46 modules.builtin
-rw-r--r--. 1 root root 10467 Sep 10 09:47 modules.builtin.bin
-rw-r--r--. 1 root root 62064 Sep 10 09:46 modules.builtin.modinfo
-rw-r--r--. 1 root root 278819 Sep 10 09:47 modules.dep
-rw-r--r--. 1 root root 389096 Sep 10 09:47 modules.dep.bin
-rw-r--r--. 1 root root 405 Sep 10 09:47 modules.devname
-rw-r--r--. 1 root root 99497 Sep 10 09:46 modules.order
-rw-r--r--. 1 root root 521 Sep 10 09:47 modules.softdep
-rw-r--r--. 1 root root 422378 Sep 10 09:47 modules.symbols
-rw-r--r--. 1 root root 510059 Sep 10 09:47 modules.symbols.bin
lrwxrwxrwx. 1 root root 17 Sep 10 09:46 source -> /root/linux-5.8.8
** ② Kernel-Installation **
#Ohne Fehler abgeschlossen (Stellen Sie sicher, dass der Vorgang fehlerfrei abgeschlossen wurde. Ich habe mit einem Fehler neu gestartet und der Server wurde nicht gestartet.)
make install -j${JOBS}
Es ist in Ordnung, wenn das Kernel-Image "/ boot / vmlinuz-kernel version" wie unten gezeigt in / boot vorhanden ist.
[root@ip-172-31-42-117 ~]# ls -l /boot/vmlinuz*
lrwxrwxrwx. 1 root root 19 Sep 10 09:47 /boot/vmlinuz -> /boot/vmlinuz-5.8.8
-rwxr-xr-x. 1 root root 8913760 Apr 23 05:16 /boot/vmlinuz-0-rescue-bb64a14c7512444f9744c3076505b65f
-rwxr-xr-x. 1 root root 8920432 Sep 10 08:05 /boot/vmlinuz-0-rescue-ec211058807a3398326019a9b3f9e8bf
-rwxr-xr-x. 1 root root 8920432 Aug 26 19:47 /boot/vmlinuz-4.18.0-193.19.1.el8_2.x86_64
-rwxr-xr-x. 1 root root 8913760 Mar 27 14:48 /boot/vmlinuz-4.18.0-193.el8.x86_64
-rw-r--r--. 1 root root 8613632 Sep 10 09:47 /boot/vmlinuz-5.8.8
Nach dem Neustart ist es in Ordnung, wenn die Kernelversion wie unten gezeigt geändert wurde.
[root@ip-172-31-42-117 ~]# uname -r
5.8.8
Recommended Posts