This commit is contained in:
gcolpart 2016-12-23 21:56:33 +01:00
parent 549e6fcda9
commit de0b3d835b

162
TipsKernel.md Normal file
View file

@ -0,0 +1,162 @@
# Tips Kernel
## Introduction
~~~
$ uname -a
~~~
Le noyau en lui même est un fichier de quelques Mo. Il est souvent nommé `/boot/vmlinuz-X.y.z-patch`. C'est ce fichier qui est lancé par le boot loader (LILO, GRUB, Yaboot, etc.). Les modules éventuels se retrouvent souvent sous le répertoire `/lib/modules/X.y.z-patch/`. Parlons aussi du fichier `System.map` (table des symboles du noyau) qui se trouve en général dans le répertoire `/boot/`. Enfin, parlons du fichier `initrd` qui se trouve sur certains systèmes Linux. Il s'agit d'un disque RAM initialisé au démarrage avant le noyau pour permettre un démarrage en deux phases (utile dans certains cas). Ce fichier sera également lancé par le boot loader.
## timestamp dmesg
Quant on a une ligne du type :
~~~
[3412725.317750] entry->group=(null) inode=(null) wd=4096
~~~
On peut déduire depuis combien d'heure(s) cela s'est produit avec la commande :
~~~
$ echo "($(awk '{print $1}' /proc/uptime) - 3412725.317750 ) / 60 / 60" | bc
18
~~~
## touches magiques Sysrq
### Avec le clavier
**Alt+SysRq+\<touche magique>**
*SysRq* est souvent la touche `Impr écran` (sur certains claviers, il faut *Fn*), donc **Alt+Impr écran+\<touche magique>**
### En ligne de commande / SSH
~~~
# sysctl -w kernel.sysrq=1
# echo <touche magique> > /proc/sysrq-trigger
~~~
Voici les principales touches magiques (dans un odre croissant de violence) :
* `s` : Will attempt to sync all mounted filesystems.
* `u` : Will attempt to remount all mounted filesystems read-only.
* `b` : Will immediately reboot the system without syncing or unmounting your disks.
Pour la liste complète des touches magiques : <https://www.kernel.org/doc/Documentation/sysrq.txt>
## CPU hotplug
L'ajout de CPU à chaud peut être utile sur des machines virtuelles.
Activation :
~~~
# echo 1 > /sys/devices/system/cpu/cpu1/online
[2413287.667565] CPU1 has been hot-added
# echo 1 > /sys/devices/system/cpu/cpu2/online
[2413287.668239] CPU2 has been hot-added
~~~
Désactivation :
~~~
# echo 0 > /sys/devices/system/cpu/cpu2/online
~~~
## Compilation de noyau
### Préparation du noyau
Noyau [vanilla](http://kernel.org) :
~~~
$ tar -xf linux-X.y.z.tar.xz
~~~
### Patches
#### Patches rc ou X.y.z
~~~
$ cd linux-X.y
$ patch -p1 < ../patch
~~~
Ne pas utiliser de noyau X.y.**z** car les modifications sont déjà intégrées aux patches rc.
#### Patches grsecurity :
<https://grsecurity.net/>
~~~
$ gunzip < grsecurity.patch.gz | patch -p0
~~~
#### Patches IPTables
<http://www.netfilter.org/documentation/HOWTO/fr/netfilter-extensions-HOWTO.html>
~~~
$ cd netfilter/patch-o-matic
$ ./runme extra
~~~
#### Patches Debian
Debian propose des paquets linux-source-* contenant les sources vanilla patchées.
## Choix des options
Pour le choix des options, on utilise `make OPTION`*OPTION* peut valoir :
* menuconfig (installer *libncurses5-dev*)
* xconfig (installer *libqt4-dev*)
* config
Pour récupérer les options d'un autre noyau (même plus ancien) :
~~~
$ cp /boot/config-X.y.z .config
$ make oldconfig
~~~
## Compilation classique
~~~
# apt install libssl-dev
$ make clean
$ make bzImage
$ make modules
~~~
Pour l'installer :
~~~
# cp arch/i386/boot/bzImage /boot/vmlinuz-foo
# makes modules_install
~~~
## Compilation "à la sauce Debian"
~~~
# apt install kernel-package build-essential kmod
~~~
Installer des outils pour gérer les modules :
modutils (noyaux 2.4)
module-init-tools (noyaux 2.6)
Modifier éventuellement le fichier /etc/kernel-pkg.conf puis lancer la compilation :
~~~
$ make-kpkg clean
$ make-kpkg --rootcmd fakeroot \
--revision 42 \
--append-to-version=-grsec-srv-xeon \
--stem linux kernel_image kernel_headers
~~~
*Note* : Pour faire apparaître *-grsec* dans le nom des noyaux et pas seulement dans le *localversion*, on l'ajoute à l'option `--append-to-version` et on efface le fichier `localversion.grsec` à la racine du noyau.