Démarrage et noyau
- Objectifs LPIC2
- 1. Noyau Linux
- 2. Configuration matérielle
- 3. Modules du noyau
- 4. Fichiers du noyau
- 5. Démarrage du système
- 5. Chargeur de démarrage Grub2
- 6.
init
etsystemd
- 7. Niveaux d'exécution (run levels)
- 7. Scripts de démarrage de service
- 8. Démarrer, redémarrer et éteindre un système normalement
- 9. Mettre à jour le noyau
- 10. Sources du noyau
- 11. Compilation du noyau
- Références
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 valeursysctl -n [variable]
affiche valeur d'une variable comme par exemplesysctl -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
- VM : http://pastebin.com/ZVuh2UK0
- APU : http://pastebin.com/wqAAHrN6
- Rpi : http://pastebin.com/ZVuh2UK0
# 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 commandeinsmod
:
# 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 :
/etc/default/grub
- le fichier contenant les paramètres du menu de GRUB 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,/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/grub
et /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
- Au redémarrage de l’ordinateur, on peut interrompre grub en appuyant sur la touche «e» pour "edit"/éditer.
- A la ligne qui commence par «linux16» ou «linuxefi», effacer
rhgb
etquiet
pour désactiver le démarrage graphique silencieux. - 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. - "CTRL-X" pour redémarrer.
- Remonter la racine pour accéder en lecture/écriture au système de fichier.
mount -o remount,rw /
- Modifier / lire le mot de passe
- Replacer les contextes SELinux sur les fichiers via la commande
touch /.autorelabel
- Redémarrer l’ordinateur :
exec /sbin/reboot
Méthode 2
- Une méthode alternative plus sûre et plus simple consiste à placer
rd.break
au lieu deinit=/bin/bash
dans la ligne de démarrage de grub2 (voir première méthode). La procédure est la suivante : mount –o remount,rw /sysroot
chroot /sysroot
passwd
touch /.autorelabel
exit
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
- http://fr.wikipedia.org/wiki/Sysfs
- http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/Le_noyau_Linux_et_les_modules
- http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/Les_p%C3%A9riph%C3%A9riques_/dev
- http://www.thegeekstuff.com/2010/11/linux-proc-file-system/
- http://en.wikipedia.org/wiki/Procfs
- http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
- https://fr.wikipedia.org/wiki/Initrd
- https://en.wikipedia.org/wiki/System.map
- http://en.wikipedia.org/wiki/Linux_startup_process
- http://0pointer.de/blog/projects/systemd-docs.html
- https://fedoraproject.org/wiki/Systemd
- http://en.wikipedia.org/wiki/Init
- http://fr.wikipedia.org/wiki/Systemd
- http://www.tecmint.com/systemd-replaces-init-in-linux/
- https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet
- http://www.freedesktop.org/wiki/Software/systemd/
- https://wiki.archlinux.org/index.php/SysVinit