Niveau :
Résumé : make menuconfig ; make ; make-kpkg
Un bon sysadmin doit savoir recompiler son noyau, et ce pour plusieurs raisons. Tout d'abord, c'est l'occasion de passer en revue les nouveautés (support d'un nouveau driver, changement d'architecture ...), c'est aussi comme ça qu'on peut ajouter les patchs dont on a besoin. Ensuite cela peut permettre de se passer de l'initrd (et donc de gagner une étape au boot) et enfin cela permet de faire des noyaux purement monolithiques si l'on veut renforcer la sécurité d'équipements critiques.
Avant de compiler un noyau, il faut le configurer. Cette étape est longue, très longue, surtout pour une première fois. Mais c'est aussi la plus intéressante. Je vais donc vous la présenter en long, en large, et surtout en travers. Si cela vous parait lourd, ne partez pas, sautez quelques étapes et revenez-y plus tard.
La base
Commençons par récupérer les sources du noyau. Personnellement je prends les sources officielles de Linus, simples à trouver :
# usuellement on se met dans /usr/src, mais ça n'a rien d'obligatoire $ lftp ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.XXX.tar.bz2 # qu'on va décompresser $ tar xfj linux-2.6.XXX.tar.bz2 $ cd linux-2.6.XXX # les debianeux peuvent aussi avoir les sources patchés debian $ apt-get install linux-source-2.6.XX
Nous allons récupérer la configuration actuelle du noyau pour partir sur des bases saines et ne pas avoir peur de tout casser si on saute une étape. Le fichier de configuration s'appelle .config
# la meilleur méthode si disponible : lire la configuration en live $ zcat/proc/config.gz > .config # sinon récupérer un ancien fichier $ cp ../linux-2.6.XX-1/.config . # ou celui fourni par la distrib $ cp /boot/config-2.6.XX-1 .config
Lançons la configuration :
# en mode texte (il vous faut libncurses5-dev) $ make menuconfig # en mode graphique (qvec qt depuis quelque temps) $ make xconfig # ou avec gtk $ make gconfig
Le mode graphique a l'avantage de vous autoriser à voir les options cachées par des dépendances. Notez que les purs qui veulent uniquement configurer les nouveautés lors de la mise à jour d'un noyau lancent la commande suivante :
$ make oldconfig
Après ceci, on va voir les options, mises en fin d'article pour plus de lisibilité. Lorsque vous ne savez pas quoi mettre, une valeur par défaut vous est généralement suggérée. Le menu est simple et vous permet d'avoir une aide, d'entrer dans un sous menu ou de sélectionner une entrée. Un certain nombre d'entrées (entre <>) peuvent être mises en module (M) ou en dur (*) au choix.
Évitez les valeurs marquées EXPERIMENTAL ou OBSOLETE. NEW indique une entrée que vous n'avez encore jamais modifiée. Une aide est disponible pour la plupart des options. "Généralement" quelque chose en trop prend de la place et du temps de compilation mais ne gêne pas la fonctionnement du noyau. Les distributions activent toujours un très grand nombre d'options pour supporter un maximum d'architectures, en module pour éviter les problèmes de boot.
Et maintenant, on compile :
# le noyau et ses modules $ make # si vous êtes sous debian vous allez préférer faire un paquet $ make-kpkg binary-arch
Et on installe :
# le noyau va dans /boot et les modules dans /lib/modules/2.6.XXX $ make install # debian $ dpkg -i ../linux-2.6.XXX.deb
Les options
Détaillons les options disponibles (on peut en compter 2000 donc prenez votre temps), enfin les plus importantes.
Ici un 2.6.26 sur amd64, les options varient au cours des versions, mais en général assez peu. Si vous ne voyez pas certaines options, il est possible qu'elles ne soient pas disponibles pour votre architecture, mais il est aussi possible qu'elle dépende d'une autre option que vous n'avez pas activée :
- General setup : ce qu'on ne sait pas classer ailleurs
- paging of anonymous memory : support de la swap, indispensable
- System V IPC : communication interprocessus, indispensable
- BSD Process Accounting : pour surveiller l'activité de vos processus
- Kernel .config support : pratique pour récupérer la configuration en live comme on vient de le faire
- Initial RAM filesystem and RAM disk : pour booter sur un initrd (utile en prévision de ...)
- Disable heap randomization : sécurisation contre certaines exploitations de failles (si non coché), peut empêcher de vieux programmes (genre libc5) de fonctionner.
- Enable loadable module support : pour charger des modules en live (modprobe ...)
- Module unloading : indispensable sauf question de sécurité
- Automatic kernel module loading : bien pretique pour les desktop
- Enable the block layer : écriture sur disque, toussa
- IO Schedulers : la technique utilisée pour optimiser les lectures / écritures sur disque. Utilisez CFQ sauf si vous avez des problèmes spéciaux
- Processor type and features : le processeur est un périphérique comme un autre
- Tickless System : c'est grâce à ça que vous faites des économies d'énergies et que la virtualisation ne rame pas
- High Resolution Timer : c'est bien, vous pourrez théoriquement faire des sleep à la nanoseconde
- Symmetric multi-processing : multi coeurs, multiprocesseurs, hyperthreading, c'est ici, mais ça ne coûte rien de le mettre dans tous les cas
- Paravirtualized guest : pour ceux qui veulent acccélérer la virtualisation sous kvm
- Memtest boot parameter : c'est tout nouveau, le noyau peut faire des tests mémoire
- Processor family : c'est ici que vous choisissez l'optimisation à la compilation
- Preemption Model : change la méthode de réaction aux évènements, plus ils réagit vite moins ils peut en traiter (d'où la distinction serveur pour la quantité, et bureau pour la réactivité)
- Machine Check Exception : à activer, permet par exemple d'éviter que le processeur grille en cas de surchauffe (si c'est supporté)
- Allow for memory hot-add : c'est explicite non ? Attention, le matériel doit le supporter (ou c'est une machine virtuelle)
- MTRR : pour gérer les méthodes d'accès aux différentes portions de mémoire, indispensable pour beaucoup de driver vidéo
- x86 PAT support: pareil en mieux, oui
- Timer frequency : nombre d'interruptions par seconde de l'espace utilisateur par le noyau (même genre influence que la préemptivité)
- kexec system call : c'est récent, ça permet de lancer un nouveau noyau à la place d'un noyau existant (utilisé pour les freeze et pour la récupération d'infos en cas de crash)
- Power management options : a surveiller pour les portables
- Suspend to RAM and standby : explicite non ?
- Hibernation (aka 'suspend to disk') : idem
- ACPI : gère tout ce qui est lié aux trucs électriques dans votre machine, les infos de la batterie, le bouton power, le ventilateur ...
- CPU Frequency scaling : à activer pour permettre de faire varier la fréquence (et donc la consommation) de votre processeur, les "governor" sont les techniques de gestion, choisissez au moins "userspace" pour permettre de le gérer avec un démon genre cpufreqd, et choisissez le driver correspondant à votre processeur
- CPU idle PM support : a activer pour encore plus d'économies
- Bus options (PCI etc.) : toutes les cartes qui se branchent sur la carte mère
- Notez le support pci, pci express, isa, et le pci hotplug (matériel compatible, ou prière+driver fake pci hotplug)
- Executable file formats : méthode utilisée pour charger des binaires comme votre shell
- Kernel support for ELF binaries : indispensable
- Kernel support for MISC binaries : peu de gens l'utilisent, c'est pour lancer nativement des choses qui ne sont pas des binaires natifs (du java, des programmes DOS ...)
- Kernel support for a.out binaries : support des vieilles bouses
- IA32 Emulation : spécial 64 bits pour lancer des exécutables 32 bits
- Networking : support du réseau, attention c'est long
- Device Drivers : trèèès long, en général je finis par ça
- Firmware Drivers : en avez-vous vraiment besoin ?
- File systems : linux est très fort
- ext2, ext3, ext4, reiserfs, jfs, xfs : activez ce dont vous avez besoin
- OCFS2: fs distribué
- Inotify file change notification : indispensable de nos jours
- Dnotify : comme inotofy en moins bien, devrais bientôt disparaître
- Inotify support for userspace : à activer aussi
- Quota : pour limiter l'espace disque consommé par chaque utilisateur
- Kernel automounter version 4 : automount, il est probable que vous l'utilisiez
- Filesystem in Userspace : indispensable de nos jours
- CD-ROM/DVD Filesystems : oui
- DOS/FAT/NT Filesystems : c'est vous qui voyez, notez que pour l'écriture sur du NTFS vous n'aurez le droit que de modifier des fichiers existants sans en changer la taille
- Pseudo filesystems
- /proc file system : bien sûr
- Virtual memory file system : fréquemment utilisé pour des fichiers temporaires
- Miscellaneous filesystems : des systèmes obsolètes ou rarement utilisés
- Network File Systems : NFS, voisinage réseau windows (SMB pour les vieux, CIFS pour les récents)
- Partition Types : gestion des partitionnements exotiques (bsd, atari, solaris, volumes dynamiques windows ...)
- Native language : support d'encodages dans les systèmes de fichiers, indispensable pour ne pas tout casser pendant les copie sur des systèmes non Linux. Choisissez une langue par défaut, celle que vous utilisez pour stocker vos fichiers sur votre /, et que vous utilisez probablement en console.
- Kernel hacking : plein de bidouilles
- Magic SysRq key : la seule qui vous intéresse vraiment, elle permet d'utiliser les combinaisons alt-sysrq-x
- Security options :
- Enable different security models / Default Linux Capabilities : très utiles pour un certain nombre de logiciels (comme vsftpd), permet de limiter les droit d'un processus, même root
- Cryptographic API : outils de chiffrement et de checksum
- ... nombreux algorithmes à activer à volonté, certains le sont déjà car ils sont utiles à d'autres modules (comme IPSec)
- Virtualization : c'est récent
- Kernel-based Virtual Machine : virtualisation à base de processeur spécialisé (intel VT, ou amd V)
- Virtio balloon driver : permet d'augmenter et réduire en live la mémoire allouée aux machines virtuelles
- Library routines : du bazar, laissez les dépendances se faire
Je séparé 2 sections un peu longues. Le réseau :
- Networking options : tout ce qui est lié à ip, au dessus, au dessous et à coté, l'usage de tout ce qui se trouve ici est décrit dans le LARTC
- Packet Socket : permet l'accès direct aux paquets (raw), utilisé par les sniffeurs, ids ...
- Unix domain sockets : les socket unix, utilisé par tout le monde
- TCP/IP networking : la seule l'unique
- IP: multicasting : support du multicast en tant que client ou serveur
- IP: policy routing : pour faire des choses comme du source routing
- IP: equal cost multipath : lorsque vous avez plusieurs sorties disponibles sur une passerelle (plusieurs fai par exemple)
- IP: verbose route monitoring : divers warning sur les paquets reçus
- IP: kernel level autoconfiguration : client dhcp dans le noyau (ceci devrait en pratique être en userland, mais c'est quasiment indispensable pour le root nfs)
- IP: tunneling : pour faire des tunnel ip/ip (utilisez plutôt GRE si vous avez le choix)
- IP: GRE tunnels over IP : tunnels ip over ip mais compatibles cisco
- IP: multicast routing : si vous êtes un routeur dans une architecture multicast (attention le multicast nécessite aussi des outils userland)
- IP: TCP syncookie : très pratique pour éviter les synflood, on conseille tout de même de le désactiver car il ne supporte pas un certain nombre d'options TCP
- AH, ESP, IPComp IPSec : support IPSec sur IPv4
- Large Receive Offload : regrouper les paquets reçus pour les traiter par bloc (réduit la consommation cpu si vous avez beaucoup de paquets)
- INET: socket monitoring interface : pour avoir des statistiques sur les communications
- TCP: advanced congestion control : contrôle de congestion pour ceux qui ont des sites surchargés
- IP virtual server : pour faire du loadbalancing (par exemple avec keepalived)
- The IPv6 protocol : devinez (en sous menu on trouve les différentes options ipv6 correspondant aux différentes extensions d'en-têtes
- Network packet filtering framework (Netfilter) : le firewall
- Core Netfilter : les options de filtrage et matching non spécifiques ip
- IP: Netfilter : les options de filtrage et matching spécifiques ipv4
- IPv6: Netfilter : les options de filtrage et matching spécifiques ipv6
- Bridge: Netfilter : pour faire du filtrage au niveau ethernet (ou même du nat ethernet, c'est possible :-)
- 802.1d Ethernet Bridging : faire fonctionner la machine comme un switch (un pont en fait)
- 802.1Q VLAN Support : support des vlan taggués (c'est la machine qui choisit sur quels vlans elle est)
- DECnet Support : pour les ancêtres
- The IPX protocol : aussi
- Appletalk protocol : aussi
- QoS and/or fair queueing : pour faire de la régulation de réseau (traffic shaping ou qos)
- Queueing/Scheduling : les différentes techniques d'ordonnancement des paquets en fonction de leur classes (plus ou moins équitables)
- Classification : les différentes méthode pour savoir quel paquet mettre dans quelle classe
- Actions : pour faire un peu plus que de la qos avec les classes précédentes
- Amateur Radio support : pour ceux qui bidouillent
- IrDA (infrared) : pour la communication infrarouge avec votre téléphone portable
- IrCOMM protocol : transformer votre port infrarouge en port série, c'est le moyen de communication le plus couramment utilisé pour les téléphones.
- IrNET protocol : pour faire du réseau PPP (donc ip) sur votre infrarouge
- Bluetooth subsystem : les dents bleues
- L2CAP protocol : base du protocole utile pour avoir le reste
- SCO links : pour les oreillettes
- RFCOMM protocol : pour les communication série (transfert de vcard, de fichier unique ...)
- BNEP protocol : pour les réseaux locaux (PAN) de périphériques bluetooth
- HIDP protocol : pour les périphériques bluetooth d'entrée comme le clavier ou la souris
- Wireless : la base des driver wifi
- Generic IEEE 802.11 Networking Stack (mac80211) : nouvelle pile réseau utilisé (théoriquement) dans tous les nouveaux drivers wifi
Et les drivers, c'est très long, tout n'y est pas :
- Memory Technology Device (MTD) : les cartes flash
- ... on y trouve en fouillis les différents drivers
- UBI - Unsorted block images : la base d'une gestion unifiée des périphériques flash
- Parallel port support : on en trouve encore :-)
- Plug and Play support : pareil
- Block devices : quelques périphériques de bloc qui ne rentrent pas ailleurs
- Normal floppy disk support : disquettes
- Loopback device support : les /dev/loopX
- Cryptoloop : c'est dépassé, utilisez device mapper
- Network block device support : accéder à des disques à distance (à la iscsi), on peut faire des trucs assez sympa avec ça
- RAM block device support : les ramdisk, des faux disques entièrement en ram, ceux qui étaient utilisés avant pour les initrd
- Packet writing on CD/DVD media : pour faire croire à votre système qu'on peut écrire sur un CD comme sur un disque dur
- ATA over Ethernet support : pour faire comme de l'iscsi mais avec de l'ata (ide ou sata)
- ATA/ATAPI/MFM/RLL : tous les trucs que vous branchez en ide
- Enhanced ... : tout sauf les vieilles bouses
- Include IDE/ATA-2 DISK : indispensable
- Include IDE/ATAPI CDROM : lecteurs et graveurs cd
- SCSI emulation : inutile
- ... les autres options sont des fix pour permettre d'activer proprement le dma (entre autre) sur les différents chipset disponibles
- Old hard disk : les vieilles bouses
- Enhanced ... : tout sauf les vieilles bouses
- SCSI device
- ... On trouve d'abord les différentes options et périphériques scsi
- SCSI generic : les trucs scsi qui ne sont pas des disques
- SCSI disk : il parait que c'est aussi indispensable pour le sata
- SCSI low-level drivers : les drivers pour les cartes scsi
- Serial ATA (prod) and Parallel ATA : pour les disques sata (et remplacera aussi bientôt les driver pour ide)
- ATA SFF support : indispensable, et dessous les support de tous vos chipsets
- Multiple devices driver support (RAID and LVM) : md (multiple device) et dm (device mapper)
- RAID : les différentes formes de raid possible
- Device mapper : ce que je vous ai présenté il y a peu
- Fusion MPT device support : vous en avez ? vous êtes riche, achetez la doc
- IEEE 1394 (FireWire) : firewire
- OHCI-1394 controllers : la plupart des drivers utilisent ceci
- I2O device : protocole "intelligent..." utilisé par certaines cartes scsi, raid,
- Macintosh device drivers : la souris a 2 boutons !!
- Network device : vos cartes réseau
- Dummy net driver : pour faire des tests
- Bonding driver : pour coupler 2 cartes réseau en une seule
- EQL (serial line load balancing) : pour répartir du traffic entre 2 ports série
- Universal TUN/TAP device driver : des cartes virtuelles (pour les tunnels ou les machines virtuelles)
- PHY Device support and infrastructure : certains drivers se basent sur celui-ci
- Ethernet 10, 100, 1000, 10000 : tout est supporté, vous devriez trouver votre bonheur
- Token Ring driver : papyyyyy
- Wireless LAN : le wifi
- Wan interfaces : pour les cartes réseaux longue distance
- PLIP (parallel port) : bidouilles pour communiquer sur le port parallèle
- PPP (point-to-point protocol) : pour faire des tunnels ou communiquer sur port série ou modem
- SLIP (serial line) : même genre
- ISDN : Il y a encore des abonnés numeris dans la salle ?
- Input device :
- Mouse interface : en général oui
- Joystick interface : pour que les joysticks soient visibles
- Event interface : l'interface d'avenir pour xorg
- Miscellaneous devices / PC Speaker support : hé oui il est bien caché
- ... souris, claviers, joysticks, touchscreen
- Character devices : ce qu'on accède octet par octet
- /dev/kmem virtual device : accès direct à la ram
- Serial drivers : c'est ici
- Legacy (BSD) PTY : si certains logiciels ne supportent pas encore les pts (ça se fait rare)
- Parallel printer : tout le monde a ça dans sa poubelle
- Hardware Random Number Generator Core : dommage, ils ne se trouvent que rarement
- /dev/nvram : pour ceux qui ont de la nvram (routeurs wifi par exemple)
- RAW driver (/dev/raw/rawN) : pour lire un périphérique de bloc comme un périphérique de caractères (à qui ca peut bien servir ?)
- I2C : utilisé parles sensors (température) et par certaines cartes pci. C'est assez difficile de savoir quoi choisir, en général je mets tout sauf le debug
- Dallas's 1-wire : les i-button ! (vous êtes prof de techno ?)
- Hardware Monitoring : les capteurs, sélectionnez tout ce sera plus simple
- Watchdog Timer : si vous avez un watchdog sur votre machine (périphérique physique qui détecte les blocages de la machine pour la rebooter physiquement)
- Multimedia devices : vos récepteurs TV, satellite, radio
- Video For Linux : indispensable pour faire de la vidéo (tv, satellite ou caméras)
- Graphics : les cartes graphiques
- Direct Rendering Manager : l'accélération avec xorg (indispensable pour la 3D)
- Support for frame buffer devices : drivers pour l'accès direct à la mémoire vidéo (indispensable pour avoir une console avec un logo ou avec une grosse définition)
- Console display driver : c'est ici qu'on active le framebuffer en console
- Bootup logo : les tux affichés pendant le boot
- Sound : devinez
- Advanced Linux Sound Architecture : les drivers récents
- HID Devices : indispensable pour booter avec un clavier usb
- USB : les drivers usb
- .. pour ne pas se louper sur les chipset sélectionnez EHCI, UHCI et OHCI
- MMC/SD card : la communication avec les cartes flash
- Real Time Clock : accès direct à l'horloge physique
- ... /dev/rtc est indispensable pour un certain nombre d'application vidéo ou audio
Comments