Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
A2 Manuelle Konfiguration des Kernels I
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation
View previous topic :: View next topic  
Author Message
pietinger
Guru
Guru


Joined: 17 Oct 2006
Posts: 351
Location: Bavaria

PostPosted: Sat May 09, 2020 11:06 am    Post subject: A2 Manuelle Konfiguration des Kernels I Reply with quote

(Dieser Post ist Teil einer Installation-Anleitung. Falls nicht schon geschehen lies bitte: Installation Guide for Paranoid Dummies)



A.2 Manuelle Konfiguration des Kernels I.

Ich habe diesen Teil vom ersten und dritten Teil getrennt, weil er vermutlich der am längsten dauernde Part der Installation sein wird. Gleich vorweg: Versuche nicht im ersten Anlauf einen "perfekten" Kernel zu konfigurieren. Das dürfte kaum möglich sein und ist auch gar nicht notwendig. Das wichtigste für den Anfang ist, dass er überhaupt bootet. Wenn da der Sound noch nicht funktioniert, ist das kein Problem - das kann man alles nachholen. Je öfter Du die Konfiguration des Kernels "aufsuchst", desto größer wird das Verständnis, wo, welche Teile, wie zusammen gehören. Für den Anfang musst Du folgendes beachten:

1. Alles was der Kernel benötigt um seine Root-Partition zu finden MUSS fest in den Kernel eingebunden werden; also nicht als Modul ! Was das ist MÜSSEN wir also wissen.
2. Alles wovon wir wissen, dass wir es (immer) benötigen, binden wir nicht als Modul ein, sondern ebenfalls statisch (das hilft später, die Übersicht nach einem "lsmod" zu bewahren; noch später werden wir das tun um einen monolithischen Kernel zu basteln).
3. Wenn wir nicht wissen, was wir vielleicht zusätzlich benötigen, aktivieren wir alle relevanten Module und prüfen nach einem Neustart welche geladen wurden. Je weniger Module wir aber (unnötigerweise) mitcompilieren, desto schneller wird unser "make all".
4. Wenn wir wissen, das wir etwas nicht brauchen, schmeissen wir es sofort raus.
5. Editiere niemals die .config manuell ! Mache Änderungen an der Kernel-Konfig NUR über "make menuconfig". Du kannst gerne in der .config nach den vorhandenen Einstellungen suchen; manuell ändern darfst Du nichts ! Grund: Viele Parameter beeinflussen (=aktivieren) andere Parameter (meist sogar unsichtbare). Wer neugierig ist kann sich diese unsichtbaren anzeigen lassen indem Du "z" in der "make menuconfig" drückst (toggle-funktion).

Wir werden erst in A.3 einen Reboot durchführen. Sollte dann Dein Kernel nicht "durch-booten", führe bitte erneut folgende Schritte aus (oder falls Du jetzt eine Pause machen willst, um morgen weiter zu machen und Du den PC ausschaltest):
Code:
- boot with amd64-minimal CD
# /etc/init.d/dhcpd start
# mount /dev/sdXY /mnt/gentoo
# cd /mnt/gentoo
# mount -t proc /proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# chroot /mnt/gentoo /bin/bash
# . /etc/profile
# mount /dev/sdXZ /boot

Bevor wir loslegen, sammeln wir einige Daten (EDIT 2020-08-27: Näheres siehe auch im nächsten Post dieses Threads):
Code:
# dmesg | grep "Intel(R)"
-> write family,model,stepping to a paper  :-)
# lspci -k
-> write all "Kernel driver in use: xxxx" to a paper
# lsmod | more
-> write all modules - except above - to a paper

Es gibt verschiedene Empfehlungen, von welcher Grundkonfiguration aus gestartet werden sollte. Meiner Meinung ist das einfachste, mit der mitgelieferten .config zu beginnen und kein "allmodconfig" oder anderes zu verwenden. Verwende auch oft die Hilfe. Meistens gibt es neben einer guten Erläuterung auch eine Empfehlung der Kernel-Entwickler.

Noch ein Wort zur Sicherheit: Je weniger Software Du nutzt, desto weniger potentielle Angriffsflächen bietet ein System. Das gilt auch für den Kernel, den wir deshalb so schlank wie möglich halten wollen. Das bedeutet: Wenn Du Dir unsicher bist, ob Du einen Parameter benötigst, dann lass es lieber weg. Wenn etwas fehlt, merkst Du das sofort (weil irgend etwas nicht funktioniert). Wenn Du aber etwas einbindest, was nie mehr benötigt wird, merkst Du das leider gar nicht mehr. Also: Im Zweifelsfall erstmal weg lassen oder nur als Modul [M] konfigurieren (wenn dies möglich ist).

Ein letztes Wort zum Aufwand einer manuellen Konfiguration: Ja, er ist - einmalig - sehr hoch ! Aber - Du sparst Dir in Zukunft sehr viel Ärger und Zeit, denn für alles was auch nur entfernt mit Sicherheit zu tun hat, musst Du doch wieder etwas im Kernel manuell konfigurieren (firewall, verschlüsselung, raid, ima, evm, u.v.w.m.). Die Vermutung nach dem nutzen von genkernel wäre man alle Sorgen los, ist leider (momentan) ein Trugschluß.


Es wird zwar empfohlen stable und unstable nicht zu mischen, es gibt aber Ausnahmen, z.B. sind alle Spiele unstable. Und es ist möglich den neuesten Kernel in einer stable Installation zu verwenden. Falls Du das nicht willst, musst Du nur das "ACCEPT-KEYWORDS..." weglassen (wir editieren später noch die /etc/portage/package.accept_keywords). Achtung: Die nötigen unstable "linux-headers" dürfen wir erst später emergen. Los gehts:
Code:
# ACCEPT_KEYWORDS="~amd64" emerge -pv gentoo-sources
# ACCEPT_KEYWORDS="~amd64" emerge -pv intel-microcode
# emerge -pv linux-firmware
# cd /usr/src/linux
# make menuconfig

1. Als erstes müssen alle Teile die ein MUSS sind rein (siehe oben Punkt 1). Lies dazu:
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel

Wir haben keine 32-bit-Unterstützung, also raus damit. Wir haben nur EXT4. Das folgende sollte deshalb genügen:
Code:
Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
Device Drivers --->
   SCSI device support  --->
      [*] SCSI disk support
File systems --->
 [ ] Second extended fs support
 [ ] The Extended 3 (ext3) filesystem
 [*] The Extended 4 (ext4) filesystem
 [*]   Use ext4 for ext2 file systems
 [*]   Ext4 POSIX Access Control Lists
 [*]   Ext4 Security Labels
 [ ] JBD2 (ext4) debugging support
 [ ] Reiserfs support
 [ ] JFS filesystem support
 [ ] XFS filesystem support
 [ ] GFS2 file system support
 [ ] Btrfs filesystem support
  DOS/FAT/NT Filesystems  --->
    [*] MSDOS fs support
    [*] VFAT (Windows-95) fs support
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Tmpfs virtual memory file system support (former shm fs)
Processor type and features  --->
  [*] Symmetric multi-processing support
  [*] Machine Check / overheating reporting
  [*]   Intel MCE Features
  [ ]   AMD MCE Features
Device Drivers --->
  HID support  --->
    -*- HID bus support
    <*>   Generic HID driver
    [*]   Battery level reporting for HID devices
      USB HID support  --->
        <*> USB HID transport layer
  [*] USB support  --->
    <*>     xHCI HCD (USB 3.0) support
    <*>     EHCI HCD (USB 2.0) support
    < >     OHCI HCD (USB 1.1) support
Executable file formats / Emulations  --->
   [ ] IA32 Emulation   

-*- Enable the block layer --->
   Partition Types --->
      [*] Advanced partition selection
      [*] EFI GUID Partition support
Processor type and features  --->
    [*] EFI runtime service support
    [*]   EFI stub support
    [*]     EFI mixed-mode support
Firmware Drivers  --->
    EFI (Extensible Firmware Interface) Support  --->
        <*> EFI Variable Support via sysfs
Power management and ACPI options  --->
 [*] ACPI (Advanced Configuration and Power Interface) Support
General setup  --->
 [*] Checkpoint/restore support

In allen Links die ich Dir jetzt gebe ist nur der Teil für die Kernel Konfiguration wichtig (aber natürlich kannst Du gleich alles lesen ... für später).

Für Deine Festplatte (auch SSD) lies dies und konfiguriere so:
https://wiki.gentoo.org/wiki/HDD

Wenn Du eine NVMe-Platte hast, lies dies und konfiguriere so:
https://wiki.gentoo.org/wiki/NVMe

Falls Du KEINE heutzutage gebräuchliche SATA Festplatte hast (also z.B. PATA oder schlimmer), lies dies und konfiguriere so:
https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide#IDE_chipsets_and_DMA

Was man auch noch lesen kann (aber nicht unbedingt notwendig ist):
https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide

Speichere jetzt gleich die Konfiguration, damit Du einen definierten Stand hast, falls Du Dich später irgendwo vertust. Dann kannst Du nämlich die Konfiguration OHNE Sichern verlassen und von diesem Punkt aus neu starten (mit "make menuconfig").

2. MUSS: Konfiguriere Deine Grafikkarte anhand dieser Links:
https://wiki.gentoo.org/wiki/Intel
- oder -
https://wiki.gentoo.org/wiki/Nouveau
- oder -
https://wiki.gentoo.org/wiki/AMDGPU
... und speichere ... :-)

3. MUSS: Konfiguriere als nächstes den Microcode anhand dieser Links und Deiner Daten auf Deinem ersten Blatt Papier:
https://forums.gentoo.org/viewtopic-t-1065464.html
- und / oder -
https://wiki.gentoo.org/wiki/Intel_microcode (chapter: "NEW method without initram-fs/disk")
- oder -
https://wiki.gentoo.org/wiki/AMD_microcode
... und speichere ... :-)

4. MUSS:
a. Tastatur und Maus:
https://wiki.gentoo.org/wiki/Libinput
4b: Falls Du eine USB-Tastatur und/oder Maus hast, MUSST Du folgendes konfigurieren:
https://wiki.gentoo.org/wiki/USB/Guide
Hier aktivierst Du dann auch gleich "USB Mass Storage support" und ggf. "USB Printer support"

5. MUSS: Suche Deinen Ethernet-Treiber indem Du ein / im Hauptmenü eingibst. Danach gib den Modul-Namen aus Deinen Notizen von oben ein. Du erhältst ein "Defined at drivers/net/ethernet/....". Genau da gehst Du rein, aktivierst Dein Ethernet-Modul und löscht bei allen anderen Ethernet-Modulen das "m" raus (sofern vorhanden), da wir sonst keine anderen Ethernet-Module unnötigerweise mitcompilieren wollen.

6. MUSS: Mache Schritt Nr. 5 für alle übrig geblienen Module aus Deiner Abfrage mit "lspci -k" (einige hast Du ja vermutlich bereits gesetzt, wie z.B. vermutlich ahci) ... und speichere ... :-)

Das sollte vorerst genügen und Du kannst den Kernel gleich compilieren. Wenn Du in A.3 einen Neustart gemacht hast und somit weißt, dass dieser Kernel bootet, kannst Du in aller Ruhe weiter konfigurieren.

Folgendes gilt es - jetzt oder später - "abzuarbeiten":
------
- https://wiki.gentoo.org/wiki/ALSA
- https://wiki.gentoo.org/wiki/Power_management/Guide
- https://wiki.gentoo.org/wiki/System_time
- https://wiki.gentoo.org/wiki/ECryptfs
- Für KDE Vaults (meine Empfehlung) benötigen wir: https://wiki.gentoo.org/wiki/Encfs
- Optional: https://wiki.gentoo.org/wiki/CDROM
- Mache Schritt Nr. 5 für alle Module aus Deiner "lsmod"-Abfrage ... (die meisten dürften jedoch schon aktiviert sein).
- Zuletzt entferne alles, was definitiv nicht gebraucht wird. Bei mir z.B.: Alles mit IPv6, initramfs, serielle und paralelle Treiber, und alle INTEL_MEI-Module (lies in der Hilfe was das ist und ob Du das wirklich willst/brauchst ;-) ).
------

Nun compilieren wir den Kernel und installieren ihn automatisch nach /boot mittels "make install". Benutze beim Paramter "-j" die Anzahl der Kerne Deiner CPU (ich habe 8 ). Aufgrund meines Backup-Konzepts erstelle ich ein Verzeichnis in /etc und kopiere dort die Kernel-Konfiguration rein.
Code:
# make -j 8
# make install
# make modules_install
# mkdir /etc/MY
# cp .config /etc/MY/config-X-Y-Z
# eselect kernel list
! It is the first kernel we have nothing to set. Later we need:
# eselect kernel set

Ausblick: Im zweiten Teil der manuellen Konfiguration des Kernels werden wir u.a. das umsetzen:
https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings

Vorläufiges Cheat Sheet (gültig ab Reboot in A.3):
Code:
Neue Kernel-Version:
--------------------
# emerge -1uvDp gentoo-sources
# mount /boot
# cd /usr/src/linux-X.Y.Z-gentoo
# cp /usr/src/linux/.config .
# make oldconfig
# make -j 8
# make install
# make modules_install
# cp .config /etc/MY/config-X-Y-Z
# grub-mkconfig -o /boot/grub/grub.cfg
# eselect kernel list
# eselect kernel set
# umount /boot

Änderung der Konfiguration des bestehenden Kernels:
---------------------------------------------------
# mount /boot
# cd /usr/src/linux
# make menuconfig
# make -j 8
# make install
# make modules_install
# cp .config /etc/MY/config-X-Y-Z-revA
# grub-mkconfig -o /boot/grub/grub.cfg
# umount /boot


Weiter gehts es in A.3


Last edited by pietinger on Wed Oct 28, 2020 11:08 am; edited 28 times in total
Back to top
View user's profile Send private message
pietinger
Guru
Guru


Joined: 17 Oct 2006
Posts: 351
Location: Bavaria

PostPosted: Thu Aug 27, 2020 11:27 am    Post subject: Google Deine Hardware Reply with quote

Google Deine Hardware

1. Jeder Hersteller Deines Motherboards gibt Dir exakte Informationen über die verwendeten Chipsätze. Diese benötigst Du mindestens für Deine Soundkarte, da Du im Kernel den notwendigen Codec enabeln musst, Du diesen aber in keiner lspci-Abfrage siehst. Wenn Du für Deine Soundkarte vom Hersteller die Information "ALCxxxx" bekommst, weisst Du sofort, dass Du die "Realtek-Codecs" enabeln musst.

2. Die zweite Anlaufstelle ist "cateee.net". Mache diese Abfrage (das "n" ist wichtig):
Code:
# lspci -vn

und google dann nach "cateee" gefolgt von der achtstelligen ID-Nr. Beispiel von meiner Kiste:
Code:
[...]
00:1f.3 0403: 8086:a2f0
        Subsystem: 1458:a0b6
        Flags: bus master, fast devsel, latency 32, IRQ 138
        Memory at ef220000 (64-bit, non-prefetchable) [size=16K]
        Memory at ef200000 (64-bit, non-prefetchable) [size=64K]
        Capabilities: [50] Power Management version 3
        Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Kernel driver in use: snd_hda_intel
[...]

Meine Suche war dann nach: "cateee 8086:a2f0" ! Dort findest Du das benötigte Kernel-Modul.
Back to top
View user's profile Send private message
pietinger
Guru
Guru


Joined: 17 Oct 2006
Posts: 351
Location: Bavaria

PostPosted: Tue Oct 20, 2020 11:59 am    Post subject: Check neue Kernel Version Reply with quote

Vielen Dank an @mike155 der hier https://forums.gentoo.org/viewtopic-p-8517143.html#8517143 diesen einfachen und genialen Tip gab, den ich einfach 1zu1 hier reinkopiere:

mike155 wrote:
In order to avoid mistakes building the kernel, I run
Code:
dmesg -t >dmesg-$(uname -r)

whenever I compile and boot a new kernel. After that, I compare the newly created dmesg file with the dmesg file of the previous kernel (diff). The diff quickly shows missing drivers, different setting or other issues. If I had modules enabled, I would probably also run 'lsmod >modules-$(uname -r)' whenever I compile and boot a new kernel - and compare the modules-files.

Ja, der Trick mit dem Parameter "-t" für dmesg war mir auch neu (man lernt nie aus).

Als KDE-User empfehle ich "Kompare" um die beiden Dateien zu vergleichen.

Habe ich eigentlich schon mal irgendwo erwähnt, dass man ruhig öfter mal in seine /var/log/messages schauen sollte ... ;-)
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum