Démarrage et noyau

Objectifs LPIC2

1. Noyau Linux

Généralités

Source : https://fr.wikipedia.org/wiki/Noyau_Linux

Le noyau Linux est un noyau de système d'exploitation de type UNIX. Le noyau Linux est un logiciel libre développé essentiellement en langage C par des milliers de bénévoles et salariés communiquant par Internet.

Le noyau est le cœur du système, c'est lui qui s'occupe de fournir aux logiciels une interface pour utiliser le matériel. Le noyau Linux a été créé en 1991 par Linus Torvalds pour les compatibles PC construits sur l'architecture processeur x86. Depuis, il a été porté sur nombre d'architectures dont m68k, PowerPC, StrongARM, Alpha, SPARC, MIPS, etc. Il s'utilise dans une très large gamme de matériel, des systèmes embarqués aux superordinateurs, en passant par les ordinateurs personnels.

Ses caractéristiques principales sont d'être multitâche et multi-utilisateur. Il respecte les normes POSIX ce qui en fait un digne héritier des systèmes UNIX. Au départ, le noyau a été conçu pour être monolithique. Ce choix technique fut l'occasion de débats enflammés entre Andrew S. Tanenbaum, professeur à l'université libre d'Amsterdam qui avait développé Minix, et Linus Torvalds. Andrew Tanenbaum arguant que les noyaux modernes se devaient d'être des micro-noyaux et Linus répondant que les performances des micronoyaux n'étaient pas bonnes. Depuis sa version 2.0, le noyau, bien que n'étant pas un micro-noyau, est modulaire, c'est-à-dire que certaines fonctionnalités peuvent être ajoutées ou enlevées du noyau à la volée (en cours d'utilisation). (Wikipedia)

Développement du noyau Linux

Si au début de son histoire le développement du noyau Linux était assuré par des développeurs bénévoles, les principaux contributeurs sont aujourd'hui un ensemble d'entreprises, souvent concurrentes, comme Red Hat, Novell, IBM ou Intel.

La licence du noyau Linux est la licence publique générale GNU dans sa version 2. Cette licence est libre, ce qui permet d'utiliser, copier et modifier le code source selon ses envies ou ses besoins. Ainsi, quiconque a les connaissances nécessaires peut participer aux tests et à l'évolution du noyau.

Linus Torvalds, créateur du noyau Linux, est le mainteneur officiel depuis le début en 1991. Il est une sorte de « dictateur bienveillant », l'autorité en termes de choix techniques et organisationnels. Les différentes versions du noyau publiées par Linus Torvalds s'appellent « mainline » ou « vanilla » en anglais. Ce sont les noyaux vanilla qui sont intégrés par les distributeurs, avec parfois l'addition de quelques patchs de sécurité, de corrections de bogue ou d'optimisations.

Linus Torvalds a apporté un changement radical dans la façon dont les systèmes d'exploitation sont développés, en utilisant pleinement la puissance du réseau Internet.

Le processus de développement de Linux est public sur Internet : les sources du noyau y sont visibles par tous, les modifications de ces sources sont publiées et revues sur Internet et sont également visibles de tous. Un cycle de développement incrémental et rapide a été adopté depuis le début (aujourd'hui une nouvelle version est publiée toutes les 9 semaines environ), qui a permis de construire autour de Linux et d'Internet par couches successives une communauté dynamique composée de développeurs, de sociétés et d'utilisateurs.

Les numéros de version du noyau sont composés de trois nombres : le premier est le numéro majeur, le second le numéro mineur. Avant l'apparition des versions 2.6.x, les numéros mineurs pairs indiquaient une version stable et les numéros mineurs impairs une version de développement. Ainsi, les versions 2.2, 2.4 sont stables, les versions 2.3 et 2.5 sont des versions de développement. Cependant, depuis la version 2.6 du noyau, ce modèle de numérotation stable/développement a été abandonné et il n'y a donc plus de signification particulière aux numéros mineurs pairs ou impairs. Le troisième nombre indique une révision, ce qui correspond à des corrections de bogues, de sécurité ou un ajout de fonctionnalité, par exemple 2.2.26, 2.4.30 ou 2.6.11. Le passage à la version 3.0 fut décidé par Linus Torvalds à l'occasion des 20 ans du noyau Linux, même si la véritable raison fut plutôt arbitraire. La dernière version stable en août 2016 est 4.7.2.

Cette page https://fr.wikipedia.org/wiki/Noyau_Linux#Chronologie donne une idée de l'évolution des intégrations au noyau.

Version courante du noyau

La commande uname permet de connaître la version courante du noyau, mais aussi le type d'architecture et le nom de l'ordinateur.

Par exemple, sur une Centos 7 :

# uname -a
Linux srv.linuxlab.be 3.10.0-327.18.2.el7.x86_64 #1 SMP Thu May 12 11:03:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
# uname -r
3.10.0-327.18.2.el7.x86_64
# uname -m
x86_64
# uname -n
srv.linuxlab.be
# uname -p
x86_64
# uname -s
Linux
# uname -i
x86_64
# uname -o
GNU/Linux
[root@srv virt-scripts]# uname -v
#1 SMP Thu May 12 11:03:55 UTC 2016

Le fichier /proc/cmdline informe notamment du noyau utilisé par le système.

# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/md1 ro net.ifnames=0 rd.md.uuid=c2dd5ffb:ee7dff79:a4d2adc2:26fd5302 kvm-intel.nested=1

Messages du noyau

Le noyau écrit ses événements dans et via dmesg qui sont consultés après une nouvelle installation.

# head /var/log/messages
Aug 26 11:01:32 sb1 rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="594" x-info="http://www.rsyslog.com"] start
Aug 26 11:01:25 sb1 journal: Runtime journal is using 6.2M (max allowed 49.6M, trying to leave 74.4M free of 490.3M available → current limit 49.6M).
Aug 26 11:01:25 sb1 journal: Runtime journal is using 6.2M (max allowed 49.6M, trying to leave 74.4M free of 490.3M available → current limit 49.6M).
Aug 26 11:01:25 sb1 kernel: Initializing cgroup subsys cpuset
Aug 26 11:01:25 sb1 kernel: Initializing cgroup subsys cpu
Aug 26 11:01:25 sb1 kernel: Initializing cgroup subsys cpuacct
Aug 26 11:01:25 sb1 kernel: Linux version 3.10.0-327.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015
Aug 26 11:01:25 sb1 kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/centos_tmp--30faa133-root ro crashkernel=auto rd.lvm.lv=centos_tmp-30faa133/root rd.lvm.lv=centos_tmp-30faa133/swap console=ttyS0,115200n8 LANG=en_US.UTF-8
Aug 26 11:01:25 sb1 kernel: e820: BIOS-provided physical RAM map:
Aug 26 11:01:25 sb1 kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable

dmesg (pour l'anglais "display message", "afficher message" en français) est une commande sur les systèmes d'exploitation de type Unix qui affiche la mémoire tampon de message du noyau. Elle permet de vérifier le comportement du noyau, notamment le sort réservé aux pilotes de périphérique (modules du noyau). On trouvera le contenu dans le fichier /var/log/dmesg.

# dmesg
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-327.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/centos_tmp--30faa133-root ro crashkernel=auto rd.lvm.lv=centos_tmp-30faa133/root rd.lvm.lv=centos_tmp-30faa133/swap console=ttyS0,115200n8 LANG=en_US.UTF-8
[    0.000000] e820: BIOS-provided physical RAM map
...

Pour une recherche plus précise, par exemple :

# dmesg | grep vda
[    1.938760]  vda: vda1 vda2
[    8.081330] XFS (vda1): Mounting V4 Filesystem
[    8.343152] XFS (vda1): Ending clean mount
[    8.345418] SELinux: initialized (dev vda1, type xfs), uses xattr
# dmesg | grep kvm
[    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00
[    0.000000] kvm-clock: cpu 0, msr 0:3ff87001, primary cpu clock
[    0.000000] kvm-clock: using sched offset of 5508623650 cycles
[    0.000000] kvm-stealtime: cpu 0, msr 3fc0d240
[    0.746986] Switching to clocksource kvm-clock
[    1.426438] systemd[1]: Detected virtualization kvm.

Documentation du noyau

Sous Centos/RHEL, l'accès local à la documentation nécessite l'installation du paquet kernel-doc. Selon la version du système, les fichiers de documentation seront copiés dans un répertoire du type /usr/share/doc/kernel-doc-3.10.0/Documentation/.

Sous Debian/Ubuntu, la documentation accompagne d'emblée le noyau. Elle se situe dans le répertoire Documentation du noyau.

La documentation Web se trouve sur www.kernel.org/doc.

Configuration de paramètres du noyau

On peut changer les paramètres du noyau à chaud en écrivant directement les valeurs dans les fichiers adéquats (/proc/sys/) ou en utilisant le binaire sysctl.

Par exemple, on peut vérifier si le routage IPv4 est activé :

# cat /proc/sys/net/ipv4/ip_forward
0

Il suffit de placer la valeur à 1 dans ce fichier pour activer le routage :

# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
1

On aurait pu exécuter la même opération avec sysctl car modifier ces valeurs directement dans les fichiers /proc/sys/ ne rend les rend pas persistente.

Sysctl

sysctl est le programme qui permet de modifier à chaud les paramètres du noyau.

# sysctl --help

Usage:
 sysctl [options] [variable[=value] ...]

Options:
  -a, --all            display all variables
  -A                   alias of -a
  -X                   alias of -a
      --deprecated     include deprecated parameters to listing
  -b, --binary         print value without new line
  -e, --ignore         ignore unknown variables errors
  -N, --names          print variable names without values
  -n, --values         print only values of a variables
  -p, --load[=<file>]  read values from file
  -f                   alias of -p
      --system         read values from all system directories
  -r, --pattern <expression>
                       select setting that match expression
  -q, --quiet          do not echo variable set
  -w, --write          enable writing a value to variable
  -o                   does nothing
  -x                   does nothing
  -d                   alias of -h

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see sysctl(8).
  • sysctl -a affiche toutes les variables avec leur valeur
  • sysctl -n [variable] affiche valeur d'une variable comme par exemple sysctl -n net.ipv4.ip_forward.

Pour modifier un paramètre du noyau avec sysctl :

# sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

Enfin, pour rendre ces paramétrages permanents, on peut valoriser ces variables dans le fichiers /etc/sysctl.conf. Ici un exemple Ubuntu 12.04 par défaut :

# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
#net.ipv4.conf.all.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net.ipv4.conf.all.secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0
#
# Do not accept IP source route packets (we are not a router)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#

2. Configuration matérielle

Le système de fichiers virtuel /proc

  • /proc n'existe pas sur le disque dur, il est fournit dynamiquement par le noyau, d'où le nom de virtuel.
  • Il permet de fournir des informations sur ce que voit le noyau.
  • En outre pour accéder à certains renseignements il sera nécessaire de monter obligatoirement /proc :
# mount | grep \/proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
  • Les commandes ps, top, uptime (et bien d'autres) utilisent /proc pour récupérer des informations du système.

Informations de bas niveau

# cat /proc/interrupts
# cat /proc/dma; cat /proc/ioports
# cat /proc/devices

Information sur les bus

# lspci
# lsusb -t

Informations CPU, mémoires, RAM, etc.

cat /proc/cpuinfo
cat /proc/meminfo 
cat /proc/loadavg 
cat /proc/partitions 
cat /proc/version
cat /proc/mounts
cat /proc/stat 
cat /proc/uptime
cat /proc/swaps

mais aussi,

lscpu
free -m
vmstat -s

Fichier /proc/$PID

  • /proc contient aussi les numéros des processus et les informations les concernant, par exemple sur un processus SSHD :
# ps aux | grep sshd
root      1204  0.0  0.0  61364  3080 ?        Ss    2014   0:00 /usr/sbin/sshd -D
root     25741  0.0  0.1 105632  4264 ?        Ss   10:06   0:00 sshd: francois [priv]
francois 25840  0.0  0.0 105632  2168 ?        S    10:07   0:02 sshd: francois@pts/5
root     25986  0.0  0.0  11768   916 pts/5    S+   11:27   0:00 grep --color=auto sshd
# cat /proc/1204/status
Name:    sshd
State:    S (sleeping)
Tgid:    1204
Ngid:    0
Pid:    1204
PPid:    1
...

Périphériques /dev

  • Linux accède aux périphériques à partir de fichiers situés dans /dev.
  • Les disques durs :
    ls -l /dev/sd*
    brw-rw---- 1 root disk 8,  0 déc 15 23:40 /dev/sda
    brw-rw---- 1 root disk 8,  1 déc 15 23:40 /dev/sda1
    brw-rw---- 1 root disk 8,  2 déc 15 23:40 /dev/sda2
    brw-rw---- 1 root disk 8,  5 déc 15 23:40 /dev/sda5
    brw-rw---- 1 root disk 8, 16 déc 15 23:40 /dev/sdb
    
  • où nous avons des fichiers de type block (b) avec un numéro primaire 8 et un numéro secondaire qui identifie la partitions pour le noyau.
  • La commande blkid permet d’identifier les périphériques block par leur UUID :
    # blkid
    /dev/sda1: UUID="67407b6c-4bbc-4b52-b071-fee802cfbf2b" TYPE="xfs" 
    /dev/sda2: UUID="2e468ba5-a730-4988-b8e6-3073a048227f" TYPE="swap"
    

Tous les autres périphériques /dev

  • Ce dossier contient tous les périphériques matériels comme un lecteur cdrom, une carte son, une carte réseau, etc...
  • Il contient également les pseudo-périphériques. Quelques exemples :
    • /dev/zero génére des zéros
    • /dev/random génère de l'aléatoire
    • /dev/null constitue un trou noir à octets, et notamment utilisé pour se débarrasser des fichiers et des affichages
    • /dev/loop0 permet de créer de faux périphériques de type block (stockage) à partir de fichiers créés avec la commande dd
  • Si on liste le contenu de /dev :
    # ls -l /dev | more
    

Exercices pratiques : se connecter en console sur un routeur, un commutateur, un ordinateur embarqué. Indications : commande screen, vitesse, /dev/ttyS0, /dev/ttyUSB0. Comment connecter deux ordinateurs Linux via leur port série ou USB ?

Sysfs

  • Sysfs est un système de fichiers virtuel introduit par le noyau Linux 2.6. Sysfs permet d'exporter depuis l'espace noyau vers l'espace utilisateur des informations sur les périphériques du système et leurs pilotes, et est également utilisé pour configurer certaines fonctionnalités du noyau.

3. Modules du noyau

  • Un module du noyau est un pilote de périphérique utilisé par le noyau pour utiliser le matériel et les logiciels.
  • lsmod permet de voir les modules chargés dans le noyau :
$ lsmod
  • Emplacements des modules du noyau (Centos 7 noyau 3.10.0-327.*el7.x86_64)
ls /lib/modules
3.10.0-327.18.2.el7.x86_64  3.10.0-327.el7.x86_64
ls -l /lib/modules/3.10.0-327.18.2.el7.x86_64/
total 2704
lrwxrwxrwx.  1 root root     43 11 jun 16:53 build -> /usr/src/kernels/3.10.0-327.18.2.el7.x86_64
drwxr-xr-x.  2 root root      6 12 mai 13:15 extra
drwxr-xr-x. 11 root root   4096 11 jun 16:53 kernel
-rw-r--r--.  1 root root 706371 11 jun 16:53 modules.alias
-rw-r--r--.  1 root root 682782 11 jun 16:53 modules.alias.bin
-rw-r--r--.  1 root root   1288 12 mai 13:16 modules.block
-rw-r--r--.  1 root root   5995 12 mai 13:13 modules.builtin
-rw-r--r--.  1 root root   7744 11 jun 16:53 modules.builtin.bin
-rw-r--r--.  1 root root 218218 11 jun 16:53 modules.dep
-rw-r--r--.  1 root root 316220 11 jun 16:53 modules.dep.bin
-rw-r--r--.  1 root root    339 11 jun 16:53 modules.devname
-rw-r--r--.  1 root root    108 12 mai 13:16 modules.drm
-rw-r--r--.  1 root root    100 12 mai 13:16 modules.modesetting
-rw-r--r--.  1 root root   1522 12 mai 13:16 modules.networking
-rw-r--r--.  1 root root  84666 12 mai 13:13 modules.order
-rw-r--r--.  1 root root     89 11 jun 16:53 modules.softdep
-rw-r--r--.  1 root root 311931 11 jun 16:53 modules.symbols
-rw-r--r--.  1 root root 387108 11 jun 16:53 modules.symbols.bin
lrwxrwxrwx.  1 root root      5 11 jun 16:53 source -> build
drwxr-xr-x.  2 root root      6 12 mai 13:15 updates
drwxr-xr-x.  2 root root     91 11 jun 16:53 vdso
drwxr-xr-x.  2 root root      6 12 mai 13:15 weak-updates
ls  /lib/modules/3.10.0-327.18.2.el7.x86_64/kernel/fs
binfmt_misc.ko  ceph    dlm    fat      gfs2   lockd       nfs_common  overlayfs  udf
btrfs           cifs    exofs  fscache  isofs  mbcache.ko  nfsd        pstore     xfs
cachefiles      cramfs  ext4   fuse     jbd2   nfs         nls         squashfs
  • Dépendances des modules entre eux :
depmod 3.10.0-327.18.2.el7.x86_64
head  /lib/modules/3.10.0-327.18.2.el7.x86_64/modules.dep
kernel/arch/x86/kernel/cpu/mcheck/mce-inject.ko:
kernel/arch/x86/kernel/test_nx.ko:
kernel/arch/x86/crypto/ablk_helper.ko: kernel/crypto/cryptd.ko
kernel/arch/x86/crypto/glue_helper.ko:
kernel/arch/x86/crypto/camellia-x86_64.ko: kernel/crypto/xts.ko kernel/crypto/lrw.ko kernel/crypto/gf128mul.ko kernel/arch/x86/crypto/glue_helper.ko
kernel/arch/x86/crypto/blowfish-x86_64.ko: kernel/crypto/blowfish_common.ko
kernel/arch/x86/crypto/twofish-x86_64.ko: kernel/crypto/twofish_common.ko
kernel/arch/x86/crypto/twofish-x86_64-3way.ko: kernel/arch/x86/crypto/twofish-x86_64.ko kernel/crypto/twofish_common.ko kernel/crypto/xts.ko kernel/crypto/lrw.ko kernel/crypto/gf128mul.ko kernel/arch/x86/crypto/glue_helper.ko
kernel/arch/x86/crypto/salsa20-x86_64.ko:
kernel/arch/x86/crypto/serpent-sse2-x86_64.ko: kernel/crypto/xts.ko kernel/crypto/serpent_generic.ko kernel/crypto/lrw.ko kernel/crypto/gf128mul.ko kernel/arch/x86/crypto/glue_helper.ko kernel/arch/x86/crypto/ablk_helper.ko kernel/crypto/cryptd.ko

Charger / décharger un module

On peut charger un pilote de périphérique. Toute une série sont déjà pour les cartes réseau dans /lib/modules/$(uname -r)/kernel/drivers/net :

$ ls /lib/modules/$(uname -r)/kernel/drivers/net
appletalk  dummy.ko  geneve.ko   ipvlan      mii.ko         plip       sungem_phy.ko  vrf.ko    xen-netback
arcnet     eql.ko    hamradio    irda        netconsole.ko  ppp        team           vxlan.ko
bonding    ethernet  hyperv      macvlan.ko  nlmon.ko       rionet.ko  usb            wan
caif       fddi      ieee802154  macvtap.ko  ntb_netdev.ko  sb1000.ko  veth.ko        wimax
can        fjes      ifb.ko      mdio.ko     phy            slip       vmxnet3        wireless

Sous Ubuntu 14.04 dans une machine virtuelle VMWare, on peut par exemple tenter de charger le pilote d'une carte vmxnet3 :

$ sudo insmod /proc/lib/modules/4.4.0-31-generic/kernel/drivers/net/vmxnet3/vmxnet3.ko
$ modprobe vmxnet3
$ lsmod | grep vmxnet3
vmxnet3                57344  0
$ sudo rmmod vmxnet3
  • On peut charger ou décharger un module du noyau avec modprobe au lieu de la commande insmod :
# modprobe msdos
# lsmod | grep msdos
msdos                  17332  0 
fat                    65913  1 msdos
# rmmod msdos
# lsmod | grep msdos

UDEV

...

4. Fichiers du noyau

Les fichiers de démarrage du système se trouvent dans /boot (ici une Centos7) :

# ls -lah /boot
total 72M
dr-xr-xr-x.  4 root root 4.0K Aug 28 15:53 .
dr-xr-xr-x. 17 root root 4.0K Aug 26 11:00 ..
-rw-r--r--.  1 root root 124K Nov 19  2015 config-3.10.0-327.el7.x86_64
drwxr-xr-x.  2 root root   26 Aug 26 10:56 grub
drwx------.  6 root root  104 Aug 26 10:59 grub2
-rw-r--r--.  1 root root  42M Aug 26 10:58 initramfs-0-rescue-9504b93066e14193b0bd32e69e26e75d.img
-rw-------.  1 root root  17M Aug 26 11:01 initramfs-3.10.0-327.el7.x86_64kdump.img
-rw-r--r--.  1 root root 589K Aug 26 10:57 initrd-plymouth.img
-rw-r--r--.  1 root root 247K Nov 19  2015 symvers-3.10.0-327.el7.x86_64.gz
-rw-------.  1 root root 2.9M Nov 19  2015 System.map-3.10.0-327.el7.x86_64
-rwxr-xr-x.  1 root root 5.0M Aug 26 10:58 vmlinuz-0-rescue-9504b93066e14193b0bd32e69e26e75d
-rwxr-xr-x.  1 root root 5.0M Nov 19  2015 vmlinuz-3.10.0-327.el7.x86_64
-rw-r--r--.  1 root root  166 Nov 19  2015 .vmlinuz-3.10.0-327.el7.x86_64.hmac
  • Fichier /boot/vmlinuz-* est le noyau Linux compressé qui sera utilisé après démarrage :
# ls -lh /boot/vmlinuz-*
-rwxr-xr-x. 1 root root 5.0M Aug 26 10:58 vmlinuz-0-rescue-9504b93066e14193b0bd32e69e26e75d
-rwxr-xr-x. 1 root root 5.0M Nov 19  2015 vmlinuz-3.10.0-327.el7.x86_64
  • Fichier initrd (INITial RamDisk) est une image d'un système d'exploitation minimal initialisé au démarrage du système.
# mkdir /tmp/initrd
# cd /tmp/initrd/
# mv /boot/initramfs-3.10.0-327.el7.x86_64.img /tmp/initrd/initramfs-3.10.0-327.el7.x86_64.gz 
# gunzip initramfs-3.10.0-327.el7.x86_64.gz
# cpio -id < initramfs-3.10.0-327.el7.x86_64

On peut vérifier les fichiers :

ls -l /tmp/initrd/
total 43016
lrwxrwxrwx.  1 root root        7 Aug 28 15:54 bin -> usr/bin
drwxr-xr-x.  2 root root       42 Aug 28 15:54 dev
drwxr-xr-x. 12 root root     4096 Aug 28 15:54 etc
lrwxrwxrwx.  1 root root       23 Aug 28 15:54 init -> usr/lib/systemd/systemd
-rw-------.  1 root root 44039680 Aug 26 10:59 initramfs-3.10.0-327.el7.x86_64
lrwxrwxrwx.  1 root root        7 Aug 28 15:54 lib -> usr/lib
lrwxrwxrwx.  1 root root        9 Aug 28 15:54 lib64 -> usr/lib64
drwxr-xr-x.  2 root root        6 Aug 28 15:54 proc
drwxr-xr-x.  2 root root        6 Aug 28 15:54 root
drwxr-xr-x.  2 root root        6 Aug 28 15:54 run
lrwxrwxrwx.  1 root root        8 Aug 28 15:54 sbin -> usr/sbin
-rwxr-xr-x.  1 root root     3041 Aug 28 15:54 shutdown
drwxr-xr-x.  2 root root        6 Aug 28 15:54 sys
drwxr-xr-x.  2 root root        6 Aug 28 15:54 sysroot
drwxr-xr-x.  2 root root        6 Aug 28 15:54 tmp
drwxr-xr-x.  7 root root       61 Aug 28 15:54 usr
drwxr-xr-x.  2 root root       27 Aug 28 15:54 var
  • On trouvera aussi le fichier System.map qui contient une table avec les symbôles et leur adresse mémoire. Un symbôle peut être le nom d'une variable ou d'une fonction. Cette table peut être utile pour le "crash" du noyau.
# head /boot/System.map-3.10.0-327.el7.x86_64
0000000000000000 A VDSO32_PRELINK
0000000000000000 D __per_cpu_start
0000000000000000 D irq_stack_union
0000000000000000 A xen_irq_disable_direct_reloc
0000000000000000 A xen_save_fl_direct_reloc
0000000000000040 A VDSO32_vsyscall_eh_frame_size
00000000000001e9 A kexec_control_code_size
00000000000001f0 A VDSO32_NOTE_MASK
0000000000000400 A VDSO32_sigreturn
0000000000000410 A VDSO32_rt_sigreturn
  • Un fichier de configuration de compilation du noyau actuel est aussi présent dans le répertoire /boot.
# head /boot/config-3.10.0-327.el7.x86_64
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 3.10.0-327.el7.x86_64 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"

5. Démarrage du système

Processus de démarrage

Source : https://commons.wikimedia.org/wiki/File:Linux_startup_process_wip.svg

Le BIOS

Le BIOS - Basic Input Output System (système d'entrée sortie de base) est essentiel à tout PC, il se trouve généralement dans une mémoire morte ou ROM qui est directement implantée sur la carte mère du PC. Il est associé à une mémoire sauvegardée par une petite pile bouton sur la carte mère (le “setup” qui est la sauvegarde de la configuration).

Si votre PC ne démarre pas (ou ne boot pas) c'est à cause du BIOS et de sa configuration (le setup). On peut accéder au setup et le modifier en pressant une touche dès la mise sous tension du PC. Selon les fabricants, cette touche est Suppr, F2, F10 … (la touche à utiliser est très brièvement affichée au tout début du démarrage).

Mais quelle est donc sa fonction ?

Le BIOS teste le matériel et y applique les réglages mémorisés dans le setup, tout en s'assurant qu'il n'existe pas de dis-fonctionnement matériel et que tout est présent dans la machine, mémoire CPU principalement. Ensuite il regarde la présence des périphériques nécessaires au boot : lecteur de disquette, cd rom, dvd rom, clef usb, mais surtout disque dur. Si vous avez installé un système d'exploitation Linux ou Windows, le BIOS est normalement configuré pour activer le MBR de celui ci, les étapes du démarrage peuvent alors commencer ... (http://www.linuxpedia.fr/doku.php/util/boot)

Le MBR ( Boot Primaire )

Le Master Boot Record ou MBR (parfois aussi appelé “Zone amorce”) est le nom donné au premier secteur adressable d'un disque dur (cylindre 0, tête 0 et secteur 1, ou secteur 0 en adressage logique) dans le cadre d'un partitionnement Intel. Sa taille est de 512 octets. Le MBR contient la table des partitions (les 4 partitions primaires) du disque dur. Il contient également une routine d'amorçage dont le but est de charger le système d'exploitation (ou le boot loader/chargeur d'amorçage s'il existe) présent sur la partition active.

Mais quelle est donc sa fonction ?

Il s'agit du boot primaire , la taille du MBR étant limitée à 512 octets, ce petit programme n'a pour fonction que de lancer le boot secondaire qui occupe un plus gros espace ailleurs sur le disque.

Le Boot Secondaire

Il a pour fonction d'activer le système d'exploitation, c'est à dire d'activer le noyau. Les boot primaire et secondaire constituent ce qu'on appelle le chargeur ou loader tel que Lilo ou plus fréquemment Grub.

5. Chargeur de démarrage Grub2

  • GNU GRUB (acronyme signifiant en anglais « GRand Unified Bootloader ») est un programme d’amorçage GNU qui gère la gestion du chargement des systèmes d’exploitation disponibles sur le système. Il permet à l'utilisateur de choisir quel système démarrer. Il intervient après allumage de l'ordinateur et avant le chargement du système d'exploitation.
  • GRUB dans sa version 2 (entièrement réécrite) est un chargeur de démarrage libre au même titre que Das U-Boot ou Barebox pour du matériel embarqué.
  • Ses nombreux avantages, son histoire et son fonctionnement sont décrits dans la page : http://doc.fedora-fr.org/wiki/GRUB2_:_Les_bases_pour_Fedora

Fichiers Grub2

La configuration de GRUB2 est composé de trois principales dans des fichiers inclus :

  1. /etc/default/grub - le fichier contenant les paramètres du menu de GRUB 2,
  2. /etc/grub.d/ - le répertoire contenant les scripts de création du menu GRUB 2, permettant notamment de personnaliser le menu de démarrage,
  3. /boot/grub2/grub.cfg - le fichier de configuration final de GRUB 2, non modifiable.

Ce dernier fichier est généré automatiquement par le programme grub2-mkconfig à partir des scripts /etc/default/grubet /etc/grub.d/ :

Voici le contenu du fichier /etc/default/grub avec les principales variables d'environnement :

# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
  • Sous Debian/Ubuntu pour générer le fichier de configuration de GRUB2 :
# update-grub
  • Sous Centos 7 :
# grub2-mkconfig -o /boot/grub2/grub.cfg

Gestion

  • Obtenir la version du noyau courant :
# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
  • Pour connaître la liste des entrées du menu :
# grep ^menu /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-d83f59c0-e642-4682-87d4-de2c290a6484' {
menuentry 'CentOS Linux (0-rescue-647df4ed1d8e48c48d765271858a9a93) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-647df4ed1d8e48c48d765271858a9a93-advanced-d83f59c0-e642-4682-87d4-de2c290a6484' {

Procédures

  • Réinstallation de grub2
  • Mot de passe chiffré sur grub2

6. init et systemd

La procédure de démarrage d'un ordinateur Linux peut se résumer de la manière suivante :

  • Le chargeur d'amorçage (GRUB2 a priori) charge le noyau, ensuite le noyau monte le système de fichier racine (le « / »), puis il initialise la console initiale :
    • init (abréviation de initialization) est le programme sous Unix qui lance ensuite toutes les autres tâches (sous forme de scripts). Il s'exécute comme un démon informatique. Son identifiant de processus (PID) est 1.
    • systemd est une alternative au démon init de System V. Il est spécifiquement conçu pour le noyau Linux. Il a pour but d'offrir un meilleur cadre pour la gestion des dépendances entre services, de permettre le chargement en parallèle des services au démarrage, et de réduire les appels aux scripts shell.

Systemd

Source : https://commons.wikimedia.org/wiki/File:Linux_kernel_unified_hierarchy_cgroups_and_systemd.svg

Systemd est le système d'initialisation installé par défaut avec les distributions Arch Linux, Centos 7, Debian 8 et à partir d'Ubuntu 15.04.

7. Niveaux d'exécution (run levels)

Le run level, ou niveau de fonctionnement, est un chiffre ou une lettre utilisé par le processus init des systèmes de type Unix pour déterminer les fonctions activées du système.

Dans cette organisation héritée de UNIX System V, les scripts de lancement des applications sont regroupés dans un répertoire commun /etc/init.d. Ces scripts reçoivent un paramètre qui peut être start, stop, restart, etc.

À chaque niveau correspond un répertoire (typiquement /etc/rc.d/rc2.d pour le niveau 2) de liens symboliques vers des fichiers de /etc/init.d. Ces liens symboliques portent des noms commençant par la lettre S ou K, suivi d'un numéro sur deux chiffres.

Lors d'un changement de run level :

  • les scripts dont le nom commence par un K dans le répertoire correspondant au niveau actuel sont lancés (dans l'ordre des numéros) avec le paramètre stop, ce qui a normalement pour effet d'arrêter le service correspondant,
  • les scripts du nouveau niveau qui commencent par S sont appelés successivement avec le paramètre start.

Avec init, les niveaux d'exécutions servent à ces usages :

  • Niveau 1. Mode mono-utilisateur ou maintenance
  • Niveau 2. mode multi-utilisateur sans ressources réseaux (NFS, etc)
  • Niveau 3. mode multi-utilisateur sans serveur graphique
  • Niveau 5. mode multi-utilisateur avec serveur graphique

Le niveau 0 arrête le système.

Le niveau 6 redémarre le système.

Sous Debian/Ubuntu, le Niveau 2 est le seul niveau fonctionnel avec réseau et serveur graphique. Les niveaux 3, 4 et 5 ne sont pas utilisés.

Pour mémoire, les niveaux d'exécution avec init System V sont définis dans /etc/inittab (RHEL7, Debian 7). Upstart est une alternative jusque Ubuntu 16.04 LTS.

  • Pour vérifier le niveau d'éxécution courant :
# runlevel
N 5
  • Pour se placer dans un des niveaux d'exécution (x) :
# init x

Systemctl dispose de ses propres commandes pour les niveaux d'exécution :

  • Obtenir le niveaux d'éxécution par défaut :
# systemctl get-default
graphical.target
  • Pour fixer le niveau d'exécution par défaut en mode multi-utilisateur avec serveur graphique :
systemctl set-default graphical.target
  • Pour passer mode maintenance avec un système de fichier local monté
systemctl rescue
  • Passer en mode maintenace avec seulement /root monté
systemctl emergency
  • Pour passer en mode multi-utilisateur sans serveur graphique (N 3)
systemctl isolate multi-user.target
  • Pour passer en mode multi-utilisateur avec serveur graphique (N 5)
systemctl isolate graphical.target

Commandes systemctl

On ira s’informer au préalable sur les systèmes de gestion de service et plus particulièrement systemd sur http://doc.fedora-fr.org/wiki/Systemd.

Il comporte de nombreux avantages. Selon moi, une simplicité d'utilisation et de configuration et un e gestion unifiée comme par exemple la possibilité de contôler des machines distantes voire des containers ou des machines virtuelles via les outils systemd ...

  • systemctl list-units
  • systemctl
  • systemctl status unit
  • systemctl enable | disable unit
  • systemctl start | stop | restart unit
  • systemctl kill unit
  • systemctl kill -s SIGKILL unit
  • /lib/systemd/system est le dossier où se situent les fichiers de configuration des services. Par exemple :
cat /lib/systemd/system/sshd.*

Autre exemple, service firewalld :

$ ls /etc/systemd/system/*.service
/etc/systemd/system/dbus-org.bluez.service
/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service
$ cat /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before=NetworkManager.service
Conflicts=iptables.service ip6tables.service ebtables.service

[Service]
EnvironmentFile=-/etc/sysconfig/firewalld
ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS
ExecReload=/bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput=null
StandardError=null
Type=dbus
BusName=org.fedoraproject.FirewallD1

[Install]
WantedBy=basic.target
Alias=dbus-org.fedoraproject.FirewallD1.service

Dernier exemple du service httpd :

# cat /lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Exercice démarrage des services avec systemctl

  • Vérifier l'installation du serveur SSH
  • Vérifier son état
  • Le désactiver au démarrage
  • Arrêter le service
  • Réactiver le service au démarrage
  • Vérifier l'état du service
  • Obtenir des journaux plus détaillés
  • Démarrer le service
  • Vérifier l'état du service
  • Relancer le service
  • Vérifier l'état du service
# yum -y install openssh-server
# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since mer. 2016-02-17 22:14:57 CET; 6 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 830 (sshd)
   CGroup: /system.slice/sshd.service
           └─830 /usr/sbin/sshd -D

févr. 17 22:14:57 c7li systemd[1]: Started OpenSSH server daemon.
févr. 17 22:14:57 c7li systemd[1]: Starting OpenSSH server daemon...
févr. 17 22:14:57 c7li sshd[830]: Server listening on 0.0.0.0 port 22.
févr. 17 22:14:57 c7li sshd[830]: Server listening on :: port 22.
# systemctl disable sshd
Removed symlink /etc/systemd/system/multi-user.target.wants/sshd.service.
# systemctl stop sshd
# systemctl enable sshd
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:sshd(8)
           man:sshd_config(5)

févr. 17 22:14:57 c7li systemd[1]: Started OpenSSH server daemon.
févr. 17 22:14:57 c7li systemd[1]: Starting OpenSSH server daemon...
févr. 17 22:14:57 c7li sshd[830]: Server listening on 0.0.0.0 port 22.
févr. 17 22:14:57 c7li sshd[830]: Server listening on :: port 22.
févr. 24 21:41:31 c7cli systemd[1]: Stopping OpenSSH server daemon...
févr. 24 21:41:31 c7cli systemd[1]: Stopped OpenSSH server daemon.
# journalctl -xn
# systemctl start sshd
# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since mer. 2016-02-24 21:44:48 CET; 2s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 17318 (sshd)
   CGroup: /system.slice/sshd.service
           └─17318 /usr/sbin/sshd -D

févr. 24 21:44:48 c7cli systemd[1]: Started OpenSSH server daemon.
févr. 24 21:44:48 c7cli systemd[1]: Starting OpenSSH server daemon...
févr. 24 21:44:48 c7cli sshd[17318]: Server listening on 0.0.0.0 port 22.
févr. 24 21:44:48 c7cli sshd[17318]: Server listening on :: port 22.
# systemctl restart sshd
# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since mer. 2016-02-24 21:44:56 CET; 2s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 17454 (sshd)
   CGroup: /system.slice/sshd.service
           └─17454 /usr/sbin/sshd -D

févr. 24 21:44:56 c7cli systemd[1]: Started OpenSSH server daemon.
févr. 24 21:44:56 c7cli systemd[1]: Starting OpenSSH server daemon...
févr. 24 21:44:56 c7cli sshd[17454]: Server listening on 0.0.0.0 port 22.
févr. 24 21:44:56 c7cli sshd[17454]: Server listening on :: port 22.

Password recovery RHEL7

Méthode 1

  1. Au redémarrage de l’ordinateur, on peut interrompre grub en appuyant sur la touche «e» pour "edit"/éditer.
  2. A la ligne qui commence par «linux16» ou «linuxefi», effacer rhgb et quiet pour désactiver le démarrage graphique silencieux.
  3. Placer l’occurence init=/bin/bash à la fin de la ligne (CTRL-E) qui va démarrer une session bash sans démarrer le démon init.
  4. "CTRL-X" pour redémarrer.
  5. Remonter la racine pour accéder en lecture/écriture au système de fichier.mount -o remount,rw /
  6. Modifier / lire le mot de passe
  7. Replacer les contextes SELinux sur les fichiers via la commande touch /.autorelabel
  8. Redémarrer l’ordinateur : exec /sbin/reboot

Méthode 2

  1. Une méthode alternative plus sûre et plus simple consiste à placer rd.break au lieu de init=/bin/bash dans la ligne de démarrage de grub2 (voir première méthode). La procédure est la suivante :
  2. mount –o remount,rw /sysroot
  3. chroot /sysroot
  4. passwd
  5. touch /.autorelabel
  6. exit
  7. exit

Mot de passe chiffré sur le menu grub2

On peut aussi désactiver le mode recovery.

Mettre à zéro grub2

# rm /etc/grub.d/*
# rm /etc/sysconfig/grub
# yum reinstall grub2-tools
# grub2-mkconfig -o /boot/grub2/grub.cfg

Réinstaller grub2

# grub2-install /dev/sda1

7. Scripts de démarrage de service

On retrouvera les scripts de démarrage dans le dossier /etc/init.d/ (System V / Upstart). Pour qu'ils soient liés à un niveau d'exécution, il sont présentés dans les dossier /etc/rc5/ par exemple sous forme de lien symbolique.

Pour activer ces services au démarrage du système, on utilise soit la commande update-rc.d ou chkconfig.

En Debian / Ubuntu, pour activer le service Web Apache :

update-rc.d apache2 defaults

Pour le désactiver :

update-rc.d apache2 remove

En Centos 5/6, pour activer le service Web Apache :

chkconfig --add httpd

Pour le désactiver :

chkconfig --del httpd

e

De manière simplifiée, il s'agit de scripts qui comportent au moins deux arguments possibles : start et stop. D'autres arguments sont souvent développés comme restart ou status. Aussi, les dépendances d'un service sont gérées à partir d'une séquence ordonnées de scripts dans le dossier /etc/rc* du niveau de service. Cette procédure n'est pas des plus robustes, car les événements pour un service ne sont pas gérés par System V, contrairement à Upstart et Systemd.

Voici un modèle formel de script :

#!/bin/bash

case $1 in
start)
# commande qui démarre le service
;;
stop)
# commande qui arrête le service
;;
esac

8. Démarrer, redémarrer et éteindre un système normalement

Sur une machine locale ou virtuelle ou un serveur distant.

Pour redémarrer le système

On peut procéder de différentes manières :

# systemctl reboot
# shutdown -r now
# reboot
# init 6

Pour arrêter le système

On peut choisir :

# systemctl halt
# shutdown -h now
# halt
# init 0

Pour éteindre le système :

# poweroff
# systemctl poweroff

Pour suspendre le système

# systemctl suspend

Hibernation

# systemctl hibernate

Entre hibernation et suspension

# systemctl hybrid-sleep

9. Mettre à jour le noyau

Procédure RHEL.

# yum update kernel

ou alors si le fichier rpm est disponible

# rpm -ivh kernel.rpm

Le dernier noyau installé devient le premier par défaut :

# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-327.13.1.el7.x86_64) 7 (Core)
# grep ^menuentry /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-327.13.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-5cc65046-7a0e-450b-99e8-f0cc34954d75' {
menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-5cc65046-7a0e-450b-99e8-f0cc34954d75' {
menuentry 'CentOS Linux (0-rescue-d939e80ee5d6473297b10a3839c85928) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-d939e80ee5d6473297b10a3839c85928-advanced-5cc65046-7a0e-450b-99e8-f0cc34954d75' {

Modifier le noyau par défaut :

# grub2-set-default 0

Générer la configuration :

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-327.13.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.13.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d939e80ee5d6473297b10a3839c85928
Found initrd image: /boot/initramfs-0-rescue-d939e80ee5d6473297b10a3839c85928.img
done

10. Sources du noyau

ftp.kernel.org

$ ftp ftp.kernel.org
Trying 149.20.4.69...
Connected to ftp.kernel.org (149.20.4.69).
220 Welcome to kernel.org
Name (ftp.kernel.org:francois): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls pub/linux/kernel/v*
227 Entering Passive Mode (149,20,4,69,119,116).
150 Here comes the directory listing.
drwxrwxr-x    2 ftp      ftp          4096 Mar 20  2003 v1.0
drwxrwxr-x    2 ftp      ftp         36864 Mar 20  2003 v1.1
drwxrwxr-x    2 ftp      ftp         12288 Mar 20  2003 v1.2
drwxrwxr-x    2 ftp      ftp         69632 Mar 20  2003 v1.3
drwxrwxr-x    3 ftp      ftp         32768 Feb 08  2004 v2.0
drwxrwxr-x    2 ftp      ftp         98304 Mar 20  2003 v2.1
drwxrwxr-x    3 ftp      ftp         20480 Mar 24  2004 v2.2
drwxrwxr-x    2 ftp      ftp         36864 Mar 20  2003 v2.3
drwxrwxr-x    5 ftp      ftp         36864 May 01  2013 v2.4
drwxrwxr-x    4 ftp      ftp         57344 Jul 14  2003 v2.5
drwxrwxr-x   10 ftp      ftp         73728 Aug 08  2013 v2.6
lrwxrwxrwx    1 ftp      ftp             4 Nov 23  2012 v3.0 -> v3.x
drwxrwxr-x    5 ftp      ftp        262144 Aug 23 13:26 v3.x
drwxr-xr-x    5 ftp      ftp         36864 Aug 22 21:21 v4.x
226 Directory send OK.
ftp> ls pub/linux/kernel/v4.x/linux-4.7*
227 Entering Passive Mode (149,20,4,69,117,64).
150 Here comes the directory listing.
-rw-r--r--    1 ftp      ftp      137739500 Aug 16 19:59 linux-4.7.1.tar.gz
-rw-r--r--    1 ftp      ftp           819 Aug 16 19:59 linux-4.7.1.tar.sign
-rw-r--r--    1 ftp      ftp      90398912 Aug 16 19:59 linux-4.7.1.tar.xz
-rw-r--r--    1 ftp      ftp      137745639 Aug 20 16:18 linux-4.7.2.tar.gz
-rw-r--r--    1 ftp      ftp           819 Aug 20 16:18 linux-4.7.2.tar.sign
-rw-r--r--    1 ftp      ftp      90408888 Aug 20 16:18 linux-4.7.2.tar.xz
-rw-r--r--    1 ftp      ftp      137727435 Jul 24 20:00 linux-4.7.tar.gz
-rw-r--r--    1 ftp      ftp           473 Jul 24 20:00 linux-4.7.tar.sign
-rw-r--r--    1 ftp      ftp      90412100 Jul 24 20:00 linux-4.7.tar.xz
226 Directory send OK.
ftp> quit
221 Goodbye.

11. Compilation du noyau

Voir LPIC2_6 Maintenance et surveillance

Références

results matching ""

    No results matching ""