Table des matières

LRF138 - De RHEL 6 vers RHEL 7

Système de Fichiers

XFS

XFS est un système de fichiers 64-bit journalisé de haute performance crée par SGI pour son système d'exploitation IRIX. XFS est inclus par défaut avec les versions du noyau Linux 2.5.xx et 2.6.xx. XFS est le système de fichiers par défaut de RHEL/CentOS 7.

Debian propose aussi une version 32 bits du système de fichiers XFS.

Pour plus d'informations concernant XFS, consultez cette page.

LAB #1 - Créer un Système de Fichiers XFS

Créez un système de fichiers XFS sur la partition /dev/sda12 :

[root@centos7 ~]# mkfs.xfs /dev/sda12
meta-data=/dev/sda12             isize=256    agcount=4, agsize=12800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=51200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Les options de cette commande sont :

[root@centos7 ~]# mkfs.xfs --help
mkfs.xfs: invalid option -- '-'
unknown option -- 
Usage: mkfs.xfs
/* blocksize */		[-b log=n|size=num]
/* metadata */		[-m crc=0|1,finobt=0|1]
/* data subvol */	[-d agcount=n,agsize=n,file,name=xxx,size=num,
			    (sunit=value,swidth=value|su=num,sw=num|noalign),
			    sectlog=n|sectsize=num
/* force overwrite */	[-f]
/* inode size */	[-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
			    projid32bit=0|1]
/* no discard */	[-K]
/* log subvol */	[-l agnum=n,internal,size=num,logdev=xxx,version=n
			    sunit=value|su=num,sectlog=n|sectsize=num,
			    lazy-count=0|1]
/* label */		[-L label (maximum 12 characters)]
/* naming */		[-n log=n|size=num,version=2|ci,ftype=0|1]
/* no-op info only */	[-N]
/* prototype file */	[-p fname]
/* quiet */		[-q]
/* realtime subvol */	[-r extsize=num,size=num,rtdev=xxx]
/* sectorsize */	[-s log=n|size=num]
/* version */		[-V]
			devicename
<devicename> is required unless -d name=xxx is given.
<num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB),
      xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
<value> is xxx (512 byte blocks).

Consultez maintenant les caractéristiques du système de fichier :

[root@centos7 ~]# xfs_info /dev/sda12
xfs_info: /dev/sda12 is not a mounted XFS filesystem

[root@centos7 ~]# mkdir /mnt/sda12

[root@centos7 ~]# mount -t xfs /dev/sda12 /mnt/sda12

[root@centos7 ~]# xfs_info /dev/sda12
meta-data=/dev/sda12             isize=256    agcount=4, agsize=12800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=51200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Notez que la partition XFS doit être monté pour pouvoir utiliser la commande xfs_info.

Les options de cette commande sont :

[root@centos7 ~]# xfs_info --help
/sbin/xfs_info: illegal option -- -
Usage: xfs_info [-V] [-t mtab] mountpoint

LAB #2 - Ajouter une Etiquette au Système de Fichiers XFS

Utilisez la commande xfs_admin pour associer une étiquette au système de fichiers :

[root@centos7 ~]# xfs_admin -L my_xfs /dev/sda12
xfs_admin: /dev/sda12 contains a mounted filesystem

fatal error -- couldn't initialize XFS library

[root@centos7 ~]# umount /dev/sda12

[root@centos7 ~]# xfs_admin -L my_xfs /dev/sda12
writing all SBs
new label = "my_xfs"

Notez que la partition XFS doit être démonté pour pouvoir utiliser la commande xfs_admin.

Pour voir l'étiquette, utilisez la commande suivante :

[root@centos7 ~]# xfs_admin -l /dev/sda12
label = "my_xfs"

Notez que l'étiquette doit être de 12 caractères maximum.

Les options de cette commande sont :

[root@centos7 ~]# xfs_admin --help
/sbin/xfs_admin: illegal option -- -
Usage: xfs_admin [-efjlpuV] [-c 0|1] [-L label] [-U uuid] device

Dernièrement, pour obtenir seul l'UUID du système de fichiers, utilisez la commande xfs-admin et l'option -u :

[root@centos7 ~]# xfs_admin -u /dev/sda12
UUID = 15db1b62-0866-4aa4-9ac1-3ac325a4e20f

La commande xfs_metadump est utilisée pour sauvegarder les méta-données du système de fichiers, tandis que la commande xfs_mdrestore est utilisée pour restaurer les les méta-données du système de fichiers.

LUKS

LAB #3 - Créer un Système de Fichiers Chiffré avec LUKS sous RHEL/CentOS 7

Présentation

LUKS ( Linux Unified Key Setup ) permet de chiffrer l'intégralité d'un disque de telle sorte que celui-ci soit utilisable sur d'autres plates-formes et distributions de Linux (voire d'autres systèmes d'exploitation). Il supporte des mots de passe multiples, afin que plusieurs utilisateurs soient en mesure de déchiffrer le même volume sans partager leur mot de passe.

Mise en Place

Remplissez la partition /dev/sda12 avec des données aléatoires :

[root@centos7 ~]# shred -v --iterations=1 /dev/sda12
shred: /dev/sda12: pass 1/1 (random)...

Important : L'étape ci-dessus est très importante parce que elle permet de s'assurer qu'aucune donnée ne reste sur la partition.

Initialisez la partition avec LUKS :

[root@centos7 ~]# cryptsetup --verbose --verify-passphrase luksFormat /dev/sda12

WARNING!
========
This will overwrite data on /dev/sda12 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: fenestros123456789
Verify passphrase: fenestros123456789
Command successful.

Important : La passphrase ne sera pas en claire. Elle l'est ici pour vous montrer un mot de passe acceptable pour LUKS.

Ouvrez la partition LUKS en lui donnant le nom sda12 :

[root@centos7 ~]# cryptsetup luksOpen /dev/sda12 sda12
Enter passphrase for /dev/sda12: fenestros123456789

Vérifiez que le système voit la partition :

[root@centos7 ~]# ls -l /dev/mapper | grep sda12
lrwxrwxrwx. 1 root root       7 Oct  5 20:18 sda12 -> ../dm-0

Créez maintenant un système de fichiers sur /dev/mapper/sda12 :

[root@centos7 ~]# mkfs.xfs /dev/mapper/sda12
meta-data=/dev/mapper/sda12      isize=256    agcount=4, agsize=12672 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=50688, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Montez la partition LUKS :

[root@centos7 ~]# mkdir /mnt/sda12
[root@centos7 ~]# mount /dev/mapper/sda12 /mnt/sda12

Vérifiez la présence du montage :

[root@centos7 ~]# df -h | grep sda12
/dev/mapper/sda12  195M   11M  185M   6% /mnt/sda12

Editez le fichier /etc/crypttab/ :

[root@centos7 ~]# cat /etc/crypttab
sda12 /dev/sda12 none

Modifiez le fichier /etc/fstab :

[root@centos7 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Mar  8 12:38:10 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b35de665-5ec8-4226-a533-58a1b567ac91 /                       xfs     defaults        1 1
UUID=e8d3bd48-1386-411c-9675-41c3f8f1a309 /boot                   xfs     defaults        1 2
UUID=11a4d11d-81e4-46a7-82e0-7796cd597dc9 swap                    swap    defaults        0 0
/dev/mapper/sda12			              /mnt/sda12		      xfs	  defaults	      1 2

Restaurer les SC par défaut de SELinux :

[root@centos7 ~]# /sbin/restorecon -v -R /mnt/sda12
/sbin/restorecon reset /mnt/sda12 context system_u:object_r:unlabeled_t:s0->system_u:object_r:mnt_t:s0

Redémarrez votre machine virtuelle :

[root@centos7 ~]# shutdown -r now

Important : Lors du démarrage de la machine virtuelle, le système devrait vous demander d'entrer la passphrase fenestros123456789 pour permettre le montage de /dev/sda12.

Ajouter une deuxième Passphrase

Pour ajouter une deuxième passphrase, utilisez la commande cryptsetup avec la sous-commande luksAddKey :

[root@centos7 ~]# cryptsetup luksAddKey /dev/sda12
Enter any existing passphrase: fenestros123456789
Enter new passphrase for key slot: redhat123456789
Verify passphrase: redhat123456789
[root@centos7 ~]# 

Important : Les passphrases ne seront pas en claire. Elle le sont ici pour vous montrer des mots de passe acceptables pour LUKS.

Supprimer une Passphrase

Pour supprimer une passphrase, utilisez la commande cryptsetup avec la sous-commande luksRemoveKey :

[root@centos7 ~]# cryptsetup luksRemoveKey /dev/sda12
Enter passphrase to be deleted: redhat123456789

Journalisation

Journald

Sous RHEL/CentOS 7, les fichiers de Syslog sont gardés pour une question de compatibilité. Cependant, tous les journaux sont d'abord collectés par Journald pour ensuite être redistribués vers les fichiers classiques se trouvant dans le répertoire /var/log. Les journaux de journald sont stockés dans un seul et unique fichier dynamique dans le répertoire /run/log/journal :

[root@centos7 ~]# ls -l /run/log/journal/
total 0
drwxr-sr-x. 2 root systemd-journal 60 Sep 29 14:41 a2feb9eb09b1488da0f23b99a66350f8

A l'extinction de la machine les journaux sont effacés.

Pour rendre les journaux permenants, il faut créer le répertoire /var/log/journal :

[root@centos7 ~]# mkdir /var/log/journal
[root@centos7 ~]# ls -l /var/log/journal/
total 0
[root@centos7 ~]# systemctl restart systemd-journald
[root@centos7 ~]# ls -l /run/log/journal/
ls: cannot access /run/log/journal/: No such file or directory
[root@centos7 ~]# ls -l /var/log/journal/
total 0
drwxr-sr-x. 2 root systemd-journal 73 Sep 29 15:30 a2feb9eb09b1488da0f23b99a66350f8
[root@centos7 ~]# 

Important : Journald ne peut pas envoyer les traces à un autre ordinateur. Pour utiliser un serveur de journalisation distant il faut donc inclure la directive ForwardToSyslog=yes dans le fichier de configuration de journald, /etc/systemd/journald.conf, puis configurer Rsyslog à envoyer les traces au serveur distant.

Consultation des Journaux

L'utilisation de la commande journalctl permet la consultation des journaux :

[root@centos7 ~]# journalctl
-- Logs begin at Tue 2015-09-29 11:25:10 CEST, end at Tue 2015-09-29 18:10:01 CEST. --
Sep 29 11:25:10 centos7.fenestros.loc systemd-journal[82]: Runtime journal is using 8.0M (max 74.8M, leaving 112.3M of free 740.8M, current limit 74.8
Sep 29 11:25:10 centos7.fenestros.loc systemd-journal[82]: Runtime journal is using 8.0M (max 74.8M, leaving 112.3M of free 740.8M, current limit 74.8
Sep 29 11:25:10 centos7.fenestros.loc kernel: Initializing cgroup subsys cpuset
Sep 29 11:25:10 centos7.fenestros.loc kernel: Initializing cgroup subsys cpu
Sep 29 11:25:10 centos7.fenestros.loc kernel: Initializing cgroup subsys cpuacct
Sep 29 11:25:10 centos7.fenestros.loc kernel: Linux version 3.10.0-229.4.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (R
Sep 29 11:25:10 centos7.fenestros.loc kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-229.4.2.el7.x86_64 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: BIOS-provided physical RAM map:
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x0000000000100000-0x000000005ffeffff] usable
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x000000005fff0000-0x000000005fffffff] ACPI data
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: NX (Execute Disable) protection: active
Sep 29 11:25:10 centos7.fenestros.loc kernel: SMBIOS 2.5 present.
Sep 29 11:25:10 centos7.fenestros.loc kernel: DMI: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: remove [mem 0x000a0000-0x000fffff] usable
Sep 29 11:25:10 centos7.fenestros.loc kernel: No AGP bridge found
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: last_pfn = 0x5fff0 max_arch_pfn = 0x400000000
Sep 29 11:25:10 centos7.fenestros.loc kernel: MTRR default type: uncachable
Sep 29 11:25:10 centos7.fenestros.loc kernel: MTRR variable ranges disabled:
Sep 29 11:25:10 centos7.fenestros.loc kernel: x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
Sep 29 11:25:10 centos7.fenestros.loc kernel: CPU MTRRs all blank - virtualized system.
Sep 29 11:25:10 centos7.fenestros.loc kernel: found SMP MP-table at [mem 0x0009fff0-0x0009ffff] mapped at [ffff88000009fff0]
Sep 29 11:25:10 centos7.fenestros.loc kernel: Base memory trampoline at [ffff880000099000] 99000 size 24576
Sep 29 11:25:10 centos7.fenestros.loc kernel: init_memory_mapping: [mem 0x00000000-0x000fffff]
lines 1-29

Important : Notez que les messages importants sont en gras, par exemple les messages de niveaux notice ou warning et que les messages graves sont en rouge.

Consultation des Journaux d'une Application Spécifique

Pour consulter les entrées concernant une application spécifique, il suffit de passer l'exécutable, y compris son chemin complet, en argument à la commande journalctl :

[root@centos7 ~]# journalctl /sbin/anacron
-- Logs begin at Tue 2015-09-29 11:25:10 CEST, end at Tue 2015-09-29 18:20:01 CEST. --
Sep 29 12:01:01 centos7.fenestros.loc anacron[4100]: Anacron started on 2015-09-29
Sep 29 12:01:01 centos7.fenestros.loc anacron[4100]: Will run job `cron.daily' in 38 min.
Sep 29 12:01:01 centos7.fenestros.loc anacron[4100]: Jobs will be executed sequentially
Sep 29 13:45:00 centos7.fenestros.loc anacron[4100]: Job `cron.daily' started

Important : Rappelez-vous que sous RHEL/CentOS 7 le répertoire /sbin est un lien symbolique vers /usr/sbin.

Consultation des Journaux depuis le Dernier Démarrage

Pour consulter les entrées depuis le dernier démarrage, il suffit d'utiliser l'option -b de la commande journalctl :

[root@centos7 ~]# journalctl -b | more
-- Logs begin at Tue 2015-09-29 11:25:10 CEST, end at Tue 2015-09-29 18:28:56 CEST. --
Sep 29 11:25:10 centos7.fenestros.loc systemd-journal[82]: Runtime journal is using 8.0M (max 74.8M, leaving 112.3M of free 740.8M, current limit 74.8
M).
Sep 29 11:25:10 centos7.fenestros.loc systemd-journal[82]: Runtime journal is using 8.0M (max 74.8M, leaving 112.3M of free 740.8M, current limit 74.8
M).
Sep 29 11:25:10 centos7.fenestros.loc kernel: Initializing cgroup subsys cpuset
Sep 29 11:25:10 centos7.fenestros.loc kernel: Initializing cgroup subsys cpu
Sep 29 11:25:10 centos7.fenestros.loc kernel: Initializing cgroup subsys cpuacct
Sep 29 11:25:10 centos7.fenestros.loc kernel: Linux version 3.10.0-229.4.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (R
ed Hat 4.8.2-16) (GCC) ) #1 SMP Wed May 13 10:06:09 UTC 2015
Sep 29 11:25:10 centos7.fenestros.loc kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-229.4.2.el7.x86_64 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac
91 ro vconsole.keymap=fr crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: BIOS-provided physical RAM map:
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x0000000000100000-0x000000005ffeffff] usable
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x000000005fff0000-0x000000005fffffff] ACPI data
Sep 29 11:25:10 centos7.fenestros.loc kernel: BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: NX (Execute Disable) protection: active
Sep 29 11:25:10 centos7.fenestros.loc kernel: SMBIOS 2.5 present.
Sep 29 11:25:10 centos7.fenestros.loc kernel: DMI: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: remove [mem 0x000a0000-0x000fffff] usable
Sep 29 11:25:10 centos7.fenestros.loc kernel: No AGP bridge found
Sep 29 11:25:10 centos7.fenestros.loc kernel: e820: last_pfn = 0x5fff0 max_arch_pfn = 0x400000000
Sep 29 11:25:10 centos7.fenestros.loc kernel: MTRR default type: uncachable
Sep 29 11:25:10 centos7.fenestros.loc kernel: MTRR variable ranges disabled:
Sep 29 11:25:10 centos7.fenestros.loc kernel: x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
--More--

Important : Notez que vous pouvez consulter les messages des démarrages précédents, il est possible d'utiliser les options -b 1, -b 2 etc.

Consultation des Journaux d'une Priorité Spécifique

Pour consulter les entrées à partir d'une priorité spécifique et supérieur, il suffit d'utiliser l'option -p de la commande journalctl en spécifiant la priorité concernée :

[root@centos7 ~]# journalctl -p warning
-- Logs begin at Tue 2015-09-29 11:25:10 CEST, end at Tue 2015-09-29 18:30:02 CEST. --
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: RSDP 00000000000e0000 00024 (v02 VBOX  )
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: XSDT 000000005fff0030 0003C (v01 VBOX   VBOXXSDT 00000001 ASL  00000061)
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: FACP 000000005fff00f0 000F4 (v04 VBOX   VBOXFACP 00000001 ASL  00000061)
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: DSDT 000000005fff0470 01BF1 (v01 VBOX   VBOXBIOS 00000002 INTL 20100528)
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: FACS 000000005fff0200 00040
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: APIC 000000005fff0240 00054 (v02 VBOX   VBOXAPIC 00000001 ASL  00000061)
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: SSDT 000000005fff02a0 001CC (v01 VBOX   VBOXCPUT 00000002 INTL 20100528)
Sep 29 11:25:10 centos7.fenestros.loc kernel: kexec: crashkernel=auto resulted in zero bytes of reserved memory.
Sep 29 11:25:10 centos7.fenestros.loc kernel: Zone ranges:
Sep 29 11:25:10 centos7.fenestros.loc kernel:   DMA      [mem 0x00001000-0x00ffffff]
Sep 29 11:25:10 centos7.fenestros.loc kernel:   DMA32    [mem 0x01000000-0xffffffff]
Sep 29 11:25:10 centos7.fenestros.loc kernel:   Normal   empty
Sep 29 11:25:10 centos7.fenestros.loc kernel: Movable zone start for each node
Sep 29 11:25:10 centos7.fenestros.loc kernel: Early memory node ranges
Sep 29 11:25:10 centos7.fenestros.loc kernel:   node   0: [mem 0x00001000-0x0009efff]
Sep 29 11:25:10 centos7.fenestros.loc kernel:   node   0: [mem 0x00100000-0x5ffeffff]
Sep 29 11:25:10 centos7.fenestros.loc kernel: Built 1 zonelists in Node order, mobility grouping on.  Total pages: 386937
Sep 29 11:25:10 centos7.fenestros.loc kernel: Policy zone: DMA32
Sep 29 11:25:10 centos7.fenestros.loc kernel: tsc: Fast TSC calibration failed
Sep 29 11:25:10 centos7.fenestros.loc kernel: tsc: Unable to calibrate against PIT
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: All ACPI Tables successfully acquired
Sep 29 11:25:10 centos7.fenestros.loc kernel: NMI watchdog: disabled (cpu0): hardware events not enabled
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI: Executed 1 blocks of module-level executable AML code
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S1_] (20130517/hwxface-571)
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20130517/hwxface-571)
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S3_] (20130517/hwxface-571)
Sep 29 11:25:10 centos7.fenestros.loc kernel: ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S4_] (20130517/hwxface-571)
Sep 29 11:25:10 centos7.fenestros.loc kernel: acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under t
lines 1-29
Consultation des Journaux d'une Plage de Dates ou d'Heures

Pour consulter les entrées d'une plage de dates ou d'heures, il suffit de passer cette plage en argument à la commande journalctl :

[root@centos7 ~]# journalctl --since 18:00 --until now
-- Logs begin at Tue 2015-09-29 11:25:10 CEST, end at Tue 2015-09-29 18:30:02 CEST. --
Sep 29 18:05:50 centos7.fenestros.loc systemd[1]: Time has been changed
Sep 29 18:06:23 centos7.fenestros.loc dbus-daemon[526]: dbus[526]: [system] Activating via systemd: service name='net.reactivated.Fprint' unit='fprint
Sep 29 18:06:23 centos7.fenestros.loc dbus[526]: [system] Activating via systemd: service name='net.reactivated.Fprint' unit='fprintd.service'
Sep 29 18:06:23 centos7.fenestros.loc systemd[1]: Starting Fingerprint Authentication Daemon...
Sep 29 18:06:23 centos7.fenestros.loc dbus-daemon[526]: dbus[526]: [system] Successfully activated service 'net.reactivated.Fprint'
Sep 29 18:06:23 centos7.fenestros.loc dbus[526]: [system] Successfully activated service 'net.reactivated.Fprint'
Sep 29 18:06:23 centos7.fenestros.loc systemd[1]: Started Fingerprint Authentication Daemon.
Sep 29 18:06:23 centos7.fenestros.loc fprintd[7642]: Launching FprintObject
Sep 29 18:06:23 centos7.fenestros.loc fprintd[7642]: ** Message: D-Bus service launched with name: net.reactivated.Fprint
Sep 29 18:06:23 centos7.fenestros.loc fprintd[7642]: ** Message: entering main loop
Sep 29 18:06:27 centos7.fenestros.loc gdm-password][7646]: gkr-pam: unlocked login keyring
Sep 29 18:06:27 centos7.fenestros.loc dbus-daemon[526]: dbus[526]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbu
Sep 29 18:06:27 centos7.fenestros.loc dbus[526]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.
Sep 29 18:06:27 centos7.fenestros.loc systemd[1]: Starting Hostname Service...
Sep 29 18:06:27 centos7.fenestros.loc dbus-daemon[526]: dbus[526]: [system] Successfully activated service 'org.freedesktop.hostname1'
Sep 29 18:06:27 centos7.fenestros.loc dbus[526]: [system] Successfully activated service 'org.freedesktop.hostname1'
Sep 29 18:06:27 centos7.fenestros.loc systemd[1]: Started Hostname Service.
Sep 29 18:06:53 centos7.fenestros.loc fprintd[7642]: ** Message: No devices in use, exit
Sep 29 18:09:27 centos7.fenestros.loc systemd[1]: Stopping Journal Service...
Sep 29 18:09:27 centos7.fenestros.loc systemd-journal[362]: Journal stopped
Sep 29 18:09:27 centos7.fenestros.loc systemd-journal[7694]: Permanent journal is using 8.0M (max 699.0M, leaving 1.0G of free 2.5G, current limit 699
Sep 29 18:09:27 centos7.fenestros.loc systemd-journal[7694]: Permanent journal is using 8.0M (max 699.0M, leaving 1.0G of free 2.5G, current limit 699
Sep 29 18:09:27 centos7.fenestros.loc systemd-journal[7694]: Time spent on flushing to /var is 52.802ms for 1492 entries.
Sep 29 18:09:27 centos7.fenestros.loc systemd-journald[362]: Received SIGTERM
Sep 29 18:09:27 centos7.fenestros.loc systemd-journal[7694]: Journal started
Sep 29 18:09:27 centos7.fenestros.loc systemd[1]: Starting Trigger Flushing of Journal to Persistent Storage...
Sep 29 18:09:27 centos7.fenestros.loc systemd[1]: Started Trigger Flushing of Journal to Persistent Storage.
Sep 29 18:10:01 centos7.fenestros.loc systemd[1]: Created slice user-0.slice.
lines 1-29

Important : Le format de la date est 2015-09-29 18:38:00. Il est possible d'utiliser des mots clefs : yesterday, today, tomorrow, now.

Consultation des Journaux en Live

Pour consulter les journaux en live, il suffit d'utiliser l'option -f de la commande journalctl :

[root@centos7 ~]# journalctl -f
-- Logs begin at Tue 2015-09-29 11:25:10 CEST. --
Sep 29 18:28:56 centos7.fenestros.loc gdm-password][8599]: gkr-pam: unlocked login keyring
Sep 29 18:29:24 centos7.fenestros.loc fprintd[8595]: ** Message: No devices in use, exit
Sep 29 18:30:01 centos7.fenestros.loc systemd[1]: Created slice user-0.slice.
Sep 29 18:30:02 centos7.fenestros.loc systemd[1]: Starting Session 33 of user root.
Sep 29 18:30:02 centos7.fenestros.loc systemd[1]: Started Session 33 of user root.
Sep 29 18:30:02 centos7.fenestros.loc CROND[8670]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 29 18:40:01 centos7.fenestros.loc systemd[1]: Created slice user-0.slice.
Sep 29 18:40:01 centos7.fenestros.loc systemd[1]: Starting Session 34 of user root.
Sep 29 18:40:01 centos7.fenestros.loc systemd[1]: Started Session 34 of user root.
Sep 29 18:40:01 centos7.fenestros.loc CROND[8809]: (root) CMD (/usr/lib64/sa/sa1 1 1)

Ouvrez un deuxième terminal et saisissez la commande suivante :

[trainee@centos7 ~]$ logger -p user.info Linux est super

Retournez consulter le premier terminal :

[root@centos7 ~]# journalctl -f
-- Logs begin at Tue 2015-09-29 11:25:10 CEST. --
Sep 29 18:28:56 centos7.fenestros.loc gdm-password][8599]: gkr-pam: unlocked login keyring
Sep 29 18:29:24 centos7.fenestros.loc fprintd[8595]: ** Message: No devices in use, exit
Sep 29 18:30:01 centos7.fenestros.loc systemd[1]: Created slice user-0.slice.
Sep 29 18:30:02 centos7.fenestros.loc systemd[1]: Starting Session 33 of user root.
Sep 29 18:30:02 centos7.fenestros.loc systemd[1]: Started Session 33 of user root.
Sep 29 18:30:02 centos7.fenestros.loc CROND[8670]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 29 18:40:01 centos7.fenestros.loc systemd[1]: Created slice user-0.slice.
Sep 29 18:40:01 centos7.fenestros.loc systemd[1]: Starting Session 34 of user root.
Sep 29 18:40:01 centos7.fenestros.loc systemd[1]: Started Session 34 of user root.
Sep 29 18:40:01 centos7.fenestros.loc CROND[8809]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 29 18:43:00 centos7.fenestros.loc trainee[8930]: Linux est super

Important : Notez la présence de la dernière ligne.

Consultation des Journaux avec des Mots Clefs

Pour consulter les mots clefs compris par Journald, tapez la commande journalctl puis appuyer trois fois sur la touche Tab ⇆ :

[root@centos7 ~]# journalctl [tab] [tab] [tab]
_AUDIT_LOGINUID=             COREDUMP_EXE=                _MACHINE_ID=                 _SOURCE_REALTIME_TIMESTAMP=  _TRANSPORT=
_AUDIT_SESSION=              __CURSOR=                    MESSAGE=                     SYSLOG_FACILITY=             _UDEV_DEVLINK=
_BOOT_ID=                    ERRNO=                       MESSAGE_ID=                  SYSLOG_IDENTIFIER=           _UDEV_DEVNODE=
_CMDLINE=                    _EXE=                        __MONOTONIC_TIMESTAMP=       SYSLOG_PID=                  _UDEV_SYSNAME=
CODE_FILE=                   _GID=                        _PID=                        _SYSTEMD_CGROUP=             _UID=
CODE_FUNC=                   _HOSTNAME=                   PRIORITY=                    _SYSTEMD_OWNER_UID=          
CODE_LINE=                   _KERNEL_DEVICE=              __REALTIME_TIMESTAMP=        _SYSTEMD_SESSION=            
_COMM=                       _KERNEL_SUBSYSTEM=           _SELINUX_CONTEXT=            _SYSTEMD_UNIT=    

Pour voir la liste des processus dont les traces sont inclus dans les journaux du mots clefs, tapez la commande journalctl suivi par le nom d'un mot clef puis appuyer deux fois sur la touche Tab ⇆ :

[root@centos7 ~]# journalctl _UID=
0     1000  172   32    42    70    81    994   997   999   
[root@centos7 ~]# journalctl _COMM=
abrtd            avahi-daemon     dracut-cmdline   kdumpctl         NetworkManager   rtkit-daemon     su               vboxadd-service
accounts-daemon  bluetoothd       fprintd          libvirtd         nm-dispatcher    run-parts        systemd          vmtoolsd
alsactl          chronyd          gdm-session-wor  logger           polkitd          sa1              systemd-fsck     
anacron          colord           gnome-session    master           postlog          sh               systemd-journal  
audispd          crond            goa-daemon       ModemManager     pulseaudio       smartd           systemd-logind   
auditd           dbus-daemon      goa-identity-se  netcf-transacti  rngd             sm-notify        udisksd          
augenrules       dhclient         irqbalance       network          rpcbind          sshd             vboxadd 
[root@centos7 ~]# journalctl _COMM=   

Gestion du Démarrage et des Services

GRUB 2 sous RHEL/CentOS 7

GRUB 2 est une ré-écriture complète de GRUB Legacy. Il apporte des améliorations, notamment GRUB 2 sait utiliser des partitions RAID et LVM.

Le lancement de GRUB 2 se fait en trois étapes :

  • Etape 1 : Le boot.img, stocké dans les 512 premiers octets du secteur 0 avec la table des partitions, est lancé. Son seul but est de lancer l'étape 1.5,
  • Etape 1.5 : Le core.img, d'une taille approximative de 25 Ko et stocké dans les secteurs 1 à 62, est lance. Son travail est de charger des pilotes qui supportent de multiples systèmes de fichiers puis de lancer l'étape 2 dans un des systèmes de fichiers,
  • Etape 2 : Contenu dans le répertoire /boot/grub2/, il lance le menu pour que l'utilisateur puisse choisir les système d'exploitation à lancer.

Dans le cas où le gestionnaire d'amorçage GRUB 2 n'est pas installé, il convient de saisir la commande suivante :

# grub2-install /dev/périphérique [Entrée]

périphérique est le nom du périphérique ou l'étape 1 de GRUB2 doit s'installer dans le MBR.

GRUB 2 lit ses entrées de menus à partir du fichier /boot/grub2/grub.cfg. Pour visualiser ce fichier, il convient de saisir la commande suivante :

[root@centos7 ~]# cat /boot/grub2/grub.cfg 
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-229.4.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-b35de665-5ec8-4226-a533-58a1b567ac91' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod xfs
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  e8d3bd48-1386-411c-9675-41c3f8f1a309
	else
	  search --no-floppy --fs-uuid --set=root e8d3bd48-1386-411c-9675-41c3f8f1a309
	fi
	linux16 /vmlinuz-3.10.0-229.4.2.el7.x86_64 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac91 ro vconsole.keymap=fr crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=en_US.UTF-8
	initrd16 /initramfs-3.10.0-229.4.2.el7.x86_64.img
}
menuentry 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-b35de665-5ec8-4226-a533-58a1b567ac91' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod xfs
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  e8d3bd48-1386-411c-9675-41c3f8f1a309
	else
	  search --no-floppy --fs-uuid --set=root e8d3bd48-1386-411c-9675-41c3f8f1a309
	fi
	linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac91 ro vconsole.keymap=fr crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=en_US.UTF-8
	initrd16 /initramfs-3.10.0-123.el7.x86_64.img
}
menuentry 'CentOS Linux, with Linux 0-rescue-a2feb9eb09b1488da0f23b99a66350f8' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-a2feb9eb09b1488da0f23b99a66350f8-advanced-b35de665-5ec8-4226-a533-58a1b567ac91' {
	load_video
	insmod gzio
	insmod part_msdos
	insmod xfs
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  e8d3bd48-1386-411c-9675-41c3f8f1a309
	else
	  search --no-floppy --fs-uuid --set=root e8d3bd48-1386-411c-9675-41c3f8f1a309
	fi
	linux16 /vmlinuz-0-rescue-a2feb9eb09b1488da0f23b99a66350f8 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac91 ro vconsole.keymap=fr crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet
	initrd16 /initramfs-0-rescue-a2feb9eb09b1488da0f23b99a66350f8.img
}
if [ "x$default" = 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' ]; then default='Advanced options for CentOS Linux>CentOS Linux, with Linux 3.10.0-123.el7.x86_64'; fi;
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

Notez que ce fichier ne doit pas être modifié manuellement. En effet, il est généré par la commande grub2-mkconfig sous RHEL/CentOS 7. La commande grub2-mkconfig prend en argument l'emplacement du fichier destination, par exemple :

  • grub2-mkconfig -o /boot/grub2/grub.cfg, ou
  • grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

Lors de l'exécution de la commande grub2-mkconfig plusieurs fichiers sont lus :

Le fichier /boot/grub2/device.map

[root@centos7 ~]# cat /boot/grub2/device.map
# this device map was generated by anaconda
(hd0)      /dev/sda
(hd1)      /dev/sda

Le fichier /etc/default/grub

Ce fichier contient la configuration par défaut des paramètres de GRUB 2 :

[root@centos7 ~]# 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="vconsole.keymap=fr crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

Important : Notez que toute modification de ce fichier nécessite l'exécution de la commande grub2-mkconfig sous RHEL/CentOS 7 pour que les modifications soient prises en compte.

Dans ce fichier les directives sont :

Directive Description
GRUB_DEFAULT Entrée du menu sélectionner par défaut
GRUB_TIMEOUT Durée de l'affichage du menu avant le démarrage en utilisant la valeur de GRUB_DEFAULT
GRUB_DISTRIBUTOR Ligne de commande qui génère le texte de l'entrée
GRUB_CMDLINE_LINUX_DEFAULT Paramètres passés au noyau lors d'un démarrage normal (Hors donc le mode secours)
GRUB_CMDLINE_LINUX Paramètres passés au noyau peu importe le type de démarrage
GRUB_TERMINAL Si non commentée, cette directive désactive le démarrage graphique
GRUB_GFXMODE Indique la résolution utilisée lors d'un démarrage graphique
GRUB_DISABLE_LINUX_UUID Si true, cette directive empêche l'utilisation de l'UUID de la partition
GRUB_DISABLE_LINUX_RECOVERY Si true, cette directive empêche la génération des entrées en mode recovery
GRUB_INIT_TUNE Permet d'obtenir un beep au démarrage de GRUB 2
GRUB_BADRAM Permet de spécifier de la mémoire défaillante

Les fichiers du répertoire /etc/grub.d

Les fichiers de ce répertoire sont exécutés dans l'ordre alphanumérique et servent à construire les menus de GRUB 2 :

[root@centos7 ~]# ls -l /etc/grub.d
total 68
-rwxr-xr-x. 1 root root  8702 Mar 26 09:27 00_header
-rwxr-xr-x. 1 root root   992 Oct 17  2014 00_tuned
-rwxr-xr-x. 1 root root 10114 Mar 26 09:27 10_linux
-rwxr-xr-x. 1 root root 10275 Mar 26 09:27 20_linux_xen
-rwxr-xr-x. 1 root root  2559 Mar 26 09:27 20_ppc_terminfo
-rwxr-xr-x. 1 root root 11169 Mar 26 09:27 30_os-prober
-rwxr-xr-x. 1 root root   214 Mar 26 09:27 40_custom
-rwxr-xr-x. 1 root root   216 Mar 26 09:27 41_custom
-rw-r--r--. 1 root root   483 Mar 26 09:27 README
  • Le fichier /etc/grub.d/10_Linux,
    • Le fichier 10_Linux contient des boucles pour rechercher des noyaux Linux,
  • Le fichier /etc/grub.d/30_os-prober,
    • Ce fichier recherche des éventuels systèmes d'exploitation autre que Linux,
  • Les fichiers /etc/grub.d/40_custom et /etc/grub.d/41_custom,
    • Ces deux fichiers sont fournis en tant que modèles à personnaliser.

Configurer l'Authentification

Pour configurer l'authentification sous GRUB 2, il faut créer le fichier /etc/grub.d/01_users :

[root@centos7 ~]# touch /etc/grub.d/01_users 
[root@centos7 ~]# chmod 755 /etc/grub.d/01_users 

Créez deux mots de passe hashés au format PBKDF2 en utilisant la commande grub2-mkpasswd-pbkdf2 sous RHEL/CentOS :

[root@centos7 ~]# grub2-mkpasswd-pbkdf2
Enter password: pass123
Reenter password: pass123
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.0298C1C613A451C46FBC95BB2AC7A41BCEC1C61512EF785BD81E3B65DFF9D57ED4ADF8906C3EF33C22C06FBDD366E1C118FC41110BD646A4D49EF86EFD0573BF.E14A45900096D773BE99BEA9AB8D4FA81431458952798B997D4FC9E0850426F6798979371B8EBD331DB33AE8FEAE25E6773156D42F21B884DBA405546782B3BD
[root@centos7 ~]# grub2-mkpasswd-pbkdf2
Enter password: pass456
Reenter password: pass456
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.161D4183DC832357403296ED05961FCF494AED9E20DC21C84EA89085EB9EF5AAE4C7D4A276AA5CC21F9C224B2ECA010B915B4830E9648A7398EB4A91E7E3D252.8277512B849FF727FDD0716D1D4CDC6B92E53918F665282E02133AAD1046EB10273A2BC70D76558FFC34A0C0C8BE5132E4C4C02C7C9C1A567BD5365D77350FCF

Editez le fichier /etc/grub.d/01_users ainsi :

/etc/grub.d/01_users
#!/bin/sh -e
cat <<EOF
set superusers="root"
password_pbkdf2 root
grub.pbkdf2.sha512.10000.0298C1C613A451C46FBC95BB2AC7A41BCEC1C61512EF785BD81E3B65DFF9D57ED4ADF8906C3EF33C22C06FBDD366E1C118FC41110BD646A4D49EF86EFD0573BF.E14A45900096D773BE99BEA9AB8D4FA81431458952798B997D4FC9E0850426F6798979371B8EBD331DB33AE8FEAE25E6773156D42F21B884DBA405546782B3BD
password_pbkdf2 trainee
grub.pbkdf2.sha512.10000.161D4183DC832357403296ED05961FCF494AED9E20DC21C84EA89085EB9EF5AAE4C7D4A276AA5CC21F9C224B2ECA010B915B4830E9648A7398EB4A91E7E3D252.8277512B849FF727FDD0716D1D4CDC6B92E53918F665282E02133AAD1046EB10273A2BC70D76558FFC34A0C0C8BE5132E4C4C02C7C9C1A567BD5365D77350FCF
EOF

Il est aussi possible d'utiliser des mots de passe non cryptés. Modifiez donc le fichier /etc/grub.d/01_users ainsi :

/etc/grub.d/01_users
#!/bin/sh -e
cat <<EOF
set superusers="root"
password root fenestros
password trainee trainee
EOF

Ouvrez maintenant le fichier /boot/grub2/grub.cfg et copier le premier menuentry de la section /etc/grub.d/10_linux :

menuentry 'CentOS Linux (3.10.0-229.4.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-b35de665-5ec8-4226-a533-58a1b567ac91' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod xfs
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  e8d3bd48-1386-411c-9675-41c3f8f1a309
	else
	  search --no-floppy --fs-uuid --set=root e8d3bd48-1386-411c-9675-41c3f8f1a309
	fi
	linux16 /vmlinuz-3.10.0-229.4.2.el7.x86_64 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac91 ro vconsole.keymap=fr crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=en_US.UTF-8
	initrd16 /initramfs-3.10.0-229.4.2.el7.x86_64.img
}

Collez maintenant ce menuentry dans le fichier /etc/grub.d/40_custom :

/etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'CentOS Linux (3.10.0-229.4.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-b35de665-5ec8-4226-a533-58a1b567ac91' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod xfs
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  e8d3bd48-1386-411c-9675-41c3f8f1a309
	else
	  search --no-floppy --fs-uuid --set=root e8d3bd48-1386-411c-9675-41c3f8f1a309
	fi
	linux16 /vmlinuz-3.10.0-229.4.2.el7.x86_64 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac91 ro vconsole.keymap=fr crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=en_US.UTF-8
	initrd16 /initramfs-3.10.0-229.4.2.el7.x86_64.img
}

Modifier le debut du menuentry ainsi :

menuentry 'CentOS Linux (3.10.0-229.4.2.el7.x86_64) 7 (Core) pour TRAINEE' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-b35de665-5ec8-4226-a533-58a1b567ac91' --users trainee {

Sous RHEL/CentOS, lancez la commande grub2-mkconfig -o /boot/grub2/grub.cfg :

[root@centos7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-a2feb9eb09b1488da0f23b99a66350f8
Found initrd image: /boot/initramfs-0-rescue-a2feb9eb09b1488da0f23b99a66350f8.img
done

En examinant le fichier /boot/grub2/grub.cfg on doit pouvoir constater la présence de la section /etc/grub.d/40_custom :

...
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'CentOS Linux (3.10.0-229.4.2.el7.x86_64) 7 (Core) pour TRAINEE' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-b35de665-5ec8-4226-a533-58a1b567ac91' --users trainee {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod xfs
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  e8d3bd48-1386-411c-9675-41c3f8f1a309
	else
	  search --no-floppy --fs-uuid --set=root e8d3bd48-1386-411c-9675-41c3f8f1a309
	fi
	linux16 /vmlinuz-3.10.0-229.4.2.el7.x86_64 root=UUID=b35de665-5ec8-4226-a533-58a1b567ac91 ro vconsole.keymap=fr crashkernel=auto  vconsole.font=latarcyrheb-sun16 rhgb quiet LANG=en_US.UTF-8
	initrd16 /initramfs-3.10.0-229.4.2.el7.x86_64.img
}
### END /etc/grub.d/40_custom ###
...

A faire : Redémarrez votre VM et choisissez l'entrée de GRUB 2 issue du fichier /etc/grub.d/40_custom puis constatez que GRUB 2 demande un nom d'utilisateur ainsi qu'un mot de passe quand vous voulez éditer une entrée de GRUB 2.

Modifier la Configuration de GRUB 2 en Ligne de Commande

Lors du démarrage de GRUB 2, trois actions sont possibles à partir du menu :

  • Lancer un système d'exploitation en le sélectionnant avec les flèches puis en appuyant sur la touche ↵ Entrée,
  • Lancer l'éditeur en appuyant sur la touche e,
  • Lancer l’interface de la ligne de commande GRUB en appuyant sur la touche c.

En mode édition notez l'utilisation des touches suivantes :

  • flèches : se déplacer dans l'écran. L'édition se fait en utilisant simplement les touches du clavier,
  • Crtl-X : démarrer avec la configuration modifiée,
  • echap : abandonner les modifications et retourner à l'interface menu de GRUB 2.

Systemd

RHEL/CentOS 7, comme beaucoup d'autres distributions, ont abandonné Upstart pour Systemd. Ce dernier prend une approche différente au démarrage de Linux. En effet, SysVinit et Upstart sont des systèmes de démarrage séquentiels. Systemd essaie, par contre, de démarrer autant de services en parallèle que possible. Ceci est rendu possible car la majorité d'architectures matérielles modernes sont multi-cœurs. Si un service dépend d'un autre qui n'est pas encore démarré ce premier est mis en attente dans une mémoire tampon. Qui plus est, les services qui ne sont pas nécessaires au démarrage de la machine, tel cups, ne sont démarrés ultérieurement que si nécessaire. Lors de démarrage, les partitions sont montées en parallèle. Dernièrement, Systemd remplace les scripts de démarrage traditionnels avec des binaires compilés, beaucoup plus rapides que leur prédécesseurs.

Au lieu de parler de scripts de démarrage et de niveaux d'exécution, Systemd utilise la terminologie Unités (Units) et Cibles (Targets). Une Cible est en quelque sorte une grande étape dans le démarrage du système tandis qu'une Unité peut être :

  • un automount - (.automount),
  • une périphérique - Device - (.device),
  • un montage d'un périphérique - Mount - (.mount),
  • un chemin - Path - (.path)
  • un socket - Socket - (.socket),
  • un service - Service - (.service),
  • une instantanée - Snapshot - (.snapshot),
  • une cible - Target - (.target).

Important : Dans le contexte d'une Unité, le type cible regroupe des Unités multiples afin qu'elles puissent être démarrées en même temps. Par exemple network.target regroupe toutes les Unités nécessaires pour démarrer toutes les interfaces réseaux en même temps.

La Commande systemctl

Pour visualiser la liste des Unités, il convient d'utiliser la commande systemctl avec l'option list-units :

[root@centos7 ~]# systemctl list-units
UNIT                                                           LOAD   ACTIVE SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount                              loaded active waiting   Arbitrary Executable File Formats File System Automount Point
sys-devices-pci0000:...t1-target1:0:0-1:0:0:0-block-sr0.device loaded active plugged   VBOX_CD-ROM
sys-devices-pci0000:00-0000:00:03.0-net-enp0s3.device          loaded active plugged   PRO/1000 MT Desktop Adapter
sys-devices-pci0000:00-0000:00:05.0-sound-card0.device         loaded active plugged   82801AA AC'97 Audio Controller
sys-devices-pci0000:...rget2:0:0-2:0:0:0-block-sda-sda1.device loaded active plugged   VBOX_HARDDISK
sys-devices-pci0000:...rget2:0:0-2:0:0:0-block-sda-sda2.device loaded active plugged   VBOX_HARDDISK
sys-devices-pci0000:...rget2:0:0-2:0:0:0-block-sda-sda3.device loaded active plugged   VBOX_HARDDISK
sys-devices-pci0000:...t2-target2:0:0-2:0:0:0-block-sda.device loaded active plugged   VBOX_HARDDISK
sys-devices-platform-serial8250-tty-ttyS0.device               loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS0
sys-devices-platform-serial8250-tty-ttyS1.device               loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-platform-serial8250-tty-ttyS2.device               loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-platform-serial8250-tty-ttyS3.device               loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS3
sys-module-configfs.device                                     loaded active plugged   /sys/module/configfs
sys-module-fuse.device                                         loaded active plugged   /sys/module/fuse
sys-subsystem-net-devices-enp0s3.device                        loaded active plugged   PRO/1000 MT Desktop Adapter
-.mount                                                        loaded active mounted   /
boot.mount                                                     loaded active mounted   /boot
dev-hugepages.mount                                            loaded active mounted   Huge Pages File System
dev-mqueue.mount                                               loaded active mounted   POSIX Message Queue File System
proc-fs-nfsd.mount                                             loaded active mounted   NFSD configuration filesystem
run-media-trainee-VBOXADDITIONS_4.3.28_100309.mount            loaded active mounted   /run/media/trainee/VBOXADDITIONS_4.3.28_100309
run-user-1000-gvfs.mount                                       loaded active mounted   /run/user/1000/gvfs
sys-fs-fuse-connections.mount                                  loaded active mounted   FUSE Control File System
sys-kernel-config.mount                                        loaded active mounted   Configuration File System
sys-kernel-debug.mount                                         loaded active mounted   Debug File System
var-lib-nfs-rpc_pipefs.mount                                   loaded active mounted   RPC Pipe File System
brandbot.path                                                  loaded active waiting   Flexible branding
cups.path                                                      loaded active waiting   CUPS Printer Service Spool
systemd-ask-password-plymouth.path                             loaded active waiting   Forward Password Requests to Plymouth Directory Watch
systemd-ask-password-wall.path                                 loaded active waiting   Forward Password Requests to Wall Directory Watch
session-1.scope                                                loaded active running   Session 1 of user trainee
abrt-ccpp.service                                              loaded active exited    Install ABRT coredump hook
abrt-oops.service                                              loaded active running   ABRT kernel log watcher
abrt-xorg.service                                              loaded active running   ABRT Xorg log watcher
abrtd.service                                                  loaded active running   ABRT Automated Bug Reporting Tool
accounts-daemon.service                                        loaded active running   Accounts Service
alsa-state.service                                             loaded active running   Manage Sound Card State (restore and store)
atd.service                                                    loaded active running   Job spooling tools
auditd.service                                                 loaded active running   Security Auditing Service
avahi-daemon.service                                           loaded active running   Avahi mDNS/DNS-SD Stack
bluetooth.service                                              loaded active running   Bluetooth service
chronyd.service                                                loaded active running   NTP client/server
colord.service                                                 loaded active running   Manage, Install and Generate Color Profiles
crond.service                                                  loaded active running   Command Scheduler
cups.service                                                   loaded active running   CUPS Printing Service
dbus.service                                                   loaded active running   D-Bus System Message Bus
firewalld.service                                              loaded active running   firewalld - dynamic firewall daemon
gdm.service                                                    loaded active running   GNOME Display Manager
gssproxy.service                                               loaded active running   GSSAPI Proxy Daemon
iscsi-shutdown.service                                         loaded active exited    Logout off all iSCSI sessions on shutdown
kdump.service                                                  loaded failed failed    Crash recovery kernel arming
kmod-static-nodes.service                                      loaded active exited    Create list of required static device nodes for the current ker
ksm.service                                                    loaded active exited    Kernel Samepage Merging
ksmtuned.service                                               loaded active running   Kernel Samepage Merging (KSM) Tuning Daemon
libstoragemgmt.service                                         loaded active running   libstoragemgmt plug-in server daemon
libvirtd.service                                               loaded active running   Virtualization daemon
lvm2-lvmetad.service                                           loaded active running   LVM2 metadata daemon

Pour consulter la liste des Unités inactifs, utilisez la commande suivante :

[root@centos7 ~]# systemctl list-units --all | grep inactive | more
proc-sys-fs-binfmt_misc.mount                                                             loaded inactive dead      Arbitrary Executable File Formats 
File System
systemd-ask-password-console.path                                                         loaded inactive dead      Dispatch Password Requests to Cons
ole Directory Watch
abrt-vmcore.service                                                                       loaded inactive dead      Harvest vmcores for ABRT
alsa-restore.service                                                                      loaded inactive dead      Restore Sound Card State
alsa-store.service                                                                        loaded inactive dead      Store Sound Card State
apparmor.service                                                                          not-found inactive dead      apparmor.service
auth-rpcgss-module.service                                                                loaded inactive dead      Kernel Module supporting RPCSEC_GS
S
brandbot.service                                                                          loaded inactive dead      Flexible Branding Service
cpupower.service                                                                          loaded inactive dead      Configure CPU power related settin
gs
dm-event.service                                                                          loaded inactive dead      Device-mapper event daemon
dmraid-activation.service                                                                 loaded inactive dead      Activation of DM RAID sets
dracut-shutdown.service                                                                   loaded inactive dead      Restore /run/initramfs
ebtables.service                                                                          loaded inactive dead      Ethernet Bridge Filtering tables
emergency.service                                                                         loaded inactive dead      Emergency Shell
exim.service                                                                              not-found inactive dead      exim.service
getty@tty1.service                                                                        loaded inactive dead      Getty on tty1
hypervkvpd.service                                                                        loaded inactive dead      Hyper-V KVP daemon
hypervvssd.service                                                                        loaded inactive dead      Hyper-V VSS daemon
ip6tables.service                                                                         loaded inactive dead      IPv6 firewall with ip6tables
iptables.service                                                                          loaded inactive dead      IPv4 firewall with iptables
irqbalance.service                                                                        loaded inactive dead      irqbalance daemon
iscsi.service                                                                             loaded inactive dead      Login and scanning of iSCSI device
s
iscsid.service                                                                            loaded inactive dead      Open-iSCSI
iscsiuio.service                                                                          loaded inactive dead      iSCSI UserSpace I/O driver
--More--

Pour consulter la liste des fichiers Unités, utilisez la commande suivante :

[root@centos7 ~]# systemctl list-unit-files | more
UNIT FILE                                   STATE   
proc-sys-fs-binfmt_misc.automount           static  
dev-hugepages.mount                         static  
dev-mqueue.mount                            static  
proc-fs-nfsd.mount                          static  
proc-sys-fs-binfmt_misc.mount               static  
sys-fs-fuse-connections.mount               static  
sys-kernel-config.mount                     static  
sys-kernel-debug.mount                      static  
tmp.mount                                   disabled
var-lib-nfs-rpc_pipefs.mount                static  
brandbot.path                               disabled
cups.path                                   enabled 
systemd-ask-password-console.path           static  
systemd-ask-password-plymouth.path          static  
systemd-ask-password-wall.path              static  
session-1.scope                             static  
session-8.scope                             static  
abrt-ccpp.service                           enabled 
abrt-oops.service                           enabled 
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled 
abrt-xorg.service                           enabled 
abrtd.service                               enabled 
accounts-daemon.service                     enabled 
alsa-restore.service                        static  
alsa-state.service                          static  
alsa-store.service                          static  
anaconda-direct.service                     static  
--More--
Options de la Commande systemctl

Les options de la commande systemctl sont :

[root@centos7 ~]# systemctl --help
systemctl [OPTIONS...] {COMMAND} ...

Query or send control commands to the systemd manager.

  -h --help           Show this help
     --version        Show package version
  -t --type=TYPE      List only units of a particular type
     --state=STATE    List only units with particular LOAD or SUB or ACTIVE state
  -p --property=NAME  Show only properties by this name
  -a --all            Show all loaded units/properties, including dead/empty
                      ones. To list all units installed on the system, use
                      the 'list-unit-files' command instead.
     --reverse        Show reverse dependencies with 'list-dependencies'
  -l --full           Don't ellipsize unit names on output
     --fail           When queueing a new job, fail if conflicting jobs are
                      pending
     --irreversible   When queueing a new job, make sure it cannot be implicitly
                      cancelled
     --ignore-dependencies
                      When queueing a new job, ignore all its dependencies
     --show-types     When showing sockets, explicitly show their type
  -i --ignore-inhibitors
                      When shutting down or sleeping, ignore inhibitors
     --kill-who=WHO   Who to send signal to
  -s --signal=SIGNAL  Which signal to send
  -H --host=[USER@]HOST
                      Show information for remote host
  -P --privileged     Acquire privileges before execution
  -q --quiet          Suppress output
     --no-block       Do not wait until operation finished
     --no-wall        Don't send wall message before halt/power-off/reboot
     --no-reload      When enabling/disabling unit files, don't reload daemon
                      configuration
     --no-legend      Do not print a legend (column headers and hints)
     --no-pager       Do not pipe output into a pager
     --no-ask-password
                      Do not ask for system passwords
     --system         Connect to system manager
     --user           Connect to user service manager
     --global         Enable/disable unit files globally
     --runtime        Enable unit files only temporarily until next reboot
  -f --force          When enabling unit files, override existing symlinks
                      When shutting down, execute action immediately
     --root=PATH      Enable unit files in the specified root directory
  -n --lines=INTEGER  Number of journal entries to show
  -o --output=STRING  Change journal output mode (short, short-monotonic,
                      verbose, export, json, json-pretty, json-sse, cat)
     --plain          Print unit dependencies as a list instead of a tree

Unit Commands:
  list-units                      List loaded units
  list-sockets                    List loaded sockets ordered by address
  start [NAME...]                 Start (activate) one or more units
  stop [NAME...]                  Stop (deactivate) one or more units
  reload [NAME...]                Reload one or more units
  restart [NAME...]               Start or restart one or more units
  try-restart [NAME...]           Restart one or more units if active
  reload-or-restart [NAME...]     Reload one or more units if possible,
                                  otherwise start or restart
  reload-or-try-restart [NAME...] Reload one or more units if possible,
                                  otherwise restart if active
  isolate [NAME]                  Start one unit and stop all others
  kill [NAME...]                  Send signal to processes of a unit
  is-active [NAME...]             Check whether units are active
  is-failed [NAME...]             Check whether units are failed
  status [NAME...|PID...]         Show runtime status of one or more units
  show [NAME...|JOB...]           Show properties of one or more
                                  units/jobs or the manager
  set-property [NAME] [ASSIGNMENT...]
                                  Sets one or more properties of a unit
  help [NAME...|PID...]           Show manual for one or more units
  reset-failed [NAME...]          Reset failed state for all, one, or more
                                  units
  list-dependencies [NAME]        Recursively show units which are required
                                  or wanted by this unit or by which this
                                  unit is required or wanted

Unit File Commands:
  list-unit-files                 List installed unit files
  enable [NAME...]                Enable one or more unit files
  disable [NAME...]               Disable one or more unit files
  reenable [NAME...]              Reenable one or more unit files
  preset [NAME...]                Enable/disable one or more unit files
                                  based on preset configuration
  is-enabled [NAME...]            Check whether unit files are enabled

  mask [NAME...]                  Mask one or more units
  unmask [NAME...]                Unmask one or more units
  link [PATH...]                  Link one or more units files into
                                  the search path
  get-default                     Get the name of the default target
  set-default NAME                Set the default target

Job Commands:
  list-jobs                       List jobs
  cancel [JOB...]                 Cancel all, one, or more jobs

Snapshot Commands:
  snapshot [NAME]                 Create a snapshot
  delete [NAME...]                Remove one or more snapshots

Environment Commands:
  show-environment                Dump environment
  set-environment [NAME=VALUE...] Set one or more environment variables
  unset-environment [NAME...]     Unset one or more environment variables

Manager Lifecycle Commands:
  daemon-reload                   Reload systemd manager configuration
  daemon-reexec                   Reexecute systemd manager

System Commands:
  default                         Enter system default mode
  rescue                          Enter system rescue mode
  emergency                       Enter system emergency mode
  halt                            Shut down and halt the system
  poweroff                        Shut down and power-off the system
  reboot                          Shut down and reboot the system
  kexec                           Shut down and reboot the system with kexec
  exit                            Request user instance exit
  switch-root [ROOT] [INIT]       Change to a different root file system
  suspend                         Suspend the system
  hibernate                       Hibernate the system
  hybrid-sleep                    Hibernate and suspend the system
lines 95-123/123 (END)

Fichiers de Configuration

Les Cibles et les Unités sont configurées par des fichiers se trouvant dans le répertoire /etc/systemd/system :

[root@centos7 ~]# ls -l /etc/systemd/system
total 12
drwxr-xr-x. 2 root root   54 Mar  8 13:57 basic.target.wants
drwxr-xr-x. 2 root root   30 Mar  8 13:53 bluetooth.target.wants
lrwxrwxrwx. 1 root root   41 Mar  8 13:53 dbus-org.bluez.service -> /usr/lib/systemd/system/bluetooth.service
lrwxrwxrwx. 1 root root   41 Mar  8 13:48 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service
lrwxrwxrwx. 1 root root   44 Mar  8 13:48 dbus-org.freedesktop.Avahi.service -> /usr/lib/systemd/system/avahi-daemon.service
lrwxrwxrwx. 1 root root   44 Mar  8 13:57 dbus-org.freedesktop.ModemManager1.service -> /usr/lib/systemd/system/ModemManager.service
lrwxrwxrwx. 1 root root   46 Mar  8 13:49 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root   57 Mar  8 13:49 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx. 1 root root   36 Mar  8 14:05 default.target -> /lib/systemd/system/graphical.target
drwxr-xr-x. 2 root root   85 Mar  8 13:47 default.target.wants
lrwxrwxrwx. 1 root root   35 Mar  8 13:54 display-manager.service -> /usr/lib/systemd/system/gdm.service
drwxr-xr-x. 2 root root   31 Mar  8 13:47 getty.target.wants
drwxr-xr-x. 2 root root   63 Jun  4 14:59 graphical.target.wants
drwxr-xr-x. 2 root root 4096 Jun  4 10:00 multi-user.target.wants
drwxr-xr-x. 2 root root   29 Mar  8 13:48 nfs.target.wants
drwxr-xr-x. 2 root root   25 Mar  8 13:50 printer.target.wants
drwxr-xr-x. 2 root root   30 Jun  4 10:00 remote-fs.target.wants
drwxr-xr-x. 2 root root 4096 Mar  8 13:50 sockets.target.wants
drwxr-xr-x. 2 root root   35 Mar  8 13:57 spice-vdagentd.target.wants
drwxr-xr-x. 2 root root 4096 Mar  8 13:49 sysinit.target.wants
drwxr-xr-x. 2 root root   83 Mar  8 13:49 system-update.target.wants

ainsi que par des fichiers se trouvant dans le répertoire /lib/systemd/system et /usr/lib/systemd/system :

[root@centos7 ~]# ls -l /lib/systemd/system | more
total 1208
-rw-r--r--. 1 root root  275 Mar 24 04:56 abrt-ccpp.service
-rw-r--r--. 1 root root  380 Mar 24 04:56 abrtd.service
-rw-r--r--. 1 root root  361 Mar 24 04:56 abrt-oops.service
-rw-r--r--. 1 root root  266 Mar 24 04:56 abrt-pstoreoops.service
-rw-r--r--. 1 root root  262 Mar 24 04:56 abrt-vmcore.service
-rw-r--r--. 1 root root  311 Mar 24 04:56 abrt-xorg.service
-rw-r--r--. 1 root root  421 Jun 10  2014 accounts-daemon.service
-rw-r--r--. 1 root root  501 Mar  5 20:37 alsa-restore.service
-rw-r--r--. 1 root root  558 Mar  5 20:37 alsa-state.service
-rw-r--r--. 1 root root  412 Mar  5 20:37 alsa-store.service
-rw-r--r--. 1 root root  645 Mar 26 11:43 anaconda-direct.service
-rw-r--r--. 1 root root  185 Mar 26 11:43 anaconda-nm-config.service
-rw-r--r--. 1 root root  660 Mar 26 11:43 anaconda-noshell.service
-rw-r--r--. 1 root root  387 Mar 26 11:43 anaconda.service
-rw-r--r--. 1 root root  684 Mar 26 11:43 anaconda-shell@.service
-rw-r--r--. 1 root root  322 Mar 26 11:43 anaconda-sshd.service
-rw-r--r--. 1 root root  312 Mar 26 11:43 anaconda.target
drwxr-xr-x. 2 root root 4096 Jun  4 15:33 anaconda.target.wants
-rw-r--r--. 1 root root  498 Mar 26 11:43 anaconda-tmux@.service
-rw-r--r--. 1 root root  275 Jun 10  2014 arp-ethers.service
-rw-r--r--. 1 root root  205 Oct  7  2014 atd.service
-rw-r-----. 1 root root  669 Mar  5 22:59 auditd.service
-rw-r--r--. 1 root root  663 Mar  6 05:17 auth-rpcgss-module.service
lrwxrwxrwx. 1 root root   14 Jun  4 09:52 autovt@.service -> getty@.service
-rw-r--r--. 1 root root 1044 Mar  5 23:03 avahi-daemon.service
-rw-r--r--. 1 root root  874 Mar  5 23:03 avahi-daemon.socket
-rw-r--r--. 1 root root  546 May 12 21:44 basic.target
drwxr-xr-x. 2 root root 4096 Jun  4 10:07 basic.target.wants
--More--
[root@centos7 ~]# ls -l /usr/lib/systemd/system | more
total 1208
-rw-r--r--. 1 root root  275 Mar 24 04:56 abrt-ccpp.service
-rw-r--r--. 1 root root  380 Mar 24 04:56 abrtd.service
-rw-r--r--. 1 root root  361 Mar 24 04:56 abrt-oops.service
-rw-r--r--. 1 root root  266 Mar 24 04:56 abrt-pstoreoops.service
-rw-r--r--. 1 root root  262 Mar 24 04:56 abrt-vmcore.service
-rw-r--r--. 1 root root  311 Mar 24 04:56 abrt-xorg.service
-rw-r--r--. 1 root root  421 Jun 10  2014 accounts-daemon.service
-rw-r--r--. 1 root root  501 Mar  5 20:37 alsa-restore.service
-rw-r--r--. 1 root root  558 Mar  5 20:37 alsa-state.service
-rw-r--r--. 1 root root  412 Mar  5 20:37 alsa-store.service
-rw-r--r--. 1 root root  645 Mar 26 11:43 anaconda-direct.service
-rw-r--r--. 1 root root  185 Mar 26 11:43 anaconda-nm-config.service
-rw-r--r--. 1 root root  660 Mar 26 11:43 anaconda-noshell.service
-rw-r--r--. 1 root root  387 Mar 26 11:43 anaconda.service
-rw-r--r--. 1 root root  684 Mar 26 11:43 anaconda-shell@.service
-rw-r--r--. 1 root root  322 Mar 26 11:43 anaconda-sshd.service
-rw-r--r--. 1 root root  312 Mar 26 11:43 anaconda.target
drwxr-xr-x. 2 root root 4096 Jun  4 15:33 anaconda.target.wants
-rw-r--r--. 1 root root  498 Mar 26 11:43 anaconda-tmux@.service
-rw-r--r--. 1 root root  275 Jun 10  2014 arp-ethers.service
-rw-r--r--. 1 root root  205 Oct  7  2014 atd.service
-rw-r-----. 1 root root  669 Mar  5 22:59 auditd.service
-rw-r--r--. 1 root root  663 Mar  6 05:17 auth-rpcgss-module.service
lrwxrwxrwx. 1 root root   14 Jun  4 09:52 autovt@.service -> getty@.service
-rw-r--r--. 1 root root 1044 Mar  5 23:03 avahi-daemon.service
-rw-r--r--. 1 root root  874 Mar  5 23:03 avahi-daemon.socket
-rw-r--r--. 1 root root  546 May 12 21:44 basic.target
drwxr-xr-x. 2 root root 4096 Jun  4 10:07 basic.target.wants
--More--

Par exemple, sous RHEL/CentOS 7, le service sshd est configuré par le fichier /usr/lib/systemd/system/sshd.service :

[root@centos7 ~]# cat /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

Dans le fichier on peut noter la présence des lignes suivantes :

  • ExecStart=/usr/sbin/sshd -D $OPTIONS,
    • Cette ligne définit l'exécutable à lancer,
  • After=network.target sshd-keygen.service,
    • Cette ligne indique les services qui devraient être démarrés avant le démarrage de sshd,
  • WantedBy=multi-user.target,
    • Cette ligne indique la Cible dans laquelle le service doit être démarré,
  • Restart=on-failure,
    • Cette ligne indique quand le service doit être re-démarré.

Système de Démarrage

Systemd utilise des Cibles d'une manière similaire à ce que SysVinit utilise des niveaux d'exécution. Pour rendre la transition plus facile, il existe des Cibles qui simulent les niveaux d'exécution de SysVinit :

  • runlevel0.target,
  • runlevel1.target,
  • runlevel2.target,
  • runlevel3.target,
  • runlevel4.target,
  • runlevel5.target,
  • runlevel6.target.

Ceci étant dans RHEL/CentOS 7 il y principalement deux Cibles finales :

  • multi-user.target qui est l'équivalent du niveau d'exécution 3,
  • graphical.target qui est l'équivalent du niveau d'exécution 5.

Chaque Cible est décrite par un fichier de configuration :

[root@centos7 ~]# cat /usr/lib/systemd/system/graphical.target
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
AllowIsolate=yes

[Install]
Alias=default.target

Dans ce fichier on peut noter la présence des lignes suivantes :

  • Requires=multi-user.target,
    • Cette ligne indique que le graphical.target ne peut pas être atteint si le multi-user.target n'a pas été atteint aupréalable,
  • After=multi-user.target,
    • Cette ligne indique le multi-user.target doit d'abord être lancé,
  • Conflicts=rescue.target,
    • Cette ligne indique la Cible en conflit avec le graphical.target,
  • Wants=display-manager.service,
    • Cette ligne indique quel service doit être démarré.

Dernièrement, sous RHEL/CentOS 7, la Cible par défaut peut être modifiée en éditant le lien symbolique /etc/systemd/system/default.target :

[root@centos7 ~]# ls -l /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 Mar  8 14:05 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

La Commande systemd-analyze

Pour avoir une évaluation du temps de démarrage, il convient d'utiliser la commande suivante :

[root@centos7 ~]# systemd-analyze
Startup finished in 769ms (kernel) + 4.643s (initrd) + 40.147s (userspace) = 45.560s

L'option blame de la commande systemd-analyze permet de voir le temps de démarrage de chaque Unité afin de pourvoir se concentrer sur les plus lentes :

[root@centos7 ~]# systemd-analyze blame
         12.274s firewalld.service
         10.302s tuned.service
          9.676s accounts-daemon.service
          8.875s gssproxy.service
          8.860s ModemManager.service
          8.598s vboxadd-x11.service
          7.829s kdump.service
          7.089s vboxadd.service
          6.398s plymouth-quit-wait.service
          5.593s NetworkManager-wait-online.service
          5.379s avahi-daemon.service
          5.104s abrt-ccpp.service
          5.065s postfix.service
          4.684s systemd-logind.service
          4.385s sysstat.service
          4.306s rtkit-daemon.service
          3.927s systemd-udev-settle.service
          3.396s ksmtuned.service
          3.084s rhel-dmesg.service
          2.811s libvirtd.service
          2.428s chronyd.service
          2.401s vboxadd-service.service
          2.349s nfs-config.service
          2.266s var-lib-nfs-rpc_pipefs.mount
          2.229s rhel-loadmodules.service
          2.104s rsyslog.service
          1.357s network.service
          1.283s lvm2-monitor.service
          1.246s rpcbind.service
          1.069s systemd-fsck-root.service
          1.007s colord.service
           944ms systemd-tmpfiles-setup-dev.service
           872ms systemd-tmpfiles-clean.service
           791ms rhel-readonly.service
           780ms NetworkManager.service
           743ms dmraid-activation.service
           723ms gdm.service
           720ms ksm.service
           718ms polkit.service
           716ms proc-fs-nfsd.mount
           669ms auditd.service
           660ms boot.mount
           608ms systemd-udev-trigger.service
           601ms kmod-static-nodes.service
           565ms netcf-transaction.service
           520ms systemd-vconsole-setup.service
           497ms systemd-sysctl.service
           487ms sys-kernel-debug.mount
           302ms dev-disk-by\x2duuid-11a4d11d\x2d81e4\x2d46a7\x2d82e0\x2d7796cd597dc9.swap
           297ms systemd-tmpfiles-setup.service
           283ms dev-mqueue.mount
           282ms dev-hugepages.mount
           261ms rhel-import-state.service
           243ms udisks2.service
           239ms systemd-user-sessions.service
           235ms rpc-statd-notify.service
           217ms systemd-random-seed.service
           173ms plymouth-read-write.service
           161ms systemd-udevd.service
           147ms upower.service
           142ms systemd-fsck@dev-disk-by\x2duuid-e8d3bd48\x2d1386\x2d411c\x2d9675\x2d41c3f8f1a309.service
           110ms plymouth-start.service
            96ms sys-fs-fuse-connections.mount
            82ms bluetooth.service
            73ms iscsi-shutdown.service
            69ms systemd-remount-fs.service
            63ms systemd-hostnamed.service
            53ms systemd-update-utmp.service
            38ms systemd-journal-flush.service
            33ms sys-kernel-config.mount
            31ms systemd-update-utmp-runlevel.service
lines 43-71/71 (END)

L'option critical-chain permet de voir l'enchaînement des événements qui amènent au chargement de l'Unité passée en argument :

[root@centos7 ~]# systemd-analyze critical-chain sshd.service
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

sshd.service @32.037s
└─network.target @31.990s
  └─network.service @30.621s +1.357s
    └─NetworkManager.service @24.242s +780ms
      └─firewalld.service @11.954s +12.274s
        └─basic.target @11.937s
          └─sockets.target @11.937s
            └─dbus.socket @11.936s
              └─sysinit.target @11.784s
                └─systemd-update-utmp.service @11.726s +53ms
                  └─auditd.service @11.051s +669ms
                    └─systemd-tmpfiles-setup.service @10.734s +297ms
                      └─rhel-import-state.service @10.470s +261ms
                        └─local-fs.target @10.464s
                          └─boot.mount @9.798s +660ms
                            └─systemd-fsck@dev-disk-by\x2duuid-e8d3bd48\x2d1386\x2d411c\x2d9675\x2d41c3f8f1a309.service @9.654s +142ms
                              └─dev-disk-by\x2duuid-e8d3bd48\x2d1386\x2d411c\x2d9675\x2d41c3f8f1a309.device @9.650s
Options de la Commande

Les options de la commande systemd-analyze sont :

[root@centos7 ~]# systemd-analyze --help
systemd-analyze [OPTIONS...] {COMMAND} ...

Process systemd profiling information

  -h --help           Show this help
     --version        Show package version
     --system         Connect to system manager
     --user           Connect to user service manager
     --order          When generating a dependency graph, show only order
     --require        When generating a dependency graph, show only requirement
     --from-pattern=GLOB, --to-pattern=GLOB
                      When generating a dependency graph, filter only origins
                      or destinations, respectively
     --fuzz=TIMESPAN  When printing the tree of the critical chain, print also
                      services, which finished TIMESPAN earlier, than the
                      latest in the branch. The unit of TIMESPAN is seconds
                      unless specified with a different unit, i.e. 50ms
     --no-pager       Do not pipe output into a pager

Commands:
  time                Print time spent in the kernel before reaching userspace
  blame               Print list of running units ordered by time to init
  critical-chain      Print a tree of the time critical chain of units
  plot                Output SVG graphic showing service initialization
  dot                 Output dependency graph in dot(1) format
  set-log-level LEVEL Set logging threshold for systemd
  dump                Output state serialization of service manager

Gestion des Services

Consulter le statut d'un service

Pour obtenir le détail sur un service donné, il convient d'utiliser la commande systemctl :

[root@centos7 ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Thu 2015-06-11 11:01:52 CEST; 2h 45min ago
 Main PID: 1212 (sshd)
   CGroup: /system.slice/sshd.service
           └─1212 /usr/sbin/sshd -D

Jun 11 11:01:52 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon.
Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on 0.0.0.0 port 22.
Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on :: port 22.

Arrêter un service

Pour arrêter une Unité de service, utilisez la commande suivante :

[root@centos7 ~]# systemctl stop sshd.service
[root@centos7 ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: inactive (dead) since Thu 2015-06-11 13:58:59 CEST; 16s ago
  Process: 1212 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 1212 (code=exited, status=0/SUCCESS)

Jun 11 11:01:52 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon.
Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on 0.0.0.0 port 22.
Jun 11 11:01:53 centos7.fenestros.loc sshd[1212]: Server listening on :: port 22.
Jun 11 13:58:59 centos7.fenestros.loc systemd[1]: Stopping OpenSSH server daemon...
Jun 11 13:58:59 centos7.fenestros.loc sshd[1212]: Received signal 15; terminating.
Jun 11 13:58:59 centos7.fenestros.loc systemd[1]: Stopped OpenSSH server daemon.

Démarrer un service

Pour démarrer un service, utilisez la commande suivante :

[root@centos7 ~]# systemctl start ssh.service
[root@centos7 ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Thu 2015-06-11 14:00:17 CEST; 6s ago
 Main PID: 6624 (sshd)
   CGroup: /system.slice/sshd.service
           └─6624 /usr/sbin/sshd -D

Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Starting OpenSSH server daemon...
Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon.
Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on 0.0.0.0 port 22.
Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on :: port 22.

Désactiver un service

Pour désactiver un service au prochain démarrage du système, utilisez l'option disable :

[root@centos7 ~]# systemctl disable sshd.service
rm '/etc/systemd/system/multi-user.target.wants/sshd.service'
[root@centos7 ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled)
   Active: active (running) since Thu 2015-06-11 14:00:17 CEST; 1min 59s ago
 Main PID: 6624 (sshd)
   CGroup: /system.slice/sshd.service
           └─6624 /usr/sbin/sshd -D

Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Starting OpenSSH server daemon...
Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon.
Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on 0.0.0.0 port 22.
Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on :: port 22.

Activer un service

Pour activer un service au prochain démarrage du système, utilisez l'option enable :

[root@centos7 ~]# systemctl enable sshd.service
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'
[root@centos7 ~]# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Thu 2015-06-11 14:00:17 CEST; 3min 27s ago
 Main PID: 6624 (sshd)
   CGroup: /system.slice/sshd.service
           └─6624 /usr/sbin/sshd -D

Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Starting OpenSSH server daemon...
Jun 11 14:00:17 centos7.fenestros.loc systemd[1]: Started OpenSSH server daemon.
Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on 0.0.0.0 port 22.
Jun 11 14:00:17 centos7.fenestros.loc sshd[6624]: Server listening on :: port 22.

Gestion des Ressources

Groupes de Contrôle

Les Groupes de Contrôles (Control Groups) aussi appelés CGroups, sont une nouvelle façon sous RHEL/CentOS 7 de contrôler et de limiter des ressources. Les groupes de contrôle permettent l'allocation de ressources, même d'une manière dynamique pendant que le système fonctionne, telles le temps processeur, la mémoire système, la bande réseau, ou une combinaison de ces ressources parmi des groupes de tâches (processus) définis par l'utilisateur et exécutés sur un système.

Les groupes de contrôle sont organisés de manière hiérarchique, comme des processus. Par contre, la comparaison entre les deux démontre que tandis que les processus se trouvent dans une arborescence unique descandant tous du processus init et héritant de l'environnement de leurs parents, les contrôles groupes peuvent être multiples donnant lieu à des arborescences ou hiérarchies multiples qui héritent de certains attributs de leurs groupes de contrôle parents.

Ces hiérarchies multiples et séparés sont necéssaires parce que chaque hiérarchie est attaché à un ou plusieurs sous-système(s) aussi appelés des Contrôleurs de Ressources ou simplement des Contrôleurs. Les contrôleurs disponibles sous RHEl/CentOS 7 sont :

  • blkio - utilisé pour établir des limites sur l'accès des entrées/sorties à partir et depuis des périphériques blocs,
  • cpu - utilisé pour fournir aux tâches des groupes de contrôle accès au CPU grâce au planificateur,
  • cpuacct - utilisé pour produire des rapports automatiques sur les ressources CPU utilisées par les tâches dans un groupe de contrôle,
  • cpuset - utilisé pour assigner des CPU individuels sur un système multicoeur et des noeuds de mémoire à des tâches dans un groupe de contrôle,
  • devices - utilisé pour autoriser ou pour refuser l'accès des tâches aux périphériques dans un groupe de contrôle,
  • freezer - utilisé pour suspendre ou pour réactiver les tâches dans un groupe de contrôle,
  • memory - utilisé pour établir les limites d'utilisation de la mémoire par les tâches d'un groupe de contrôle et pour génèrer des rapports automatiques sur les ressources rmémoire utilisées par ces tâches,
  • net_cls - utilisé pour repèrer les paquets réseau avec un identifiant de classe (classid) afin de permettre au contrôleur de trafic Linux, tc, d'identifier les paquets provenant d'une tâche particulière d'un groupe de contrôle.
  • perf_event - utilisé pour permettre le monitoring des CGroups avec l'outil perf,
  • hugetlb - utilisé pour limiter des ressources sur des pages de mémoire virtuelle de grande taille.

Pour visualiser les hiérarchies, il convient d'utiliser la commande suivante :

[root@centos7 ~]# lssubsys -am
cpuset /sys/fs/cgroup/cpuset
cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
net_cls /sys/fs/cgroup/net_cls
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event
hugetlb /sys/fs/cgroup/hugetlb

Sous RHEL/CentOS 7, Systemd organise les processus dans chaque CGroup. Par exemple tous les processus démarrés par le serveur Apache se trouveront dans le même CGroup, y compris les scripts CGI. Ceci implique que la gestion des ressources en utilisant des hiérarchies est couplé avec l'arborescence des unités de Systemd.

En haut de l'arborescence des unités de Systemd se trouve la tranche root - -.slice, dont dépend :

  • le system.slice - l'emplacement des services système,
  • le user.slice - l'emplacement des sessions des utilisateurs,
  • le machine.slice - l'emplacement des machines virtuelles et conteneurs.

En dessous des tranches peuvent se trouver :

  • des scopes - des processus crées par fork,
  • des services - des processus créés par une Unité.

Les slices peuvent être visualisés avec la commande suivante :

[root@centos7 ~]# systemctl list-units --type=slice
UNIT               LOAD   ACTIVE SUB    DESCRIPTION
-.slice            loaded active active Root Slice
system-getty.slice loaded active active system-getty.slice
system.slice       loaded active active System Slice
user-0.slice       loaded active active user-0.slice
user-1000.slice    loaded active active user-1000.slice
user.slice         loaded active active User and Session Slice

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

6 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

L'arborescence des unités de Systemd est la suivante :

[root@centos7 ~]# systemd-cgls
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1000.slice
│   └─session-2.scope
│     ├─ 5577 sshd: trainee [priv]
│     ├─ 6004 sshd: trainee@pts/0 
│     ├─ 6167 -bash
│     ├─ 6217 su -
│     ├─ 6245 -bash
│     ├─13457 systemd-cgls
│     └─13459 systemd-cgls
└─system.slice
  ├─upower.service
  │ └─3478 /usr/libexec/upowerd
  ├─polkit.service
  │ └─822 /usr/lib/polkit-1/polkitd --no-debug
  ├─wpa_supplicant.service
  │ └─821 /usr/sbin/wpa_supplicant -u -f /var/log/wpa_supplicant.log -c /etc/wpa_supplicant/wpa_supplicant.conf -u -f /var/log/wpa_supplicant.log -P /var/run/wpa_suppli
  ├─crond.service
  │ └─793 /usr/sbin/crond -n
  ├─atd.service
  │ └─789 /usr/sbin/atd -f
  ├─tuned.service
  │ └─762 /usr/bin/python -Es /usr/sbin/tuned -l -P
  ├─simplegateway.service
  │ ├─  760 /bin/sh /opt/JWrapper-Remote Access/JWAppsSharedConfig/SimpleGatewayService/service_launch.sh
  │ ├─ 3202 /opt/JWrapper-Remote Access/JWrapper-Linux64JRE-00028603412-complete/bin/Remote Access -cp /opt/JWrapper-Remote Access/JWrapper-JWrapper-00041369502-complet
  │ ├─ 3384 /opt/JWrapper-Remote Access/JWrapper-Linux64JRE-00028603412-complete/bin/Remote Access Monitoring -cp /opt/JWrapper-Remote Access/JWrapper-JWrapper-00041369
  │ ├─13111 /bin/sh /opt/JWrapper-Remote Access/JWAppsSharedConfig/SimpleGatewayService/service_launch.sh
  │ └─13458 sleep 1
  ├─postfix.service
  │ ├─1810 /usr/libexec/postfix/master -w
  │ ├─1833 pickup -l -t unix -u
  │ └─1834 qmgr -l -t unix -u
  ├─cups.service
  │ └─756 /usr/sbin/cupsd -f
  ├─sshd.service
  │ └─755 /usr/sbin/sshd -D
  ├─docker.service
  │ ├─750 /bin/sh -c /usr/bin/docker-current daemon $OPTIONS            $DOCKER_STORAGE_OPTIONS            $DOCKER_NETWORK_OPTIONS            $ADD_REGISTRY            $
  │ ├─753 /usr/bin/docker-current daemon --selinux-enabled
  │ └─754 /usr/bin/forward-journald -tag docker
  ├─NetworkManager.service
  │ ├─ 678 /usr/sbin/NetworkManager --no-daemon
  │ └─1968 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s3.pid -lf /var/lib/NetworkManager/dhclient-3b386b69-23e8-4940-80e0-e16d346d43
  ├─abrt-xorg.service
  │ └─586 /usr/bin/abrt-watch-log -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD
  ├─abrt-oops.service
  │ └─582 /usr/bin/abrt-watch-log -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detected ernel BUG at list_del corruption list_add corruption do_IR
  ├─abrtd.service
  │ └─581 /usr/sbin/abrtd -d -s
  ├─dbus.service
  │ └─513 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
  ├─chronyd.service
  │ └─525 /usr/sbin/chronyd
  ├─firewalld.service
  │ └─510 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
  ├─avahi-daemon.service
  │ ├─507 avahi-daemon: running [centos7.local
  │ └─530 avahi-daemon: chroot helpe
  ├─ModemManager.service
  │ └─506 /usr/sbin/ModemManager
  ├─smartd.service
  │ └─505 /usr/sbin/smartd -n -q never
  ├─libstoragemgmt.service
  │ └─494 /usr/bin/lsmd -d
  ├─gssproxy.service
  │ └─517 /usr/sbin/gssproxy -D
  ├─systemd-logind.service
  │ └─492 /usr/lib/systemd/systemd-logind
  ├─rsyslog.service
  │ └─488 /usr/sbin/rsyslogd -n
  ├─alsa-state.service
  │ └─487 /usr/sbin/alsactl -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main rdaemon
  ├─auditd.service
  │ ├─463 /sbin/auditd -n
  │ ├─473 /sbin/audispd
  │ └─475 /usr/sbin/sedispatch
  ├─systemd-udevd.service
  │ └─381 /usr/lib/systemd/systemd-udevd
  ├─lvm2-lvmetad.service
  │ └─378 /usr/sbin/lvmetad -f
  ├─systemd-journald.service
  │ └─349 /usr/lib/systemd/systemd-journald
  └─system-getty.slice
    └─getty@tty1.service
      └─798 /sbin/agetty --noclear tty1 linux

En utilisant Systemd, plusieurs ressources peuvent être limitées :

  • CPUShares - par défault 1024,
  • MemoryLimit - limite exprimée en Mo ou en Go. Pas de valeur par défaut,
  • BlockIOWeight - valeur entre 10 et 1000. Pas de valeur par défaut,
  • StartupCPUShares - comme CPUShares mais uniquement appliqué pendant le démarrage,
  • StartupBlockIOWeight - comme BlockIOWeight mais uniquement appliqué pendant le démarrage,
  • CPUQuota - utilisé pour limiter le temps CPU, même quand le système ne fait rien.

Important : Consultez le manuel systemd.resource-control(5) pour voir les paramètres CGroup qui peuvent être passés à systemctl.

LAB #4 - Travailler avec les cgroups sous RHEL/CentOS 7

Créez un service appelé foo :

[root@centos7 ~]# vi /etc/systemd/system/foo.service
[root@centos7 ~]# cat /etc/systemd/system/foo.service
[Unit]
Description=The foo service that does nothing useful
After=remote-fs.target nss-lookup.target

[Service]
ExecStart=/usr/bin/sha1sum /dev/zero 
ExecStop=/bin/kill -WINCH ${MAINPID}

[Install]
WantedBy=multi-user.target

Consultez le statut du service foo :

[root@centos7 ~]# systemctl status foo.service
● foo.service - The foo service that does nothing useful
   Loaded: loaded (/etc/systemd/system/foo.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

Démarrez et actives le service :

[root@centos7 ~]# systemctl start foo.service
[root@centos7 ~]# systemctl enable foo.service
Created symlink from /etc/systemd/system/multi-user.target.wants/foo.service to /etc/systemd/system/foo.service.
[root@centos7 ~]# systemctl status foo.service
● foo.service - The foo service that does nothing useful
   Loaded: loaded (/etc/systemd/system/foo.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2016-06-15 13:13:17 CEST; 24s ago
 Main PID: 22256 (sha1sum)
   CGroup: /system.slice/foo.service
           └─22256 /usr/bin/sha1sum /dev/zero

Jun 15 13:13:17 centos7.fenestros.loc systemd[1]: Started The foo service that does nothing useful.
Jun 15 13:13:17 centos7.fenestros.loc systemd[1]: Starting The foo service that does nothing useful...

Notez que notre service a été placé dans la tranche system.slice :

[root@centos7 ~]# systemctl show -p Slice foo.service
Slice=system.slice

Utilisez ps pour voir le pourcentage du CPU utilisé par ce service :

[root@centos7 ~]# ps -p 22256 -o pid,comm,cputime,%cpu
  PID COMMAND             TIME %CPU
22256 sha1sum         00:00:46 94.8

Fixez maintenant la valeur de CPUShares pour ce service à 250 :

[root@centos7 ~]# systemctl set-property foo.service CPUShares=250

Cette limite est permenante et a été inscrite dans le fichier 50-CPUShares.conf qui se trouve dans le répertoire /etc/systemd/system/foo.service.d :

[root@centos7 ~]# ls /etc/systemd/system/foo.service.d
50-CPUShares.conf
[root@centos7 ~]# cat /etc/systemd/system/foo.service.d/50-CPUShares.conf 
[Service]
CPUShares=250

Important : En utilisant l'option –runtime avec la commande sysetmctl set-property il est possible d'appliquer la limite d'une manière provisoire.

Appliquez cette modification en rechargeant systemd et en re-démarrant le service foo.service :

[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl restart foo.service

Vérifiez maintenant que la limite a été appliquée :

[root@centos7 ~]# cat /sys/fs/cgroup/cpu/system.slice/foo.service/cpu.shares
250
[root@centos7 ~]# systemctl show -p MainPID foo.service
MainPID=27233
[root@centos7 ~]# cat /proc/27233/cgroup | grep foo
4:cpuacct,cpu:/system.slice/foo.service
1:name=systemd:/system.slice/foo.service

Créez maintenant le service bar :

[root@centos7 ~]# vi /etc/systemd/system/bar.service
[root@centos7 ~]# cat /etc/systemd/system/bar.service
[Unit]
Description=The bar service that does nothing useful
After=remote-fs.target nss-lookup.target

[Service]
ExecStart=/usr/bin/md5sum /dev/zero 
ExecStop=/bin/kill -WINCH ${MAINPID}

[Install]
WantedBy=multi-user.target

Fixez maintenant la limite de CPUShares pour ce service à 2000 :

[root@centos7 ~]# systemctl set-property bar.service CPUShares=2000
Failed to set unit properties on bar.service: Unit bar.service is not loaded.
[root@centos7 ~]# systemctl start bar.service
[root@centos7 ~]# systemctl enable bar.service
Created symlink from /etc/systemd/system/multi-user.target.wants/bar.service to /etc/systemd/system/bar.service.
[root@centos7 ~]# systemctl set-property bar.service CPUShares=2000

Appliquez la limite :

[root@centos7 ~]# systemctl daemon-reload
[root@centos7 ~]# systemctl restart bar.service
[root@centos7 ~]# systemctl status bar.service
● bar.service - The bar service that does nothing useful
   Loaded: loaded (/etc/systemd/system/bar.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/bar.service.d
           └─50-CPUShares.conf
   Active: active (running) since Wed 2016-06-15 13:37:54 CEST; 9s ago
 Main PID: 29515 (md5sum)
   CGroup: /system.slice/bar.service
           └─29515 /usr/bin/md5sum /dev/zero

Jun 15 13:37:54 centos7.fenestros.loc systemd[1]: Started The bar service that does nothing useful.
Jun 15 13:37:54 centos7.fenestros.loc systemd[1]: Starting The bar service that does nothing useful...

Re-démarrer les services foo et bar :

[root@centos7 ~]# systemctl restart foo.service
[root@centos7 ~]# systemctl status foo.service
● foo.service - The foo service that does nothing useful
   Loaded: loaded (/etc/systemd/system/foo.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/foo.service.d
           └─50-CPUShares.conf
   Active: active (running) since Wed 2016-06-15 13:50:08 CEST; 11s ago
 Main PID: 652 (sha1sum)
   CGroup: /system.slice/foo.service
           └─652 /usr/bin/sha1sum /dev/zero

Jun 15 13:50:08 centos7.fenestros.loc systemd[1]: Started The foo service that does nothing useful.
Jun 15 13:50:08 centos7.fenestros.loc systemd[1]: Starting The foo service that does nothing useful...
[root@centos7 ~]# systemctl restart bar.service
[root@centos7 ~]# systemctl status bar.service
● bar.service - The bar service that does nothing useful
   Loaded: loaded (/etc/systemd/system/bar.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/bar.service.d
           └─50-CPUShares.conf
   Active: active (running) since Wed 2016-06-15 13:50:38 CEST; 12s ago
 Main PID: 810 (md5sum)
   CGroup: /system.slice/bar.service
           └─810 /usr/bin/md5sum /dev/zero

Jun 15 13:50:38 centos7.fenestros.loc systemd[1]: Started The bar service that does nothing useful.
Jun 15 13:50:38 centos7.fenestros.loc systemd[1]: Starting The bar service that does nothing useful...

Utilisez ps pour voir le pourcentage du CPU utilisé par les deux services :

[root@centos7 ~]# ps -p 652,810 -o pid,comm,cputime,%cpu
  PID COMMAND             TIME %CPU
  652 sha1sum         00:00:08  9.7
  810 md5sum          00:00:45 78.9

Configuration du Réseau

RHEL/CentOS 7 utilise exclusivement Network Manager pour gérer le réseau. Network Manager est composé de deux éléments :

  • un service qui gère les connexions réseaux et rapporte leurs états,
  • des front-ends qui passent par un API de configuration du service.

Important : Notez qu'avec cette version de NetworkManager, IPv6 est activée par défaut.

Le service NetworkManager doit toujours être lancé :

[root@centos7 ~]# systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-08-07 09:18:20 CEST; 1 day 1h ago
 Main PID: 673 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           ├─ 673 /usr/sbin/NetworkManager --no-daemon
           └─2673 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s3.pid -lf /var/lib/NetworkManager/dhclient-45b701c1-0a21-4d76-a795-...

Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>    nameserver '8.8.8.8'
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  (enp0s3): DHCPv4 state changed unknown -> bound
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  (enp0s3): device state change: ip-config -> ip-check (reason 'none') [70 80 0]
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  (enp0s3): device state change: ip-check -> secondaries (reason 'none') [80 90 0]
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  (enp0s3): device state change: secondaries -> activated (reason 'none') [90 100 0]
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  NetworkManager state is now CONNECTED_LOCAL
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  NetworkManager state is now CONNECTED_GLOBAL
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  Policy set 'Wired connection 1' (enp0s3) as default for IPv4 routing and DNS.
Aug 08 11:03:55 centos7.fenestros.loc NetworkManager[673]: <info>  (enp0s3): Activation: successful, device activated.
Aug 08 11:03:55 centos7.fenestros.loc dhclient[2673]: bound to 10.0.2.15 -- renewal in 39589 seconds.

La Commande nmcli

La commande nmcli (Network Manager Command Line Interface) est utilisée pour configurer NetworkManager.

Les options et les sous-commandes peuvent être consultées en utilisant les commandes suivantes :

[root@centos7 ~]# nmcli help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   terse output
  -p[retty]                                  pretty output
  -m[ode] tabular|multiline                  output mode
  -f[ields] <field1,field2,...>|all|common   specify fields to output
  -e[scape] yes|no                           escape columns separators in values
  -n[ocheck]                                 don't check nmcli and NetworkManager versions
  -a[sk]                                     ask for missing parameters
  -w[ait] <seconds>                          set timeout waiting for finishing operations
  -v[ersion]                                 show program version
  -h[elp]                                    print this help

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent

[root@centos7 ~]# nmcli g help
Usage: nmcli general { COMMAND | help }

COMMAND := { status | hostname | permissions | logging }

  status

  hostname [<hostname>]

  permissions

  logging [level <log level>] [domains <log domains>]


[root@centos7 ~]# nmcli g status help
Usage: nmcli general status { help }

Show overall status of NetworkManager.
'status' is the default action, which means 'nmcli gen' calls 'nmcli gen status'

Connections et Profils

NetworkManager inclus la notion de connections ou profils permettant des configurations différentes en fonction de la localisation. Pour voir les connections actuelles, utilisez la commande nmcli c avec la sous-commande show :

[root@centos7 ~]# nmcli c show
NAME                UUID                                  TYPE            DEVICE 
Wired connection 1  45b701c1-0a21-4d76-a795-2f2bcba86955  802-3-ethernet  enp0s3 

Comme on peut constater ici, il n'existe pour le moment, qu'un seul profil.

Créez donc un profil IP fixe rattaché au périphérique enp0s3 :

[root@centos7 ~]# nmcli connection add con-name ip_fixe ifname enp0s3 type ethernet ip4 10.0.2.16/24 gw4 10.0.2.2
Connection 'ip_fixe' (fb3a11d9-4e03-4032-b26e-09d1195d2bcd) successfully added.

Constatez sa présence :

[root@centos7 ~]# nmcli c show
NAME                UUID                                  TYPE            DEVICE 
ip_fixe             fb3a11d9-4e03-4032-b26e-09d1195d2bcd  802-3-ethernet  --     
Wired connection 1  45b701c1-0a21-4d76-a795-2f2bcba86955  802-3-ethernet  enp0s3  

Notez que la sortie n'indique pas que le profil ip_fixe soit associé au periphérique enp0s3 car le profil ip_fixe n'est pas activé :

[root@centos7 ~]# nmcli d show
GENERAL.DEVICE:                         enp0s3
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:03:97:DD
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     Wired connection 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         10.0.2.15/24
IP4.GATEWAY:                            10.0.2.2
IP4.DNS[1]:                             8.8.8.8
IP6.ADDRESS[1]:                         fe80::a00:27ff:fe03:97dd/64
IP6.GATEWAY:                            

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          10 (unmanaged)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.ADDRESS[1]:                         127.0.0.1/8
IP4.GATEWAY:                            
IP6.ADDRESS[1]:                         ::1/128
IP6.GATEWAY:

Pour activer le profil ip_fixe, utilisez la commande suivante :

[root@centos7 ~]# nmcli connection up ip_fixe

Le profil ip_fixe est maintenant activé tandis que le profil enp0s3 a été désactivé :

[root@centos7 ~]# nmcli c show
NAME                UUID                                  TYPE            DEVICE 
ip_fixe             fb3a11d9-4e03-4032-b26e-09d1195d2bcd  802-3-ethernet  enp0s3 
Wired connection 1  45b701c1-0a21-4d76-a795-2f2bcba86955  802-3-ethernet  --     
[root@centos7 ~]# nmcli d show
GENERAL.DEVICE:                         enp0s3
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:03:97:DD
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ip_fixe
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         10.0.2.16/24
IP4.GATEWAY:                            10.0.2.2
IP6.ADDRESS[1]:                         fe80::a00:27ff:fe03:97dd/64
IP6.GATEWAY:                            

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          10 (unmanaged)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.ADDRESS[1]:                         127.0.0.1/8
IP4.GATEWAY:                            
IP6.ADDRESS[1]:                         ::1/128
IP6.GATEWAY: 

Pour consulter les paramètres d'un profil, utilisez la commande suivante :

[root@centos7 ~]# nmcli -p connection show "Wired connection 1"
===============================================================================
                Connection profile details (Wired connection 1)
===============================================================================
connection.id:                          Wired connection 1
connection.uuid:                        45b701c1-0a21-4d76-a795-2f2bcba86955
connection.interface-name:              --
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1470647387
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
-------------------------------------------------------------------------------
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             08:00:27:03:97:DD
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
802-3-ethernet.wake-on-lan:             1 (default)
802-3-ethernet.wake-on-lan-password:    --
-------------------------------------------------------------------------------
ipv4.method:                            auto
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         
ipv4.gateway:                           --
ipv4.routes:                            
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
-------------------------------------------------------------------------------
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.gateway:                           --
ipv6.routes:                            
ipv6.route-metric:                      -1
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
-------------------------------------------------------------------------------
[root@centos7 ~]# nmcli -p connection show ip_fixe
===============================================================================
                     Connection profile details (ip_fixe)
===============================================================================
connection.id:                          ip_fixe
connection.uuid:                        fb3a11d9-4e03-4032-b26e-09d1195d2bcd
connection.interface-name:              enp0s3
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1470647577
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
-------------------------------------------------------------------------------
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
802-3-ethernet.wake-on-lan:             1 (default)
802-3-ethernet.wake-on-lan-password:    --
-------------------------------------------------------------------------------
ipv4.method:                            manual
ipv4.dns:                               
ipv4.dns-search:                        
ipv4.addresses:                         10.0.2.16/24
ipv4.gateway:                           10.0.2.2
ipv4.routes:                            
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
-------------------------------------------------------------------------------
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.gateway:                           --
ipv6.routes:                            
ipv6.route-metric:                      -1
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
-------------------------------------------------------------------------------
===============================================================================
      Activate connection details (fb3a11d9-4e03-4032-b26e-09d1195d2bcd)
===============================================================================
GENERAL.NAME:                           ip_fixe
GENERAL.UUID:                           fb3a11d9-4e03-4032-b26e-09d1195d2bcd
GENERAL.DEVICES:                        enp0s3
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/3
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/1
GENERAL.SPEC-OBJECT:                    /
GENERAL.MASTER-PATH:                    --
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         10.0.2.16/24
IP4.GATEWAY:                            10.0.2.2
-------------------------------------------------------------------------------
IP6.ADDRESS[1]:                         fe80::a00:27ff:fe03:97dd/64
IP6.GATEWAY:                            
-------------------------------------------------------------------------------

Pour consulter la liste profils associés à un périphérique, utilisez la commande suivante :

[root@centos7 ~]# nmcli -f CONNECTIONS device show enp0s3
CONNECTIONS.AVAILABLE-CONNECTION-PATHS: /org/freedesktop/NetworkManager/Settings/{0,1}
CONNECTIONS.AVAILABLE-CONNECTIONS[1]:   45b701c1-0a21-4d76-a795-2f2bcba86955 | Wired connection 1
CONNECTIONS.AVAILABLE-CONNECTIONS[2]:   fb3a11d9-4e03-4032-b26e-09d1195d2bcd | ip_fixe

Les fichiers de configuration pour le periphérique enp0s3 se trouvent dans le répertoire /etc/sysconfig/network-scripts/ :

[root@centos7 ~]# ls -l /etc/sysconfig/network-scripts/ | grep ifcfg
-rw-r--r--. 1 root root   296 Aug  8 11:08 ifcfg-ip_fixe
-rw-r--r--. 1 root root   254 Sep 16  2015 ifcfg-lo

L'étude du fichier /etc/sysconfig/network-scripts/ifcfg-ip_fixe démontre l'abscence de directives concernant les DNS :

[root@centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ip_fixe
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.0.2.16
PREFIX=24
GATEWAY=10.0.2.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=ip_fixe
UUID=fb3a11d9-4e03-4032-b26e-09d1195d2bcd
DEVICE=enp0s3
ONBOOT=yes

La résolution des noms est donc inactive :

[root@centos7 ~]# ping www.free.fr
ping: unknown host www.free.fr

Modifiez donc la configuration du profil ip_fixe :

[root@centos7 ~]# nmcli connection mod ip_fixe ipv4.dns 8.8.8.8

L'étude du fichier /etc/sysconfig/network-scripts/ifcfg-ip_fixe démontre que la directive concernant le serveur DNS a été ajoutée :

[root@centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ip_fixe
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ip_fixe
UUID=fb3a11d9-4e03-4032-b26e-09d1195d2bcd
DEVICE=enp0s3
ONBOOT=yes
IPADDR=10.0.2.16
PREFIX=24
GATEWAY=10.0.2.2
DNS1=8.8.8.8
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

Afin que la modification du serveur DNS soit prise en compte, re-démarrez le service NetworkManager :

[root@centos7 ~]# systemctl restart NetworkManager.service
[root@centos7 ~]# systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2016-08-08 11:16:53 CEST; 7s ago
 Main PID: 8394 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           └─8394 /usr/sbin/NetworkManager --no-daemon

Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  (enp0s3): device state change: prepare -> config (reason 'none') [40 50 0]
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  (enp0s3): device state change: config -> ip-config (reason 'none') [50 70 0]
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  (enp0s3): device state change: ip-config -> ip-check (reason 'none') [70 80 0]
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  (enp0s3): device state change: ip-check -> secondaries (reason 'none') [80 90 0]
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  (enp0s3): device state change: secondaries -> activated (reason 'none') [90 100 0]
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  NetworkManager state is now CONNECTED_LOCAL
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  NetworkManager state is now CONNECTED_GLOBAL
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  Policy set 'ip_fixe' (enp0s3) as default for IPv4 routing and DNS.
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  (enp0s3): Activation: successful, device activated.
Aug 08 11:16:53 centos7.fenestros.loc NetworkManager[8394]: <info>  wpa_supplicant running

Vérifiez que le fichier /etc/resolv.conf ait été modifié par NetworkManager :

[root@centos7 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search fenestros.loc
nameserver 8.8.8.8

Dernièrement vérifiez la resolution des noms :

[root@centos7 ~]# ping www.free.fr
PING www.free.fr (212.27.48.10) 56(84) bytes of data.
64 bytes from www.free.fr (212.27.48.10): icmp_seq=1 ttl=63 time=10.4 ms
64 bytes from www.free.fr (212.27.48.10): icmp_seq=2 ttl=63 time=9.44 ms
64 bytes from www.free.fr (212.27.48.10): icmp_seq=3 ttl=63 time=12.1 ms
^C
--- www.free.fr ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 9.448/10.680/12.171/1.126 ms

Important : Notez qu'il existe un front-end graphique en mode texte, nmtui, pour configurer NetworkManager.

Ajouter une Deuxième Adresse IP à un Profil

Pour ajouter une deuxième adresse IP à un profil sous RHEL/CentOS 7, il convient d'utiliser la commande suivante :

[root@centos7 ~]# nmcli connection mod ip_fixe +ipv4.addresses 192.168.1.2/24

Redémarrez la machine virtuelle puis en tant que root saisissez la commande suivante :

[root@centos7 ~]# nmcli connection show ip_fixe
connection.id:                          ip_fixe
connection.uuid:                        fb3a11d9-4e03-4032-b26e-09d1195d2bcd
connection.interface-name:              enp0s3
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1470555543
connection.read-only:                   no
connection.permissions:                 
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.mac-address-blacklist:   
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            
802-3-ethernet.wake-on-lan:             1 (default)
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            manual
ipv4.dns:                               8.8.8.8
ipv4.dns-search:                        
ipv4.addresses:                         10.0.2.16/24, 192.168.1.2/24
ipv4.gateway:                           10.0.2.2
ipv4.routes:                            
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv6.method:                            auto
ipv6.dns:                               
ipv6.dns-search:                        
ipv6.addresses:                         
ipv6.gateway:                           --
ipv6.routes:                            
ipv6.route-metric:                      -1
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
GENERAL.NAME:                           ip_fixe
GENERAL.UUID:                           fb3a11d9-4e03-4032-b26e-09d1195d2bcd
GENERAL.DEVICES:                        enp0s3
GENERAL.STATE:                          activated
GENERAL.DEFAULT:                        yes
GENERAL.DEFAULT6:                       no
GENERAL.VPN:                            no
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT:                    /
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         10.0.2.16/24
IP4.ADDRESS[2]:                         192.168.1.2/24
IP4.GATEWAY:                            10.0.2.2
IP4.DNS[1]:                             8.8.8.8
IP6.ADDRESS[1]:                         fe80::a00:27ff:fe03:97dd/64
IP6.GATEWAY: 

Important : Notez l'ajout de la ligne IP4.ADDRESS[2]:.

Consultez maintenant le contenu du fichier /etc/sysconfig/network-scripts/ifcfg-ip_fixe :

[root@centos7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ip_fixe
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ip_fixe
UUID=fb3a11d9-4e03-4032-b26e-09d1195d2bcd
DEVICE=enp0s3
ONBOOT=yes
DNS1=8.8.8.8
IPADDR=10.0.2.16
PREFIX=24
IPADDR1=192.168.1.2
PREFIX1=24
GATEWAY=10.0.2.2
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

Important : Notez l'ajout de la ligne IPADDR1=192.168.1.2.

La Commande hostname

La procédure de la modification du hostname est simplifiée et sa prise en compte est immédiate :

[root@centos7 ~]# nmcli general hostname centos.fenestros.loc
[root@centos7 ~]# cat /etc/hostname
centos.fenestros.loc
[root@centos7 ~]# hostname
centos.fenestros.loc
[root@centos7 ~]# nmcli general hostname centos7.fenestros.loc
[root@centos7 ~]# cat /etc/hostname
centos7.fenestros.loc
[root@centos7 ~]# hostname
centos7.fenestros.loc

La Commande ip

Sous RHEL/CentOS 7 la commande ip est préférée par rapport à la commande ifconfig :

[root@centos7 ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:03:97:dd brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.16/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.1.2/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe03:97dd/64 scope link 
       valid_lft forever preferred_lft forever
[root@centos7 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:03:97:dd brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.16/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet 192.168.1.2/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe03:97dd/64 scope link 
       valid_lft forever preferred_lft forever

Options de la Commande ip

Les options de cette commande sont :

[root@centos7 ~]# ip --help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |
                   netns | l2tp | tcp_metrics | token }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } |
                    -o[neline] | -t[imestamp] | -b[atch] [filename] |
                    -rc[vbuf] [size]}

Activer/Désactiver une Interface Manuellement

Deux commandes existent pour désactiver et activer manuellement une interface réseau :

[root@centos7 ~]# nmcli device disconnect enp0s3
[root@centos7 ~]# nmcli device connect enp0s3

Routage Statique

La commande ip

Sous RHEL/CentOS 7, pour supprimer la route vers le réseau 192.168.1.0 il convient d'utiliser la commande ip et non pas la commande route :

[root@centos7 ~]# ip route
default via 10.0.2.2 dev enp0s3  proto static  metric 100 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.16  metric 100 
192.168.1.0/24 dev enp0s3  proto kernel  scope link  src 192.168.1.2  metric 100 

[root@centos7 ~]# ip route del 192.168.1.0/24 via 0.0.0.0

[root@centos7 ~]# ip route
default via 10.0.2.2 dev enp0s3  proto static  metric 100 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.16  metric 100 

Pour ajouter la route vers le réseau 192.168.1.0 :

[root@centos7 ~]# ip route add 192.168.1.0/24 via 10.0.2.2

[root@centos7 ~]# ip route
default via 10.0.2.2 dev enp0s3  proto static  metric 100 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.16  metric 100 
192.168.1.0/24 via 10.0.2.2 dev enp0s3

La commande utilisée pour ajouter une passerelle par défaut prend la forme suivante ip route add default via adresse ip.

Activer/désactiver le routage sur le serveur

Pour activer le routage sur le serveur, il convient d'activer la retransmission des paquets:

[root@centos7 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@centos7 ~]# cat /proc/sys/net/ipv4/ip_forward
1

Pour désactiver le routage sur le serveur, il convient de désactiver la retransmission des paquets:

[root@centos7 ~]# echo 0 > /proc/sys/net/ipv4/ip_forward
[root@centos7 ~]# cat /proc/sys/net/ipv4/ip_forward
0

Gestion du Serveur NFS

Présentation

Quand on parle de NFS, on parle d'exportation d'un répertoire sur le serveur afin que celui-ci puisse être vu par des clients sur le réseau. Ces clients peuvent ensuite monter le répertoire et l'utiliser comme si celui-ci faisait partie de son propre filesystem.

Le Network File System (NFS) est le protocole de partage de fichiers historique sur des systèmes Unix. Lors de l'introduction de Samba, NFS a vu sa popularité diminuée, essentiellement parce que la connexion est non-sécurisée :

  • le partage ainsi que ses caractéristiques sont configurés par rapport à l'adresse IP du client, or l'IP Spoofing est de plus en plus répandu,
  • aucun mot de passe n'est demandé lors de la connexion d'un utilisateur à une ressource car le serveur NFS présume que l'utilisateur jean distant est le même utilisateur du compte jean sur le serveur NFS.

Cependant l'arrivée sur le marché de serveurs NAS domestiques ainsi que l'utilisation de la virtualisation dans le milieu professionnel fait que NFS connait un regain d'intérêt en tant que stockage mutualisé raid, simple à mettre en œuvre.

Il existe actuellement 3 versions de NFS :

Version Protocole Utilisé Dépendance
NFSv2 TCP et UDP portmap
NFSv3 TCP et UDP portmap
NFSv4 TCP Aucune - les fonctions de portmap sont incluses dans NFSv4

La version utilisée par défaut sous CentOS/Redhat est NFSv3.

Les Services et Processus du Serveur NFSv3

La version NFSv3 utilise les services suivants :

Services Fonction
nfs Démarre le service NFS ainsi que les processus RPC pour recevoir et traiter les demandes des clients
nfslock Démarre les processus RPC qui permettent aux clients de verrouiller les fichiers sur le serveur
portmap Gestion des réservations des ports pour les services RPC locaux afin que les services RPC distants puissent se connecter

Options d'un Partage NFS

Certaines options, appliquées à un partage, modifient le comportement du serveur NFS pour le partage concerné lors de son démarrage :

Option Comportement
ro Accès en lecture seule
rw Accès en lecture / écriture
sync Ecriture synchrone ( écriture immédiate sur disque )
async Ecriture asynchrone ( écriture sur disque en utilisant une cache )
root_squash Root perd ses prérogatives sur le partage concerné
no_root_squash Root garde ses prérogatives sur le partage concerné
no_lock Pas de verrous sur les fichiers accédés

Si plusieurs options sont spécifiées, celles-ci doivent être séparées par des virgules.

Commandes de Base

Plusieurs commandes permettent de gérer et de s'informer sur l'activité du serveur NFS :

Commande Comportement
exportfs Affiche les partages actifs sur le serveur courant
nfsstat Affiche les statistiques de l'activité NFS
rpcinfo Affiche les démons gérés en effectuant une requête RPC sur le serveur courant
showmount Affiche les partages actifs sur un serveur distant
mount Permet de monter un partage distant sur un répertoire local

Mise en Place

Configuration du Serveur sous RHEL/CentOS 7

Important : Arrêtez votre VM. Dans la fenêtre de Oracle VM VirtualBox, cliquez sur Fichier > Paramètres > Réseau et créez un réseau NAT appelé NatNetwork. Dans les paramètres de votre VM, cliquez sur Réseau et configurez la Carte 1 en Réseau NAT dans le réseau NatNetwork. Démarrez votre VM.

Configurez votre interface réseau si ce n'est pas déjà fait :

[root@centos7 ~]# nmcli connection add con-name ip_fixe ifname enp0s3 type ethernet ip4 10.0.2.16/24 gw4 10.0.2.2
Connection 'ip_fixe' (5ac899e6-3f7b-415e-b9d7-c950fab007d5) successfully added.
[root@centos7 ~]# nmcli connection mod ip_fixe ipv4.dns 8.8.8.8
[root@centos7 ~]# nmcli connection up ip_fixe 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
[root@centos7 ~]# systemctl restart NetworkManager.service
[root@centos7 ~]# ping www.free.fr
PING www.free.fr (212.27.48.10) 56(84) bytes of data.
64 bytes from www.free.fr (212.27.48.10): icmp_seq=1 ttl=51 time=28.7 ms
64 bytes from www.free.fr (212.27.48.10): icmp_seq=2 ttl=51 time=26.7 ms
^C
--- www.free.fr ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 26.773/27.766/28.759/0.993 ms

Ajoutez une autre adresse IP pour le NFS :

[root@centos7 ~]# nmcli connection mod ip_fixe +ipv4.addresses 192.168.1.2/24

Continuez maintenant par la mise en place du service nfs :

[root@centos7 ~]# systemctl status nfs.service
nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled)
   Active: inactive (dead)

[root@centos7 ~]# systemctl enable nfs-server.service
ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/multi-user.target.wants/nfs-server.service'
[root@centos7 ~]# systemctl status nfs.service
nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled)
   Active: inactive (dead)

La mise en place d'un partage ponctuel se fait en utilisant la commande exportfs en indiquant en argument le répertoire sous la forme de adresse_ip_du_serveur:chemin_du_partage :

[root@centos7 ~]# exportfs
[root@centos7 ~]# exportfs 192.168.1.2:/home/trainee
[root@centos7 ~]# exportfs
/home/trainee 	192.168.1.2

Démarrez maintenant le service nfs :

[root@centos7 ~]# systemctl start nfs.service
[root@centos7 ~]# systemctl status nfs.service
nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled)
   Active: active (exited) since Thu 2015-10-01 13:18:13 CEST; 4s ago
  Process: 9552 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 9551 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 9552 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Oct 01 13:18:13 centos7.fenestros.loc systemd[1]: Starting NFS server and services...
Oct 01 13:18:13 centos7.fenestros.loc systemd[1]: Started NFS server and services.

Afin de mettre en place un ou des partages permanents, il est nécessaire d'éditer le fichier /etc/exports :

/home/trainee	192.168.1.1
/tmp		*

Important : Dans ce cas, nous avons partagé le répertoire /home/trainee pour la seule adresse IP 192.168.1.1.

Redémarrez maintenant le service nfs afin que le fichier /etc/exports soit re-lu :

[root@centos7 ~]# systemctl restart nfs.service
[root@centos7 ~]# systemctl status nfs.service
nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled)
   Active: active (exited) since Thu 2015-10-01 14:24:50 CEST; 18s ago
  Process: 4642 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 4639 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 4638 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 4650 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 4649 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 4650 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Oct 01 14:24:50 centos7.fenestros.loc systemd[1]: Starting NFS server and services...
Oct 01 14:24:50 centos7.fenestros.loc exportfs[4649]: exportfs: No options for /home/trainee 192.168.1.1: suggest 192.168.1.1(sync) to avoid warning
Oct 01 14:24:50 centos7.fenestros.loc exportfs[4649]: exportfs: No options for /tmp *: suggest *(sync) to avoid warning
Oct 01 14:24:50 centos7.fenestros.loc systemd[1]: Started NFS server and services.

Puisque aucune option ne soit spécifiée pour les montages, ceux-ci ont été exportés avec des option par défaut. En utilisant l'option -v de la commande exportfs, il est possible de consulter ces options :

[root@centos7 ~]# exportfs -v
/home/trainee 	192.168.1.1(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
/tmp          	<world>(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

Configuration du Client sous RHEL/CentOS 7

Important : Arrêtez votre VM. Créez une clône de votre VM. Démarrez la VM clonée.

Re-configurez ensuite l'interface réseau de votre VM Client :

[root@centos7 ~]# nmcli connection del ip_fixe

[root@centos7 ~]# nmcli connection show ip_fixe
Error: ip_fixe - no such connection profile.

[root@centos7 ~]# nmcli connection add con-name ip_fixe ifname enp0s3 type ethernet ip4 10.0.2.17/24 gw4 10.0.2.2
Connection 'ip_fixe' (5b54ad20-c3e2-4606-b54d-38b225cc578f) successfully added.

[root@centos7 ~]# nmcli connection mod ip_fixe ipv4.dns 8.8.8.8

[root@centos7 ~]# nmcli connection mod ip_fixe +ipv4.addresses 192.168.1.1/24

[root@centos7 ~]# nmcli connection up ip_fixe 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)

[root@centos7 ~]# systemctl restart NetworkManager.service

Important : Démarrez la VM d'origine.

Dans la VM d'origine (serveur) passez SELinux en mode permissive et arrêtez le pare-feu :

[root@centos7 ~]# getenforce
Enforcing
[root@centos7 ~]# setenforce permissive
[root@centos7 ~]# systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Thu 2015-10-01 14:54:57 CEST; 19min ago
 Main PID: 479 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─479 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Oct 01 14:54:57 centos7.fenestros.loc systemd[1]: Started firewalld - dynamic firewall daemon.
[root@centos7 ~]# systemctl stop firewalld.service

A partir de votre client, consultez les répertoire exportés du serveur :

[root@centos7 ~]# showmount --exports 192.168.1.2
Export list for 192.168.1.2:
/tmp          *
/home/trainee 192.168.1.1

Créez maintenant le répertoire /nfs dans le client et montez le partage 192.168.1.2:/home/trainee :

[root@centos7 ~]# mkdir /nfs
[root@centos7 ~]# mount -t nfs 192.168.1.2:/home/trainee /nfs

Notez que quand vous essayer de rentrer dans le répertoire en tant que root, vous obtenez le message -bash: cd: /nfs: Permission non accordée :

[root@centos7 ~]# cd /nfs
-bash: cd: /nfs: Permission denied

Important : Puisque le répertoire /home/trainee a été exporté avec l'option par défaut root_squash. Ceci implique que root perd ses droits sur le répertoire quand il est monté. En fait, le service nfs remplace l'UID de 0 avec l'UID de l'utilisateur nobody.

Retournez donc dans le serveur et modifiez le fichier /etc/exports ainsi :

[root@centos7 ~]# cat /etc/exports
/home/trainee	192.168.1.1(async,rw,no_root_squash)	
/tmp		*

Redémarrez le service nfs :

[root@centos7 ~]# systemctl restart nfs.service

Vous noterez que maintenant vous êtes capable de vous positionner dans le répertoire /nfs du client en tant que root

[root@centos7 ~]# cd /nfs
[root@centos7 nfs]# 

Le Pare-feu Netfilter/iptables

Importez une machine virtuelle vierge de CentOS 6 pour effectuer le LAB #8.

Introduction

Netfilter est composé de 5 hooks :

  • NF_IP_PRE_ROUTING
  • NF_IP_LOCAL_IN
  • NF_IP_LOCAL_OUT
  • NF_IP_FORWARD
  • NF_IP_POSTROUTING

Ces hooks sont utilisés par deux branches, la première est celle concernée par les paquets qui entrent vers des services locaux :

  • NF_IP_PRE_ROUTING > NF_IP_LOCAL_IN > NF_IP_LOCAL_OUT > NF_IP_POSTROUTING

tandis que la deuxième concerne les paquets qui traversent la passerelle:

  • NF_IP_PRE_ROUTING > NF_IP_FORWARD > NF_IP_POSTROUTING

Si IPTABLES a été compilé en tant que module, son utilisation nécessite le chargement de plusieurs modules supplémentaires en fonction de la situation:

  • iptable_filter
  • iptable_mangle
  • iptable_net
  • etc

Netfilter est organisé en tables. La commande iptables de netfilter permet d'insérer des policies dans les chaines:

  • La table FILTER
    • La chaîne INPUT
      • Concerne les paquets entrants
        • Policies: ACCEPT, DROP, REJECT
    • La chaîne OUTPUT
      • Concerne les paquets sortants
        • Policies: ACCEPT, DROP, REJECT
    • La chaîne FORWARD
      • Concerne les paquets traversant le par-feu.
        • Policies: ACCEPT, DROP, REJECT

Si aucune table n'est précisée, c'est la table FILTER qui s'applique par défaut.

  • La table NAT
    • La chaîne PREROUTING
      • Permet de faire la translation d'adresse de destination
        • Cibles: SNAT, DNAT, MASQUERADE
    • La chaîne POSTROUTING
      • Permet de faire la translation d'adresse de la source
        • Cibles: SNAT, DNAT, MASQUERADE
    • Le cas spécifique OUTPUT
      • Permet la modification de la destination des paquets générés localement
  • La table MANGLE
    • Permet le marquage de paquets générés localement (OUTPUT) et entrants (PREROUTING)

Les policies sont:

  • ACCEPT
    • Permet d'accepter le paquet concerné
  • DROP
    • Permet de rejeter le paquet concerné sans générer un message d'erreur
  • REJECT
    • Permet de rejeter le paquet concerné en générant une message d'erreur

Les cibles sont:

  • SNAT
    • Permet de modifier l'adresse source du paquet concerné
  • DNAT
    • Permet de modifier l'adresse de destination du paquet concerné
  • MASQUERADE
    • Permet de remplacer l'adresse IP privée de l'expéditeur par un socket public de la passerelle.

IPTABLES peut être configuré soit par des outils tels shorewall, soit en utilisant des lignes de commandes ou un script. Dans ce dernier cas, la ligne prend la forme:

# IPTABLES --action CHAINE --option1 --option2

Les actions sont:

Action Abréviation Déscription
- -append -A Ajouter une règle à la fin de la chaîne spécifiée
- -delete -D Supprimer une règle en spécifiant son numéro ou la règle à supprimer
- -replace -R Permet de remplacer la règle spécifée par son numéro
- -insert -I Permet d'insérer une règle à l'endroit spécifié
- -list -L Permet d'afficher des règles
- -flush -F Permet de vider toutes les règles d'une chaîne

Les options sont:

Option Abréviation Déscription
- -protocol -p Permet de spécifier un protocol - tcp, udp, icmp, all
- -source -s Permet de spécifier une adresse source
- -destination -d Permet de spécifier une adresse de destination
- -in-interface -i Permet de spécifier une interface réseau d'entrée
- -out-interface -o Permet de spécifier une interface réseau de sortie
- -fragment -f Permet de ne spécifier que les paquets fragmentés
- -source-port -sport Permet de spécifier un port source ou une plage de ports source
- -destination-port -dport Permet de spécifier un port de destination ou une plage de ports de destination
- -tcp-flags s/o Permet de spécifier un flag TCP à matcher - SYN, ACK, FIN, RST, URG, PSH, ALL, NONE
- -icmp-type s/o Permet de spécifier un type de paquet ICMP
- -mac-source s/o Permet de spécifier une adresse MAC

Les options spécifiques à NET sont:

- -to-destination s/o Permet de spécifier l'adresse de destination d'une translation
- -to-source s/o Permet spécifier l'adresse source d'une translation

Les options spécifiques aux LOGS sont:

- -log-level s/o Permet de spécifier le niveau de logs
- -log-prefix s/o Permet de spécifier un préfix pour les logs

L'option spécifique au STATEFUL est:

- -state s/o Permet de spécifier l'état du paquet à vérifier

Ce dernier cas fait référence au STATEFUL. Le STATEFUL est la capacité du par-feu à enregistrer dans une table spécifique, l'état des différentes connexions. Cette table s'appelle une table d'état. Le principe du fonctionnement de STATEFUL est simple, à savoir, si le paquet entrant appartient à une communication déjà établie, celui-ci n'est pas vérifié.

Il existe 4 états:

  • NEW
    • Le paquet concerne une nouvelle connexion et contient donc un flag SYN à 1
  • ESTABLISHED
    • Le paquet concerne une connexion déjà établie. Le paquet ne doit contenir ni flag SYN à 1, ni flag FIN à 1
  • RELATED
    • Le paquet est d'une connexion qui présente une relation avec une autre connexion
  • INVALID
    • La paquet provient d'une connexion anormale.

LAB #5 - La Configuration par firewalld sous RHEL/CentOS 7

Importez une machine virtuelle vierge de CentOS 7 pour effectuer les LABS #9 et #10.

firewalld est à Netfilter ce que NetworkManager est au réseau. firewalld utilise des zones - des jeux de règles pré-définis dans lesquels sont placés les interfaces :

  • trusted - un réseau fiable. Dans ce cas tous les ports sont autorisés,
  • work, home, internal - un réseau partiellement fiable. Dans ce cas quelques ports sont autorisés,
  • dmz, public, external - un réseau non fiable. Dans ce cas peu de ports sont autorisés,
  • block, drop - tout est interdit. La zone drop n'envoie pas de messages d'erreurs.

Une interface ne peut être que dans une zone à la fois tandis que plusieurs interfaces peuvent être dans la même zone.

Le service firewalld doit toujours être lancé :

[root@centos7 ~]# systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Tue 2015-07-07 15:53:56 CEST; 1 day 21h ago
 Main PID: 493 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─493 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Jul 07 15:53:56 centos7.fenestros.loc systemd[1]: Started firewalld - dynamic firewall daemon.

La Configuration de Base de firewalld

La configuration par défaut de firewalld se trouve dans /usr/lib/firewalld :

[root@centos7 ~]# ls -l /usr/lib/firewalld/
total 12
drwxr-x---. 2 root root 4096 Jun  4 09:52 icmptypes
drwxr-x---. 2 root root 4096 Jun  4 09:52 services
drwxr-x---. 2 root root 4096 Jun  4 09:52 zones
[root@centos7 ~]# ls -l /usr/lib/firewalld/zones
total 36
-rw-r-----. 1 root root 299 Mar  6 00:35 block.xml
-rw-r-----. 1 root root 293 Mar  6 00:35 dmz.xml
-rw-r-----. 1 root root 291 Mar  6 00:35 drop.xml
-rw-r-----. 1 root root 304 Mar  6 00:35 external.xml
-rw-r-----. 1 root root 400 Mar  6 00:35 home.xml
-rw-r-----. 1 root root 415 Mar  6 00:35 internal.xml
-rw-r-----. 1 root root 315 Mar  6 00:35 public.xml
-rw-r-----. 1 root root 162 Mar  6 00:35 trusted.xml
-rw-r-----. 1 root root 342 Mar  6 00:35 work.xml
[root@centos7 ~]# ls -l /usr/lib/firewalld/services
total 192
-rw-r-----. 1 root root 412 Mar  6 00:35 amanda-client.xml
-rw-r-----. 1 root root 320 Mar  6 00:35 bacula-client.xml
-rw-r-----. 1 root root 346 Mar  6 00:35 bacula.xml
-rw-r-----. 1 root root 305 Mar  6 00:35 dhcpv6-client.xml
-rw-r-----. 1 root root 234 Mar  6 00:35 dhcpv6.xml
-rw-r-----. 1 root root 227 Mar  6 00:35 dhcp.xml
-rw-r-----. 1 root root 346 Mar  6 00:35 dns.xml
-rw-r-----. 1 root root 374 Mar  6 00:35 ftp.xml
-rw-r-----. 1 root root 476 Mar  6 00:35 high-availability.xml
-rw-r-----. 1 root root 448 Mar  6 00:35 https.xml
-rw-r-----. 1 root root 353 Mar  6 00:35 http.xml
-rw-r-----. 1 root root 372 Mar  6 00:35 imaps.xml
-rw-r-----. 1 root root 454 Mar  6 00:35 ipp-client.xml
-rw-r-----. 1 root root 427 Mar  6 00:35 ipp.xml
-rw-r-----. 1 root root 517 Mar  6 00:35 ipsec.xml
-rw-r-----. 1 root root 233 Mar  6 00:35 kerberos.xml
-rw-r-----. 1 root root 221 Mar  6 00:35 kpasswd.xml
-rw-r-----. 1 root root 232 Mar  6 00:35 ldaps.xml
-rw-r-----. 1 root root 199 Mar  6 00:35 ldap.xml
-rw-r-----. 1 root root 385 Mar  6 00:35 libvirt-tls.xml
-rw-r-----. 1 root root 389 Mar  6 00:35 libvirt.xml
-rw-r-----. 1 root root 424 Mar  6 00:35 mdns.xml
-rw-r-----. 1 root root 211 Mar  6 00:35 mountd.xml
-rw-r-----. 1 root root 190 Mar  6 00:35 ms-wbt.xml
-rw-r-----. 1 root root 171 Mar  6 00:35 mysql.xml
-rw-r-----. 1 root root 324 Mar  6 00:35 nfs.xml
-rw-r-----. 1 root root 389 Mar  6 00:35 ntp.xml
-rw-r-----. 1 root root 335 Mar  6 00:35 openvpn.xml
-rw-r-----. 1 root root 433 Mar  6 00:35 pmcd.xml
-rw-r-----. 1 root root 474 Mar  6 00:35 pmproxy.xml
-rw-r-----. 1 root root 544 Mar  6 00:35 pmwebapis.xml
-rw-r-----. 1 root root 460 Mar  6 00:35 pmwebapi.xml
-rw-r-----. 1 root root 357 Mar  6 00:35 pop3s.xml
-rw-r-----. 1 root root 181 Mar  6 00:35 postgresql.xml
-rw-r-----. 1 root root 261 Mar  6 00:35 proxy-dhcp.xml
-rw-r-----. 1 root root 446 Mar  6 00:35 radius.xml
-rw-r-----. 1 root root 517 Mar  6 00:35 RH-Satellite-6.xml
-rw-r-----. 1 root root 214 Mar  6 00:35 rpc-bind.xml
-rw-r-----. 1 root root 384 Mar  6 00:35 samba-client.xml
-rw-r-----. 1 root root 461 Mar  6 00:35 samba.xml
-rw-r-----. 1 root root 550 Mar  6 00:35 smtp.xml
-rw-r-----. 1 root root 463 Mar  6 00:35 ssh.xml
-rw-r-----. 1 root root 393 Mar  6 00:35 telnet.xml
-rw-r-----. 1 root root 301 Mar  6 00:35 tftp-client.xml
-rw-r-----. 1 root root 437 Mar  6 00:35 tftp.xml
-rw-r-----. 1 root root 211 Mar  6 00:35 transmission-client.xml
-rw-r-----. 1 root root 475 Mar  6 00:35 vnc-server.xml
-rw-r-----. 1 root root 310 Mar  6 00:35 wbem-https.xml
[root@centos7 ~]# ls -l /usr/lib/firewalld/icmptypes/
total 36
-rw-r-----. 1 root root 222 Mar  6 00:35 destination-unreachable.xml
-rw-r-----. 1 root root 173 Mar  6 00:35 echo-reply.xml
-rw-r-----. 1 root root 210 Mar  6 00:35 echo-request.xml
-rw-r-----. 1 root root 225 Mar  6 00:35 parameter-problem.xml
-rw-r-----. 1 root root 185 Mar  6 00:35 redirect.xml
-rw-r-----. 1 root root 227 Mar  6 00:35 router-advertisement.xml
-rw-r-----. 1 root root 223 Mar  6 00:35 router-solicitation.xml
-rw-r-----. 1 root root 248 Mar  6 00:35 source-quench.xml
-rw-r-----. 1 root root 253 Mar  6 00:35 time-exceeded.xml

Ces fichiers sont au format xml, par exemple :

[root@centos7 ~]# cat /usr/lib/firewalld/zones/home.xml 
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Home</short>
  <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="ipp-client"/>
  <service name="mdns"/>
  <service name="samba-client"/>
  <service name="dhcpv6-client"/>
</zone>

La configuration de firewalld ainsi que les définitions et règles personnalisées se trouvent dans /etc/firewalld :

[root@centos7 ~]# ls -l /etc/firewalld/
total 8
-rw-r-----. 1 root root 1026 Mar  6 00:35 firewalld.conf
drwxr-x---. 2 root root    6 Mar  6 00:35 icmptypes
-rw-r-----. 1 root root  271 Mar  6 00:35 lockdown-whitelist.xml
drwxr-x---. 2 root root    6 Mar  6 00:35 services
drwxr-x---. 2 root root   23 Mar  6 00:35 zones
[root@centos7 ~]# ls -l /etc/firewalld/zones/
total 4
-rw-r--r--. 1 root root 315 Mar  8 14:05 public.xml
[root@centos7 ~]# ls -l /etc/firewalld/services/
total 0
[root@centos7 ~]# ls -l /etc/firewalld/icmptypes/
total 0

Le fichier de configuration de firewalld est /etc/firewalld/firewalld.conf :

[root@centos7 ~]# cat /etc/firewalld/firewalld.conf 
# firewalld config file

# default zone
# The default zone used if an empty zone string is used.
# Default: public
DefaultZone=public

# Minimal mark
# Marks up to this minimum are free for use for example in the direct 
# interface. If more free marks are needed, increase the minimum
# Default: 100
MinimalMark=100

# Clean up on exit
# If set to no or false the firewall configuration will not get cleaned up
# on exit or stop of firewalld
# Default: yes
CleanupOnExit=yes

# Lockdown
# If set to enabled, firewall changes with the D-Bus interface will be limited
# to applications that are listed in the lockdown whitelist.
# The lockdown whitelist file is lockdown-whitelist.xml
# Default: no
Lockdown=no

# IPv6_rpfilter
# Performs a reverse path filter test on a packet for IPv6. If a reply to the
# packet would be sent via the same interface that the packet arrived on, the 
# packet will match and be accepted, otherwise dropped.
# The rp_filter for IPv4 is controlled using sysctl.
# Default: yes
IPv6_rpfilter=yes
La Commande firewall-cmd

firewalld s'appuie sur netfilter. Pour cette raison, l'utilisation de firewall-cmd est incompatible avec l'utilisation des commandes iptables et system-config-firewall.

firewall-cmd est le front-end de firewalld en ligne de commande. Il existe aussi la commande firewall-config qui lance un outi de configuration graphique.

Pour obtenir la liste de toutes les zones prédéfinies, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Pour obtenir la liste de toutes les services prédéfinis, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

Pour obtenir la liste de toutes les types ICMP prédéfinis, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

Pour obtenir la liste des zones de la configuration courante, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --get-active-zones
public
  interfaces: enp0s3

Pour obtenir la liste des zones de la configuration courante pour une interface spécifique, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --get-zone-of-interface=enp0s3
public

Pour obtenir la liste des services autorisés pour la zone public, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=public --list-services
dhcpv6-client ssh

Pour obtenir toute la configuration pour la zone public, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: enp0s3
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	

Pour obtenir la liste complète de toutes les zones et leurs configurations, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --list-all-zones
block
  interfaces: 
  sources: 
  services: 
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
dmz
  interfaces: 
  sources: 
  services: ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
drop
  interfaces: 
  sources: 
  services: 
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
external
  interfaces: 
  sources: 
  services: ssh
  ports: 
  masquerade: yes
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
home
  interfaces: 
  sources: 
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
internal
  interfaces: 
  sources: 
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
public (default, active)
  interfaces: enp0s3
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
trusted
  interfaces: 
  sources: 
  services: 
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
work
  interfaces: 
  sources: 
  services: dhcpv6-client ipp-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Pour changer la zone par défaut de public à work, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --set-default-zone=work
success
[root@centos7 ~]# firewall-cmd --get-active-zones
work
  interfaces: enp0s3

Pour ajouter l'interface ip_fixe à la zone work, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --add-interface=ip_fixe
success
[root@centos7 ~]# firewall-cmd --get-active-zones
work
  interfaces: enp0s3 ip_fixe

Pour supprimer l'interface ip_fixe à la zone work, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --remove-interface=ip_fixe
success
[root@centos7 ~]# firewall-cmd --get-active-zones
work
  interfaces: enp0s3

Pour ajouter le service http à la zone work, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --add-service=http
success
[root@centos7 ~]# firewall-cmd --zone=work --list-services
dhcpv6-client http ipp-client ssh

Pour supprimer le service http de la zone work, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --remove-service=http
success
[root@centos7 ~]# firewall-cmd --zone=work --list-services
dhcpv6-client ipp-client ssh

Pour ajouter un nouveau bloc ICMP, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --add-icmp-block=echo-reply
success
[root@centos7 ~]# firewall-cmd --zone=work --list-icmp-blocks
echo-reply

Pour supprimer un bloc ICMP, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --remove-icmp-block=echo-reply
success
[root@centos7 ~]# firewall-cmd --zone=work --list-icmp-blocks
[root@centos7 ~]# 

Pour ajouter le port 591/tcp à la zone work, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --add-port=591/tcp
success
[root@centos7 ~]# firewall-cmd --zone=work --list-ports
591/tcp

Pour supprimer le port 591/tcp à la zone work, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --zone=work --remove-port=591/tcp
success
[root@centos7 ~]# firewall-cmd --zone=work --list-ports
[root@centos7 ~]#

Pour créer un nouveau service, il convient de :

  • copier un fichier existant se trouvant dans le répertoire /usr/lib/firewalld/services vers /etc/firewalld/services,
  • modifier le fichier,
  • recharger la configuration de firewalld,
  • vérifier que firewalld voit le nouveau service.

Par exemple :

[root@centos7 ~]# cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/filemaker.xml
[root@centos7 ~]#
[root@centos7 ~]# cat /etc/firewalld/services/filemaker.xml 
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FileMakerPro</short>
  <description>fichier de service firewalld pour FileMaker Pro</description>
  <port protocol="tcp" port="591"/>
</service>
[root@centos7 ~]#
[root@centos7 ~]# firewall-cmd --reload
success
[root@centos7 ~]#
[root@centos7 ~]# firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns filemaker ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

La Configuration Avancée de firewalld

La configuration de base de firewalld ne permet que la configuration des zones, services, blocs ICMP et les ports non-standard. Cependant firewalld peut également être configuré avec des Rich Rules ou Règles Riches. Rich Rules ou Règles Riches évaluent des critères pour ensuite entreprendre une action.

Les Critères sont :

  • source address=“<adresse_IP>“
  • destination address=”<adresse_IP>“,
  • rule port port=”<numéro_du_port>“,
  • service name=<nom_d'un_sevice_prédéfini>.

Les Actions sont :

  • accept,
  • reject,
    • une Action reject peut être associée avec un message d'erreur spécifique par la clause type=”<type_d'erreur>,
  • drop.

Saisissez la commande suivante pour ouvrir le port 80 :

[root@centos7 ~]# firewall-cmd --add-rich-rule='rule port port="80" protocol="tcp" accept'
success

Notez que la Rich Rule doit être entourée de caractères '.

Saisissez la commande suivante pour visualiser la règle iptables pour IPv4 :

[root@centos7 ~]# iptables -L -n | grep 80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 ctstate NEW

Saisissez la commande suivante pour visualiser la règle iptables pour IPv6 :

[root@centos7 ~]# ip6tables -L -n | grep 80
ACCEPT     udp      ::/0                 fe80::/64            udp dpt:546 ctstate NEW
ACCEPT     tcp      ::/0                 ::/0                 tcp dpt:80 ctstate NEW

Notez que la Rich Rule a créé deux règles, une pour IPv4 et une deuxième pour IPv6. Une règle peut être créée pour IPv4 seul en incluant le Critère family=ipv4. De la même façon, une règle peut être créée pour IPv6 seul en incluant le Critère family=ipv6.

Cette nouvelle règle est écrite en mémoire mais non pas sur disque. Pour l'écrire sur disque dans le fichier zone se trouvant dans /etc/firewalld, il faut ajouter l'option –permanent :

[root@centos7 ~]# firewall-cmd --add-rich-rule='rule port port="80" protocol="tcp" accept' --permanent
success
[root@centos7 ~]#
[root@centos7 ~]# cat /etc/firewalld/zones/work.xml 
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Work</short>
  <description>For use in work areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ipp-client"/>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <rule>
    <port protocol="tcp" port="80"/>
    <accept/>
  </rule>
</zone>

Attention ! La règle ajoutée avec l'option –permanent n'est pas prise en compte imédiatement mais uniquement au prochain redémmarge. Pour qu'une règle soit appliquée immédiatement et être écrite sur disque, il faut saisir la commande deux fois dont une avec l'option –permanent et l'autre sans l'option –permanent.

Pour visualiser cette règle dans la configuration de firewalld, il convient de saisir la commande suivante :

[root@centos7 ~]# firewall-cmd --list-all-zones
...	
work (default, active)
  interfaces: enp0s3
  sources: 
  services: dhcpv6-client ipp-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	rule port port="80" protocol="tcp" accept

Notez que la Rich Rule est créée dans la Zone par Défaut. Il est possible de créer une Rich Rule dans une autre zone en utilisant l'option –zone=<zone> de la commande firewall-cmd :

[root@centos7 ~]# firewall-cmd --zone=public --add-rich-rule='rule port port="80" protocol="tcp" accept'
success
[root@centos7 ~]# firewall-cmd --list-all-zones
...
public
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	rule port port="80" protocol="tcp" accept
trusted
  interfaces: 
  sources: 
  services: 
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
work (default, active)
  interfaces: enp0s3
  sources: 
  services: dhcpv6-client ipp-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	rule port port="80" protocol="tcp" accept

Pour supprimer une Rich Rule, il faut copier la ligne entière la concernant qui se trouve dans la sortie de la commande firewall-cmd –list-all-zones :

[root@centos7 ~]# firewall-cmd --zone=public --remove-rich-rule='rule port port="80" protocol="tcp" accept'
success

Le mode Panic de firewalld

Le mode Panic de firewalld permet de bloquer tout le trafic avec une seule commande. Pour connaître l'état du mode Panic, utilisez la commande suivante :

[root@centos7 ~]# firewall-cmd --query-panic
no

Pour activer le mode Panic, il convient de saisir la commande suivante :

[root@centos7 ~]# firewall-cmd --panic-on
success
[root@centos7 ~]# firewall-cmd --query-panic
yes

Pour désactiver le mode Panic, il convient de saisir la commande suivante :

[root@centos7 ~]# firewall-cmd --panic-off
success
[root@centos7 ~]# firewall-cmd --query-panic
no

Gestion du Noyau

Rôle du noyau

Le noyau ou kernel est la partie du système d'exploitation qui gère les entrées/sorties avec des périphériques. Dans certains cas il est préférable de recompiler le noyau de Linux. La motivation de cette recompilation peut être :

  • la diminution de la taille du noyau,
  • la prise en charge de nouveau matériel,
  • l'ajout de fonctionnalités,
  • l'optimisation du code,
  • la correction de bogues,
  • le besoin d'une fonctionnalité expérimentale.

Commencez par identifier le noyau utilisé par votre machine :

[root@centos7 ~]# uname -r
3.10.0-327.13.1.el7.x86_64

Dans le cas d'une utilisation courante de Linux, il est cependant préférable de faire appel aux modules. Les modules se trouvent dans le répertoire /lib/modules/<version-du-noyau> :

[root@centos7 ~]# ls /lib/modules/`uname -r`/
build   modules.alias      modules.builtin      modules.dep.bin  modules.modesetting  modules.softdep      source   weak-updates
extra   modules.alias.bin  modules.builtin.bin  modules.devname  modules.networking   modules.symbols      updates
kernel  modules.block      modules.dep          modules.drm      modules.order        modules.symbols.bin  vdso

Les commandes pour manipuler les modules sont :

  • insmod
  • rmmod
  • lsmod
  • modprobe

Par exemple :

[root@centos7 ~]# lsmod
Module                  Size  Used by
ip6t_rpfilter          12546  1 
ip6t_REJECT            12939  2 
ipt_REJECT             12541  2 
xt_conntrack           12760  9 
ebtable_nat            12807  0 
ebtable_broute         12731  0 
bridge                119562  1 ebtable_broute
stp                    12976  1 bridge
llc                    14552  2 stp,bridge
ebtable_filter         12827  0 
ebtables               30913  3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_nat           12864  1 
nf_conntrack_ipv6      18738  6 
nf_defrag_ipv6         34768  1 nf_conntrack_ipv6
nf_nat_ipv6            14131  1 ip6table_nat
ip6table_mangle        12700  1 
ip6table_security      12710  1 
ip6table_raw           12683  1 
ip6table_filter        12815  1 
ip6_tables             27025  5 ip6table_filter,ip6table_mangle,ip6table_security,ip6table_nat,ip6table_raw
iptable_nat            12875  1 
nf_conntrack_ipv4      14862  5 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26146  2 nf_nat_ipv4,nf_nat_ipv6
nf_conntrack          105745  6 nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_conntrack_ipv4,nf_conntrack_ipv6
iptable_mangle         12695  1 
iptable_security       12705  1 
iptable_raw            12678  1 
iptable_filter         12810  1 
dm_mirror              22135  0 
dm_region_hash         20862  1 dm_mirror
dm_log                 18411  2 dm_region_hash,dm_mirror
dm_mod                113292  2 dm_log,dm_mirror
crc32_pclmul           13113  0 
ghash_clmulni_intel    13259  0 
aesni_intel            69884  0 
lrw                    13286  1 aesni_intel
gf128mul               14951  1 lrw
glue_helper            13990  1 aesni_intel
snd_intel8x0           38274  1 
ablk_helper            13597  1 aesni_intel
cryptd                 20359  3 ghash_clmulni_intel,aesni_intel,ablk_helper
snd_ac97_codec        130605  1 snd_intel8x0
ac97_bus               12730  1 snd_ac97_codec
ppdev                  17671  0 
snd_seq                66691  0 
snd_seq_device         14356  1 snd_seq
snd_pcm               105835  2 snd_ac97_codec,snd_intel8x0
pcspkr                 12718  0 
sg                     40721  0 
parport_pc             28165  0 
parport                42348  2 ppdev,parport_pc
snd_timer              29639  2 snd_pcm,snd_seq
snd                    83425  8 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm,snd_seq,snd_seq_device
soundcore              15047  1 snd
i2c_piix4              22106  0 
video                  24400  0 
i2c_core               40582  1 i2c_piix4
nfsd                  302418  1 
auth_rpcgss            59343  1 nfsd
nfs_acl                12837  1 nfsd
lockd                  93600  1 nfsd
grace                  13295  2 nfsd,lockd
sunrpc                300464  7 nfsd,auth_rpcgss,lockd,nfs_acl
ip_tables              27240  5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw
xfs                   939662  2 
libcrc32c              12644  1 xfs
sd_mod                 45497  4 
crc_t10dif             12714  1 sd_mod
crct10dif_generic      12647  0 
sr_mod                 22416  0 
cdrom                  42556  1 sr_mod
ata_generic            12910  0 
pata_acpi              13038  0 
ahci                   29907  3 
libahci                32031  1 ahci
ata_piix               35038  0 
crct10dif_pclmul       14289  1 
crct10dif_common       12595  3 crct10dif_pclmul,crct10dif_generic,crc_t10dif
crc32c_intel           22079  1 
serio_raw              13462  0 
libata                218730  5 ahci,pata_acpi,libahci,ata_generic,ata_piix
e1000                 149323  0 

Pour ajouter un module, on peut utiliser la commande insmod ou modprobe. Cette dernière ajoute non seulement le module passé en argument mais également ses dépendances :

[root@centos7 ~]# modprobe bonding
[root@centos7 ~]# lsmod | more
Module                  Size  Used by
bonding               136705  0 
ip6t_rpfilter          12546  1 
ip6t_REJECT            12939  2 
ipt_REJECT             12541  2 
xt_conntrack           12760  9 
ebtable_nat            12807  0 
ebtable_broute         12731  0 
bridge                119562  1 ebtable_broute
stp                    12976  1 bridge
llc                    14552  2 stp,bridge
ebtable_filter         12827  0 
ebtables               30913  3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_nat           12864  1 
nf_conntrack_ipv6      18738  6 
nf_defrag_ipv6         34768  1 nf_conntrack_ipv6
nf_nat_ipv6            14131  1 ip6table_nat
ip6table_mangle        12700  1 
ip6table_security      12710  1 
ip6table_raw           12683  1 
ip6table_filter        12815  1 
ip6_tables             27025  5 ip6table_filter,ip6table_mangle,ip6table_securit
y,ip6table_nat,ip6table_raw
--More--

Pour supprimer un module, on peut utiliser la commande rmmod ou modprobe -r. Cette dernière essaie de supprimer les dépendances non-utilisées :

[root@centos7 ~]# modprobe -r bonding
[root@centos7 ~]# lsmod | more
Module                  Size  Used by
ip6t_rpfilter          12546  1 
ip6t_REJECT            12939  2 
ipt_REJECT             12541  2 
xt_conntrack           12760  9 
ebtable_nat            12807  0 
ebtable_broute         12731  0 
bridge                119562  1 ebtable_broute
stp                    12976  1 bridge
llc                    14552  2 stp,bridge
ebtable_filter         12827  0 
ebtables               30913  3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_nat           12864  1 
nf_conntrack_ipv6      18738  6 
nf_defrag_ipv6         34768  1 nf_conntrack_ipv6
nf_nat_ipv6            14131  1 ip6table_nat
ip6table_mangle        12700  1 
ip6table_security      12710  1 
ip6table_raw           12683  1 
ip6table_filter        12815  1 
ip6_tables             27025  5 ip6table_filter,ip6table_mangle,ip6table_securit
y,ip6table_nat,ip6table_raw
iptable_nat            12875  1 
--More--

Les dépendances des modules sont résolues par la commande modprobe grâce aux fichier /lib/modules/<version-du-noyau>/modules.dep. Ce dernier peut être créé manuellement grâce à la commande depmod :

[root@centos7 ~]# more /lib/modules/`uname -r`/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/cryp
to/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 kern
el/arch/x86/crypto/glue_helper.ko kernel/arch/x86/crypto/ablk_helper.ko kernel/crypto/cryptd.ko
kernel/arch/x86/crypto/aesni-intel.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
kernel/arch/x86/crypto/ghash-clmulni-intel.ko: kernel/crypto/cryptd.ko
kernel/arch/x86/crypto/crc32c-intel.ko:
kernel/arch/x86/crypto/sha-mb/sha1-mb.ko: kernel/crypto/mcryptd.ko
kernel/arch/x86/crypto/crc32-pclmul.ko:
kernel/arch/x86/crypto/sha512-ssse3.ko: kernel/crypto/sha512_generic.ko
kernel/arch/x86/crypto/crct10dif-pclmul.ko: kernel/crypto/crct10dif_common.ko
kernel/arch/x86/crypto/camellia-aesni-avx-x86_64.ko: kernel/arch/x86/crypto/camellia-x86_64.ko kernel/crypto/xts.ko kernel/crypto/lrw.ko kernel/crypto/g
f128mul.ko kernel/arch/x86/crypto/glue_helper.ko kernel/arch/x86/crypto/ablk_helper.ko kernel/crypto/cryptd.ko
kernel/arch/x86/crypto/cast5-avx-x86_64.ko: kernel/crypto/cast5_generic.ko kernel/crypto/cast_common.ko kernel/arch/x86/crypto/ablk_helper.ko kernel/cry
--More--(0%)

Il est possible d'obtenir des informations sur un module grâce à la commande modinfo :

[root@centos7 ~]# modinfo bonding
filename:       /lib/modules/3.10.0-327.13.1.el7.x86_64/kernel/drivers/net/bonding/bonding.ko
author:         Thomas Davis, tadavis@lbl.gov and many others
description:    Ethernet Channel Bonding Driver, v3.7.1
version:        3.7.1
license:        GPL
alias:          rtnl-link-bond
rhelversion:    7.2
srcversion:     49765A3F5CDFF2C3DCFD8E6
depends:        
intree:         Y
vermagic:       3.10.0-327.13.1.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        6F:33:78:18:7D:83:CD:18:A4:3B:2E:0A:C4:9A:ED:8A:EF:FC:3A:C7
sig_hashalgo:   sha256
parm:           max_bonds:Max number of bonded devices (int)
parm:           tx_queues:Max number of transmit queues (default = 16) (int)
parm:           num_grat_arp:Number of peer notifications to send on failover event (alias of num_unsol_na) (int)
parm:           num_unsol_na:Number of peer notifications to send on failover event (alias of num_grat_arp) (int)
parm:           miimon:Link check interval in milliseconds (int)
parm:           updelay:Delay before considering link up, in milliseconds (int)
parm:           downdelay:Delay before considering link down, in milliseconds (int)
parm:           use_carrier:Use netif_carrier_ok (vs MII ioctls) in miimon; 0 for off, 1 for on (default) (int)
parm:           mode:Mode of operation; 0 for balance-rr, 1 for active-backup, 2 for balance-xor, 3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, 6 for balance-alb (charp)
parm:           primary:Primary network device to use (charp)
parm:           primary_reselect:Reselect primary slave once it comes up; 0 for always (default), 1 for only if speed of primary is better, 2 for only on active slave failure (charp)
parm:           lacp_rate:LACPDU tx rate to request from 802.3ad partner; 0 for slow, 1 for fast (charp)
parm:           ad_select:803.ad aggregation selection logic; 0 for stable (default), 1 for bandwidth, 2 for count (charp)
parm:           min_links:Minimum number of available links before turning on carrier (int)
parm:           xmit_hash_policy:balance-xor and 802.3ad hashing method; 0 for layer 2 (default), 1 for layer 3+4, 2 for layer 2+3, 3 for encap layer 2+3, 4 for encap layer 3+4 (charp)
parm:           arp_interval:arp interval in milliseconds (int)
parm:           arp_ip_target:arp targets in n.n.n.n form (array of charp)
parm:           arp_validate:validate src/dst of ARP probes; 0 for none (default), 1 for active, 2 for backup, 3 for all (charp)
parm:           arp_all_targets:fail on any/all arp targets timeout; 0 for any (default), 1 for all (charp)
parm:           fail_over_mac:For active-backup, do not set all slaves to the same MAC; 0 for none (default), 1 for active, 2 for follow (charp)
parm:           all_slaves_active:Keep all frames received on an interface by setting active flag for all slaves; 0 for never (default), 1 for always. (int)
parm:           resend_igmp:Number of IGMP membership reports to send on link failure (int)
parm:           packets_per_slave:Packets to send per slave in balance-rr mode; 0 for a random slave, 1 packet per slave (default), >1 packets per slave. (int)
parm:           lp_interval:The number of seconds between instances where the bonding driver sends learning packets to each slaves peer switch. The default is 1. (uint)

Dernièrement, les fichiers dans le repertoire /etc/modprobe.d sont utilisés pour spécifier les options éventuelles à passer aux modules lors de leur chargement ainsi que les alias utilisés pour leur faire référence :

[root@centos7 ~]# ls /etc/modprobe.d
mlx4.conf

[root@centos7 ~]# cat /etc/modprobe.d/mlx4.conf
# This file is intended for users to select the various module options
# they need for the mlx4 driver.  On upgrade of the rdma package,
# any user made changes to this file are preserved.  Any changes made
# to the libmlx4.conf file in this directory are overwritten on
# pacakge upgrade.
#
# Some sample options and what they would do
# Enable debugging output, device managed flow control, and disable SRIOV
#options mlx4_core debug_level=1 log_num_mgm_entry_size=-1 probe_vf=0 num_vfs=0
#
# Enable debugging output and create SRIOV devices, but don't attach any of
# the child devices to the host, only the parent device
#options mlx4_core debug_level=1 probe_vf=0 num_vfs=7
#
# Enable debugging output, SRIOV, and attach one of the SRIOV child devices
# in addition to the parent device to the host
#options mlx4_core debug_level=1 probe_vf=1 num_vfs=7
#
# Enable per priority flow control for send and receive, setting both priority
# 1 and 2 as no drop priorities
#options mlx4_en pfctx=3 pfcrx=3

Compilation et installation du noyau et des modules

Commencez par installer les paquets necessaires :

[root@centos7 ~]# yum install qt3-devel libXi-devel gcc-c++ rpmdevtools ncurses-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.mirrors.ovh.net
 * extras: centos.mirror.fr.planethoster.net
 * updates: mirror1.evolution-host.com
Resolving Dependencies
--> Running transaction check
---> Package gcc-c++.x86_64 0:4.8.5-4.el7 will be installed
--> Processing Dependency: libstdc++-devel = 4.8.5-4.el7 for package: gcc-c++-4.8.5-4.el7.x86_64
---> Package libXi-devel.x86_64 0:1.7.4-2.el7 will be installed
--> Processing Dependency: xorg-x11-proto-devel for package: libXi-devel-1.7.4-2.el7.x86_64
--> Processing Dependency: pkgconfig(xfixes) for package: libXi-devel-1.7.4-2.el7.x86_64
--> Processing Dependency: pkgconfig(xext) for package: libXi-devel-1.7.4-2.el7.x86_64
--> Processing Dependency: pkgconfig(x11) for package: libXi-devel-1.7.4-2.el7.x86_64
--> Processing Dependency: pkgconfig(inputproto) for package: libXi-devel-1.7.4-2.el7.x86_64
---> Package ncurses-devel.x86_64 0:5.9-13.20130511.el7 will be installed
---> Package qt3-devel.x86_64 0:3.3.8b-51.el7 will be installed
--> Processing Dependency: qt3 = 3.3.8b-51.el7 for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: mesa-libGLU-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: mesa-libGL-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libpng-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libmng-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libjpeg-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libXt-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libXrender-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libXrandr-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libXinerama-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libXft-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libXcursor-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libSM-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libICE-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: freetype-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: fontconfig-devel for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libqui.so.1()(64bit) for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libqt-mt.so.3()(64bit) for package: qt3-devel-3.3.8b-51.el7.x86_64
--> Processing Dependency: libmng.so.1()(64bit) for package: qt3-devel-3.3.8b-51.el7.x86_64
---> Package rpmdevtools.noarch 0:8.3-5.el7 will be installed
--> Processing Dependency: rpm-build >= 4.4.2.3 for package: rpmdevtools-8.3-5.el7.noarch
--> Running transaction check
---> Package fontconfig-devel.x86_64 0:2.10.95-7.el7 will be installed
--> Processing Dependency: pkgconfig(expat) for package: fontconfig-devel-2.10.95-7.el7.x86_64
---> Package freetype-devel.x86_64 0:2.4.11-11.el7 will be installed
--> Processing Dependency: zlib-devel for package: freetype-devel-2.4.11-11.el7.x86_64
---> Package libICE-devel.x86_64 0:1.0.9-2.el7 will be installed
---> Package libSM-devel.x86_64 0:1.2.2-2.el7 will be installed
---> Package libX11-devel.x86_64 0:1.6.3-2.el7 will be installed
--> Processing Dependency: pkgconfig(xcb) >= 1.1.92 for package: libX11-devel-1.6.3-2.el7.x86_64
--> Processing Dependency: pkgconfig(xcb) for package: libX11-devel-1.6.3-2.el7.x86_64
---> Package libXcursor-devel.x86_64 0:1.1.14-2.1.el7 will be installed
---> Package libXext-devel.x86_64 0:1.3.3-3.el7 will be installed
---> Package libXfixes-devel.x86_64 0:5.0.1-2.1.el7 will be installed
---> Package libXft-devel.x86_64 0:2.3.2-2.el7 will be installed
---> Package libXinerama-devel.x86_64 0:1.1.3-2.1.el7 will be installed
---> Package libXrandr-devel.x86_64 0:1.4.2-2.el7 will be installed
---> Package libXrender-devel.x86_64 0:0.9.8-2.1.el7 will be installed
---> Package libXt-devel.x86_64 0:1.1.4-6.1.el7 will be installed
---> Package libjpeg-turbo-devel.x86_64 0:1.2.90-5.el7 will be installed
---> Package libmng.x86_64 0:1.0.10-14.el7 will be installed
---> Package libmng-devel.x86_64 0:1.0.10-14.el7 will be installed
---> Package libpng-devel.x86_64 2:1.5.13-7.el7_2 will be installed
---> Package libstdc++-devel.x86_64 0:4.8.5-4.el7 will be installed
---> Package mesa-libGL-devel.x86_64 0:10.6.5-3.20150824.el7 will be installed
--> Processing Dependency: pkgconfig(xshmfence) >= 1.1 for package: mesa-libGL-devel-10.6.5-3.20150824.el7.x86_64
--> Processing Dependency: pkgconfig(libdrm) >= 2.4.38 for package: mesa-libGL-devel-10.6.5-3.20150824.el7.x86_64
--> Processing Dependency: pkgconfig(xxf86vm) for package: mesa-libGL-devel-10.6.5-3.20150824.el7.x86_64
--> Processing Dependency: pkgconfig(xdamage) for package: mesa-libGL-devel-10.6.5-3.20150824.el7.x86_64
--> Processing Dependency: gl-manpages for package: mesa-libGL-devel-10.6.5-3.20150824.el7.x86_64
---> Package mesa-libGLU-devel.x86_64 0:9.0.0-4.el7 will be installed
---> Package qt3.x86_64 0:3.3.8b-51.el7 will be installed
---> Package rpm-build.x86_64 0:4.11.3-17.el7 will be installed
--> Processing Dependency: system-rpm-config for package: rpm-build-4.11.3-17.el7.x86_64
--> Processing Dependency: perl(Thread::Queue) for package: rpm-build-4.11.3-17.el7.x86_64
---> Package xorg-x11-proto-devel.noarch 0:7.7-12.el7 will be installed
--> Running transaction check
---> Package expat-devel.x86_64 0:2.1.0-8.el7 will be installed
---> Package gl-manpages.noarch 0:1.1-7.20130122.el7 will be installed
---> Package libXdamage-devel.x86_64 0:1.1.4-4.1.el7 will be installed
---> Package libXxf86vm-devel.x86_64 0:1.1.3-2.1.el7 will be installed
---> Package libdrm-devel.x86_64 0:2.4.60-3.el7 will be installed
---> Package libxcb-devel.x86_64 0:1.11-4.el7 will be installed
--> Processing Dependency: pkgconfig(xau) >= 0.99.2 for package: libxcb-devel-1.11-4.el7.x86_64
---> Package libxshmfence-devel.x86_64 0:1.2-1.el7 will be installed
---> Package perl-Thread-Queue.noarch 0:3.02-2.el7 will be installed
---> Package redhat-rpm-config.noarch 0:9.1.0-68.el7.centos will be installed
--> Processing Dependency: dwz >= 0.4 for package: redhat-rpm-config-9.1.0-68.el7.centos.noarch
--> Processing Dependency: perl-srpm-macros for package: redhat-rpm-config-9.1.0-68.el7.centos.noarch
---> Package zlib-devel.x86_64 0:1.2.7-15.el7 will be installed
--> Running transaction check
---> Package dwz.x86_64 0:0.11-3.el7 will be installed
---> Package libXau-devel.x86_64 0:1.0.8-2.1.el7 will be installed
---> Package perl-srpm-macros.noarch 0:1-8.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================================================
 Package                                       Arch                            Version                                           Repository                        Size
========================================================================================================================================================================
Installing:
 gcc-c++                                       x86_64                          4.8.5-4.el7                                       base                             7.2 M
 libXi-devel                                   x86_64                          1.7.4-2.el7                                       base                             105 k
 ncurses-devel                                 x86_64                          5.9-13.20130511.el7                               base                             713 k
 qt3-devel                                     x86_64                          3.3.8b-51.el7                                     base                             8.8 M
 rpmdevtools                                   noarch                          8.3-5.el7                                         base                              97 k
Installing for dependencies:
 dwz                                           x86_64                          0.11-3.el7                                        base                              99 k
 expat-devel                                   x86_64                          2.1.0-8.el7                                       base                              56 k
 fontconfig-devel                              x86_64                          2.10.95-7.el7                                     base                             128 k
 freetype-devel                                x86_64                          2.4.11-11.el7                                     base                             356 k
 gl-manpages                                   noarch                          1.1-7.20130122.el7                                base                             994 k
 libICE-devel                                  x86_64                          1.0.9-2.el7                                       base                              49 k
 libSM-devel                                   x86_64                          1.2.2-2.el7                                       base                              13 k
 libX11-devel                                  x86_64                          1.6.3-2.el7                                       base                             980 k
 libXau-devel                                  x86_64                          1.0.8-2.1.el7                                     base                              14 k
 libXcursor-devel                              x86_64                          1.1.14-2.1.el7                                    base                              23 k
 libXdamage-devel                              x86_64                          1.1.4-4.1.el7                                     base                             9.7 k
 libXext-devel                                 x86_64                          1.3.3-3.el7                                       base                              75 k
 libXfixes-devel                               x86_64                          5.0.1-2.1.el7                                     base                              13 k
 libXft-devel                                  x86_64                          2.3.2-2.el7                                       base                              19 k
 libXinerama-devel                             x86_64                          1.1.3-2.1.el7                                     base                              13 k
 libXrandr-devel                               x86_64                          1.4.2-2.el7                                       base                              21 k
 libXrender-devel                              x86_64                          0.9.8-2.1.el7                                     base                              16 k
 libXt-devel                                   x86_64                          1.1.4-6.1.el7                                     base                             445 k
 libXxf86vm-devel                              x86_64                          1.1.3-2.1.el7                                     base                              18 k
 libdrm-devel                                  x86_64                          2.4.60-3.el7                                      base                              92 k
 libjpeg-turbo-devel                           x86_64                          1.2.90-5.el7                                      base                              98 k
 libmng                                        x86_64                          1.0.10-14.el7                                     base                             171 k
 libmng-devel                                  x86_64                          1.0.10-14.el7                                     base                              85 k
 libpng-devel                                  x86_64                          2:1.5.13-7.el7_2                                  updates                          122 k
 libstdc++-devel                               x86_64                          4.8.5-4.el7                                       base                             1.5 M
 libxcb-devel                                  x86_64                          1.11-4.el7                                        base                             1.1 M
 libxshmfence-devel                            x86_64                          1.2-1.el7                                         base                             5.4 k
 mesa-libGL-devel                              x86_64                          10.6.5-3.20150824.el7                             base                             147 k
 mesa-libGLU-devel                             x86_64                          9.0.0-4.el7                                       base                             9.0 k
 perl-Thread-Queue                             noarch                          3.02-2.el7                                        base                              17 k
 perl-srpm-macros                              noarch                          1-8.el7                                           base                             4.6 k
 qt3                                           x86_64                          3.3.8b-51.el7                                     base                             3.5 M
 redhat-rpm-config                             noarch                          9.1.0-68.el7.centos                               base                              77 k
 rpm-build                                     x86_64                          4.11.3-17.el7                                     base                             143 k
 xorg-x11-proto-devel                          noarch                          7.7-12.el7                                        base                             281 k
 zlib-devel                                    x86_64                          1.2.7-15.el7                                      base                              50 k

Transaction Summary
========================================================================================================================================================================
Install  5 Packages (+36 Dependent packages)

Total download size: 27 M
Installed size: 90 M
Is this ok [y/d/N]: y

Il n'est pas conseillé de compiler en tant que root pour des raisons de sécurité. Pour pouvoir utiliser le compte d'un utilisateur pour créer un nouveau noyau, celui-ci doit disposer de plusieurs Go d'espace libre.

Déplacer /home

Arrêtez votre machine virtuelle. Ajoutez un deuxième disque de 20 Go au contrôleur SATA en utilisant la section Stockage des paramètres de la machine virtuelle. Le format du disque doit être vmdk. Nommez ce disque RedHatHome et re-démarrez la machine virtuelle en vous connectant directement en tant que root.

Créez une seule partition sur /dev/sdb :

[root@centos7 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x88708329.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Créez maintenant un système de fichiers ext4 sur /dev/sdb1 :

[root@centos7 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242624 blocks
262131 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

Montez /dev/sdb1 sur /mnt :

[root@centos7 ~]# mount /dev/sdb1 /mnt

Copiez le contenu de /home vers /mnt :

[root@centos7 ~]# cp -a /home/* /mnt

Démontez /dev/sdb1 et déplacez /home vers /root :

[root@centos7 ~]# umount /mnt
[root@centos7 ~]# mv /home /root

Identifiez l'UUID de /dev/sdb1 :

[root@centos7 ~]# ls -l /dev/disk/by-uuid/ | grep sdb1
lrwxrwxrwx. 1 root root 10  9 août  06:47 a5e2457f-7337-41f4-b958-e403eb419f94 -> ../../sdb1

Editez le fichier /etc/fstab :

/etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Apr 30 11:27:02 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=e65fe7da-cda8-4f5a-a827-1b5cabe94bed /                       xfs     defaults        0 0
UUID=2d947276-66e8-41f4-8475-b64b67d7a249 /boot                   xfs     defaults        0 0
UUID=3181601a-7295-4ef0-a92c-f21f76b18e64 swap                    swap    defaults        0 0
UUID=a5e2457f-7337-41f4-b958-e403eb419f94 /home			          ext4	  defaults	      1 2

Créez le point de montage /home :

[root@centos7 ~]# mkdir /home

Montez /dev/sdb1 :

[root@centos7 ~]# mount -a
[root@centos7 ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=236036k,nr_inodes=59009,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/sda2 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel)
mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel)
tmpfs on /tmp type tmpfs (rw,seclabel)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sdb1 on /home type ext4 (rw,relatime,seclabel,data=ordered)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=50080k,mode=700,uid=1000,gid=1000)

Notez la taille de /home :

[trainee@centos7 ~]$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda2          9,8G    4,4G  5,5G  45% /
devtmpfs           231M       0  231M   0% /dev
tmpfs              245M       0  245M   0% /dev/shm
tmpfs              245M    4,7M  240M   2% /run
tmpfs              245M       0  245M   0% /sys/fs/cgroup
tmpfs              245M     72K  245M   1% /tmp
/dev/sda1          197M    197M   20K 100% /boot
/dev/sdb1           20G     65M   19G   1% /home
tmpfs               49M       0   49M   0% /run/user/1000

Fermez la session de root et connectez-vous en tant que trainee.

Créer un Nouveau Noyau

Pour créer l'arborescence de l'environnement de création de paquets dans /home/trainee, utilisez la commande rpmdev-setuptree :

[trainee@centos7 ~]$ rpmdev-setuptree
[trainee@centos7 ~]$ ls -laR rpmbuild/
rpmbuild/:
total 28
drwxrwxr-x.  7 trainee trainee 4096  9 août  06:56 .
drwx------. 15 trainee trainee 4096  9 août  06:56 ..
drwxrwxr-x.  2 trainee trainee 4096  9 août  06:56 BUILD
drwxrwxr-x.  2 trainee trainee 4096  9 août  06:56 RPMS
drwxrwxr-x.  2 trainee trainee 4096  9 août  06:56 SOURCES
drwxrwxr-x.  2 trainee trainee 4096  9 août  06:56 SPECS
drwxrwxr-x.  2 trainee trainee 4096  9 août  06:56 SRPMS

rpmbuild/BUILD:
total 8
drwxrwxr-x. 2 trainee trainee 4096  9 août  06:56 .
drwxrwxr-x. 7 trainee trainee 4096  9 août  06:56 ..

rpmbuild/RPMS:
total 8
drwxrwxr-x. 2 trainee trainee 4096  9 août  06:56 .
drwxrwxr-x. 7 trainee trainee 4096  9 août  06:56 ..

rpmbuild/SOURCES:
total 8
drwxrwxr-x. 2 trainee trainee 4096  9 août  06:56 .
drwxrwxr-x. 7 trainee trainee 4096  9 août  06:56 ..

rpmbuild/SPECS:
total 8
drwxrwxr-x. 2 trainee trainee 4096  9 août  06:56 .
drwxrwxr-x. 7 trainee trainee 4096  9 août  06:56 ..

rpmbuild/SRPMS:
total 8
drwxrwxr-x. 2 trainee trainee 4096  9 août  06:56 .
drwxrwxr-x. 7 trainee trainee 4096  9 août  06:56 ..

Téléchargez le rpm source du noyau :

[trainee@centos7 ~]$ uname -a
Linux centos7.fenestros.loc 3.10.0-327.13.1.el7.x86_64 #1 SMP Thu Mar 31 16:04:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[trainee@centos7 ~]$ wget http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-327.13.1.el7.src.rpm
--2016-08-09 06:57:08--  http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-327.13.1.el7.src.rpm
Résolution de vault.centos.org (vault.centos.org)... 88.208.217.170, 2a00:f10:10b:13::10
Connexion vers vault.centos.org (vault.centos.org)|88.208.217.170|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 83047820 (79M) [application/x-rpm]
Sauvegarde en : «kernel-3.10.0-327.13.1.el7.src.rpm»

100%[==============================================================================================================================>] 83 047 820   496KB/s   ds 2m 52s 

2016-08-09 07:00:00 (471 KB/s) - «kernel-3.10.0-327.13.1.el7.src.rpm» sauvegardé [83047820/83047820]

Installez maintenant les dépendances pour le rpm source en tant que root :

[trainee@centos7 ~]$ su -
Mot de passe : fenestros
[root@centos7 ~]# yum-builddep /home/trainee/kernel-3.10.0-327.13.1.el7.src.rpm 
Loaded plugins: fastestmirror, langpacks
Enabling base-source repository
Enabling extras-source repository
Enabling updates-source repository
base-source                                                                                                                                      | 2.9 kB  00:00:00     
extras-source                                                                                                                                    | 2.9 kB  00:00:00     
updates-source                                                                                                                                   | 2.9 kB  00:00:00     
(1/3): extras-source/7/primary_db                                                                                                                |  43 kB  00:00:00     
(2/3): base-source/7/primary_db                                                                                                                  | 949 kB  00:00:00     
(3/3): updates-source/7/primary_db                                                                                                               | 140 kB  00:00:00     
Loading mirror speeds from cached hostfile
 * base: centos.mirrors.ovh.net
 * extras: centos.mirror.fr.planethoster.net
 * updates: mirror1.evolution-host.com
Checking for new repos for mirrors
Getting requirements for kernel-3.10.0-327.13.1.el7.src
 --> Already installed : kmod-20-5.el7.x86_64
 --> Already installed : patch-2.7.1-8.el7.x86_64
 --> Already installed : bash-4.2.46-19.el7.x86_64
 --> Already installed : coreutils-8.22-15.el7_2.1.x86_64
 --> Already installed : 2:tar-1.26-29.el7.x86_64
 --> Already installed : xz-5.1.2-12alpha.el7.x86_64
 --> Already installed : 1:findutils-4.5.11-5.el7.x86_64
 --> Already installed : gzip-1.5-8.el7.x86_64
 --> m4-1.4.16-10.el7.x86_64
 --> Already installed : 4:perl-5.16.3-286.el7.x86_64
 --> Already installed : 1:make-3.82-21.el7.x86_64
 --> Already installed : diffutils-3.3-4.el7.x86_64
 --> Already installed : gawk-4.0.2-4.el7.x86_64
 --> Already installed : gcc-4.8.5-4.el7.x86_64
 --> Already installed : binutils-2.23.52.0.1-55.el7.x86_64
 --> Already installed : redhat-rpm-config-9.1.0-68.el7.centos.noarch
 --> Already installed : hostname-3.13-3.el7.x86_64
 --> Already installed : net-tools-2.0-0.17.20131004git.el7.x86_64
 --> Already installed : bc-1.06.95-13.el7.x86_64
 --> xmlto-0.0.25-7.el7.x86_64
 --> asciidoc-8.6.8-5.el7.noarch
 --> Already installed : 1:openssl-1.0.1e-51.el7_2.4.x86_64
 --> hmaccalc-0.9.13-4.el7.x86_64
 --> python-devel-2.7.5-34.el7.x86_64
 --> newt-devel-0.52.15-4.el7.x86_64
 --> perl-ExtUtils-Embed-1.30-286.el7.noarch
 --> Already installed : rpm-build-4.11.3-17.el7.x86_64
 --> Already installed : elfutils-0.163-3.el7.x86_64
--> Running transaction check
---> Package asciidoc.noarch 0:8.6.8-5.el7 will be installed
--> Processing Dependency: source-highlight for package: asciidoc-8.6.8-5.el7.noarch
--> Processing Dependency: graphviz for package: asciidoc-8.6.8-5.el7.noarch
--> Processing Dependency: docbook-style-xsl for package: asciidoc-8.6.8-5.el7.noarch
---> Package hmaccalc.x86_64 0:0.9.13-4.el7 will be installed
---> Package m4.x86_64 0:1.4.16-10.el7 will be installed
---> Package newt-devel.x86_64 0:0.52.15-4.el7 will be installed
--> Processing Dependency: slang-devel for package: newt-devel-0.52.15-4.el7.x86_64
---> Package perl-ExtUtils-Embed.noarch 0:1.30-286.el7 will be installed
--> Processing Dependency: perl-devel for package: perl-ExtUtils-Embed-1.30-286.el7.noarch
---> Package python-devel.x86_64 0:2.7.5-34.el7 will be installed
---> Package xmlto.x86_64 0:0.0.25-7.el7 will be installed
--> Processing Dependency: text-www-browser for package: xmlto-0.0.25-7.el7.x86_64
--> Processing Dependency: flex for package: xmlto-0.0.25-7.el7.x86_64
--> Processing Dependency: docbook-dtds for package: xmlto-0.0.25-7.el7.x86_64
--> Running transaction check
---> Package docbook-dtds.noarch 0:1.0-60.el7 will be installed
--> Processing Dependency: sgml-common for package: docbook-dtds-1.0-60.el7.noarch
---> Package docbook-style-xsl.noarch 0:1.78.1-3.el7 will be installed
---> Package flex.x86_64 0:2.5.37-3.el7 will be installed
---> Package graphviz.x86_64 0:2.30.1-19.el7 will be installed
--> Processing Dependency: libXaw.so.7()(64bit) for package: graphviz-2.30.1-19.el7.x86_64
---> Package lynx.x86_64 0:2.8.8-0.3.dev15.el7 will be installed
---> Package perl-devel.x86_64 4:5.16.3-286.el7 will be installed
--> Processing Dependency: systemtap-sdt-devel for package: 4:perl-devel-5.16.3-286.el7.x86_64
--> Processing Dependency: perl(ExtUtils::ParseXS) for package: 4:perl-devel-5.16.3-286.el7.x86_64
--> Processing Dependency: perl(ExtUtils::MakeMaker) for package: 4:perl-devel-5.16.3-286.el7.x86_64
--> Processing Dependency: perl(ExtUtils::Installed) for package: 4:perl-devel-5.16.3-286.el7.x86_64
--> Processing Dependency: libdb-devel for package: 4:perl-devel-5.16.3-286.el7.x86_64
--> Processing Dependency: gdbm-devel for package: 4:perl-devel-5.16.3-286.el7.x86_64
---> Package slang-devel.x86_64 0:2.2.4-11.el7 will be installed
---> Package source-highlight.x86_64 0:3.1.6-6.el7 will be installed
--> Processing Dependency: ctags for package: source-highlight-3.1.6-6.el7.x86_64
--> Processing Dependency: libboost_regex.so.1.53.0()(64bit) for package: source-highlight-3.1.6-6.el7.x86_64
--> Running transaction check
---> Package boost-regex.x86_64 0:1.53.0-25.el7 will be installed
---> Package ctags.x86_64 0:5.8-13.el7 will be installed
---> Package gdbm-devel.x86_64 0:1.10-8.el7 will be installed
---> Package libXaw.x86_64 0:1.0.12-5.el7 will be installed
---> Package libdb-devel.x86_64 0:5.3.21-19.el7 will be installed
---> Package perl-ExtUtils-Install.noarch 0:1.58-286.el7 will be installed
---> Package perl-ExtUtils-MakeMaker.noarch 0:6.68-3.el7 will be installed
--> Processing Dependency: perl(Test::Harness) for package: perl-ExtUtils-MakeMaker-6.68-3.el7.noarch
--> Processing Dependency: perl(ExtUtils::Manifest) for package: perl-ExtUtils-MakeMaker-6.68-3.el7.noarch
---> Package perl-ExtUtils-ParseXS.noarch 1:3.18-2.el7 will be installed
---> Package sgml-common.noarch 0:0.6.3-39.el7 will be installed
---> Package systemtap-sdt-devel.x86_64 0:2.8-10.el7 will be installed
--> Running transaction check
---> Package perl-ExtUtils-Manifest.noarch 0:1.61-244.el7 will be installed
---> Package perl-Test-Harness.noarch 0:3.28-3.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================================================
 Package                                           Arch                             Version                                        Repository                      Size
========================================================================================================================================================================
Installing:
 asciidoc                                          noarch                           8.6.8-5.el7                                    base                           251 k
 hmaccalc                                          x86_64                           0.9.13-4.el7                                   base                            26 k
 m4                                                x86_64                           1.4.16-10.el7                                  base                           256 k
 newt-devel                                        x86_64                           0.52.15-4.el7                                  base                            51 k
 perl-ExtUtils-Embed                               noarch                           1.30-286.el7                                   base                            49 k
 python-devel                                      x86_64                           2.7.5-34.el7                                   base                           391 k
 xmlto                                             x86_64                           0.0.25-7.el7                                   base                            50 k
Installing for dependencies:
 boost-regex                                       x86_64                           1.53.0-25.el7                                  base                           294 k
 ctags                                             x86_64                           5.8-13.el7                                     base                           155 k
 docbook-dtds                                      noarch                           1.0-60.el7                                     base                           226 k
 docbook-style-xsl                                 noarch                           1.78.1-3.el7                                   base                           2.0 M
 flex                                              x86_64                           2.5.37-3.el7                                   base                           292 k
 gdbm-devel                                        x86_64                           1.10-8.el7                                     base                            47 k
 graphviz                                          x86_64                           2.30.1-19.el7                                  base                           1.3 M
 libXaw                                            x86_64                           1.0.12-5.el7                                   base                           190 k
 libdb-devel                                       x86_64                           5.3.21-19.el7                                  base                            38 k
 lynx                                              x86_64                           2.8.8-0.3.dev15.el7                            base                           1.4 M
 perl-ExtUtils-Install                             noarch                           1.58-286.el7                                   base                            73 k
 perl-ExtUtils-MakeMaker                           noarch                           6.68-3.el7                                     base                           275 k
 perl-ExtUtils-Manifest                            noarch                           1.61-244.el7                                   base                            31 k
 perl-ExtUtils-ParseXS                             noarch                           1:3.18-2.el7                                   base                            77 k
 perl-Test-Harness                                 noarch                           3.28-3.el7                                     base                           302 k
 perl-devel                                        x86_64                           4:5.16.3-286.el7                               base                           452 k
 sgml-common                                       noarch                           0.6.3-39.el7                                   base                            55 k
 slang-devel                                       x86_64                           2.2.4-11.el7                                   base                            91 k
 source-highlight                                  x86_64                           3.1.6-6.el7                                    base                           611 k
 systemtap-sdt-devel                               x86_64                           2.8-10.el7                                     base                            65 k

Transaction Summary
========================================================================================================================================================================
Install  7 Packages (+20 Dependent packages)

Total download size: 9.0 M
Installed size: 43 M
Is this ok [y/d/N]: y

Installez maintenant le paquet kernel-3.10.0-327.13.1.el7.src.rpm :

[root@centos7 ~]# exit
logout
[trainee@centos7 ~]$ rpm -Uvh kernel-3.10.0-327.13.1.el7.src.rpm 
Mise à jour / installation...
   1:kernel-3.10.0-327.13.1.el7       ################################# [100%]
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root
attention : utilisateur builder inexistant - utilisation de root
attention : groupe builder inexistant - utilisation de root

Les erreurs sont sans importance.

Préparer l'Arborescence Source du Noyau

Naviguez vers le repertoire ~/rpmbuild/SPECS et utilisez la commande rpmbuild pour préparer l'arborescence source du noyau :

[trainee@centos7 ~]$ cd ~/rpmbuild/SPECS
[trainee@centos7 SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
Construction pour plate-formes cibles: x86_64
Construction pour cible x86_64
erreur : Dépendances de construction manquantes:
	pesign >= 0.109-4 est nécessaire pour kernel-3.10.0-327.13.1.el7.x86_64
	elfutils-devel est nécessaire pour kernel-3.10.0-327.13.1.el7.x86_64
	binutils-devel est nécessaire pour kernel-3.10.0-327.13.1.el7.x86_64
	bison est nécessaire pour kernel-3.10.0-327.13.1.el7.x86_64
	audit-libs-devel est nécessaire pour kernel-3.10.0-327.13.1.el7.x86_64
	numactl-devel est nécessaire pour kernel-3.10.0-327.13.1.el7.x86_64
	pciutils-devel est nécessaire pour kernel-3.10.0-327.13.1.el7.x86_64

Notez qu'il existe toujours des dépendances manquantes !

Redevenez root et installez les dépendances :

[trainee@centos7 SPECS]$ cd -
/home/trainee
[trainee@centos7 ~]$ su -
Mot de passe : 
Dernière connexion : lundi  8 août 2016 à 16:39:54 CEST sur pts/0
[root@centos7 ~]# yum install elfutils-devel binutils-devel bison audit-libs-devel numactl-devel pciutils-devel pesign
...

Vous pouvez maintenant utilisez la commande rpmbuild pour préparer l'arborescence source du noyau :

[root@centos7 ~]# exit
logout
[trainee@centos7 ~]$ cd ~/rpmbuild/SPECS
[trainee@centos7 SPECS]$ rpmbuild -bp --target=$(uname -m) kernel.spec
Construction pour plate-formes cibles: x86_64
Construction pour cible x86_64
Exécution_de(%prep) : /bin/sh -e /var/tmp/rpm-tmp.xP6OkC
+ umask 022
+ cd /home/trainee/rpmbuild/BUILD
+ patch_command='patch -p1 -F1 -s'
+ cd /home/trainee/rpmbuild/BUILD
+ rm -rf kernel-3.10.0-327.13.1.el7
+ /usr/bin/mkdir -p kernel-3.10.0-327.13.1.el7
+ cd kernel-3.10.0-327.13.1.el7
+ /usr/bin/xz -dc /home/trainee/rpmbuild/SOURCES/linux-3.10.0-327.13.1.el7.tar.xz
+ /usr/bin/tar -xf -
...

A l'issu du processus, examinez l'arborescence :

[trainee@centos7 SPECS]$ ls -la ~/rpmbuild/BUILD/kernel-3.10.0-327.13.1.el7/linux-3.10.0-327.13.1.el7.x86_64/
total 824
drwxr-xr-x.  24 trainee trainee   4096  8 août  16:52 .
drwxr-xr-x.   3 trainee trainee   4096  8 août  16:52 ..
drwxr-xr-x.  32 trainee trainee   4096  8 août  16:52 arch
drwxr-xr-x.   3 trainee trainee   4096 29 févr. 18:35 block
-rw-r--r--.   1 trainee trainee 126411  8 août  16:52 .config
-rw-r--r--.   1 trainee trainee 126420  8 août  16:52 .config.old
drwxr-xr-x.   2 trainee trainee   4096  8 août  16:52 configs
-rw-r--r--.   1 trainee trainee  18693 29 févr. 18:35 COPYING
-rw-r--r--.   1 trainee trainee  95317 29 févr. 18:35 CREDITS
drwxr-xr-x.   4 trainee trainee   4096 29 févr. 18:35 crypto
drwxr-xr-x. 101 trainee trainee  12288  8 août  16:52 Documentation
drwxr-xr-x. 114 trainee trainee   4096 29 févr. 18:35 drivers
drwxr-xr-x.  36 trainee trainee   4096  8 août  16:52 firmware
drwxr-xr-x.  74 trainee trainee   4096 29 févr. 18:35 fs
-rw-r--r--.   1 trainee trainee     46 29 févr. 18:35 .gitattributes
drwxr-xr-x.  27 trainee trainee   4096  8 août  16:52 include
drwxr-xr-x.   2 trainee trainee   4096 29 févr. 18:35 init
drwxr-xr-x.   2 trainee trainee   4096 29 févr. 18:35 ipc
-rw-r--r--.   1 trainee trainee   2536 29 févr. 18:35 Kbuild
-rw-r--r--.   1 trainee trainee    505 29 févr. 18:35 Kconfig
drwxr-xr-x.  11 trainee trainee   4096  8 août  16:52 kernel
drwxr-xr-x.  10 trainee trainee   4096  8 août  16:52 lib
-rw-r--r--.   1 trainee trainee   4465 29 févr. 18:35 .mailmap
-rw-r--r--.   1 trainee trainee 260223 29 févr. 18:35 MAINTAINERS
-rw-r--r--.   1 trainee trainee  49887 29 févr. 18:35 Makefile
drwxr-xr-x.   2 trainee trainee   4096 29 févr. 18:35 mm
drwxr-xr-x.  56 trainee trainee   4096 29 févr. 18:35 net
-rw-r--r--.   1 trainee trainee  18736 29 févr. 18:35 README
-rw-r--r--.   1 trainee trainee   7485 29 févr. 18:35 REPORTING-BUGS
drwxr-xr-x.  12 trainee trainee   4096 29 févr. 18:35 samples
-rw-r--r--.   1 trainee trainee      0  8 août  16:52 .scmversion
drwxr-xr-x.  13 trainee trainee   4096  8 août  16:52 scripts
drwxr-xr-x.   9 trainee trainee   4096 29 févr. 18:35 security
drwxr-xr-x.  23 trainee trainee   4096 29 févr. 18:35 sound
drwxr-xr-x.  19 trainee trainee   4096 29 févr. 18:35 tools
drwxr-xr-x.   2 trainee trainee   4096  8 août  16:52 usr
drwxr-xr-x.   3 trainee trainee   4096 29 févr. 18:35 virt

A l'intérieur de ce répertoire se trouve le fichier .config utilisé pour compiler le noyau :

[trainee@centos7 SPECS]$ more ~/rpmbuild/BUILD/kernel-3.10.0-327.13.1.el7/linux-3.10.0-327.13.1.el7.x86_64/.config
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 3.10.0 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"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_MMU=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_ARCH_HAS_CPU_AUTOPROBE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ZONE_DMA32=y
CONFIG_AUDIT_ARCH=y
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_HAVE_INTEL_TXT=y
CONFIG_X86_64_SMP=y
CONFIG_X86_HT=y
CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11"
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_EXTABLE_SORT=y

#
--Plus--(1%)

Ce fichier est généré par une des trois commandes suivantes et ne doit pas être édité manuellement :

  • make config
  • make menuconfig
  • make xconfig

Dans ce fichier, vous pouvez constater la présence de lignes correspondantes à des fonctionalités suivies par une lettre ou une valeur. Dans le cas d'une lettre, la signification est la suivante :

  • y
    • la fonctionalité est incluse dans le noyau monolithique ou dans le cas d'une dépendance d'un module, dans le module concerné,
  • m
    • la fonctionalité est incluse en tant que module,
  • n
    • la fonctionalité n'est pas incluse. Cette option est rarement visible car dans bien les cas, la fonctionalité est simplement commentée dans le fichier lui-même.

Le fichier Makefile contient le nom du noyau et spécifie les informations suivantes :

  • VERSION,
  • PATCHLEVEL,
  • SUBLEVEL,
  • EXTRAVERSION.

Les trois premières informations sont gérées par kernel.org et Linus Torvalds en personne tandis que l'EXTRAVERSION est gérée par Red Hat :

[trainee@centos7 SPECS]$ more ~/rpmbuild/BUILD/kernel-3.10.0-327.13.1.el7/linux-3.10.0-327.13.1.el7.x86_64/Makefile 
VERSION = 3
PATCHLEVEL = 10
SUBLEVEL = 0
EXTRAVERSION =
NAME = Unicycling Gorilla
RHEL_MAJOR = 7
RHEL_MINOR = 2
RHEL_RELEASE = 327.13.1
RHEL_DRM_VERSION = 4
RHEL_DRM_PATCHLEVEL = 1
RHEL_DRM_SUBLEVEL = 0

# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
# More info can be located in ./README
# Comments in this file are targeted only to the developer, do not
# expect to learn how to build the kernel reading this file.

# Do not:
# o  use make's built-in rules and variables
#    (this increases performance and avoids hard-to-debug behaviour);
# o  print "Entering directory ...";
MAKEFLAGS += -rR --no-print-directory

# Avoid funny character set dependencies
unexport LC_ALL
LC_COLLATE=C
LC_NUMERIC=C
export LC_COLLATE LC_NUMERIC

# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.
#
# Most importantly: sub-Makefiles should only ever modify files in
# their own directory. If in some directory we have a dependency on
# a file in another dir (which doesn't happen often, but it's often
# unavoidable when linking the built-in.o targets which finally
# turn into vmlinux), we will call a sub make in that other dir, and
# after that we are sure that everything which is in that other dir
# is now up to date.
#
# The only cases where we need to modify files which have global
# effects are thus separated out and done before the recursive
# descending is started. They are now explicitly listed as the
# prepare rule.
--Plus--(2%)

La version 2.6 du noyau a vu le jour en 2003. Les SUBLEVEL se suivaient régulièrement. Avec la version 2.6 du noyau, la valeur paire du PATCHLEVEL indiquait que le noyau était stable. Quand vous recompilez le noyau à partir des sources, vous devez modifier la valeur de l'EXTRAVERSION. Le passage à la version 3.0 fut décidé par Linus Torvalds à l'occasion des 20 ans du noyau Linux.

Utilisez maintenant la commande make oldconfig :

[trainee@centos7 SPECS]$ cd ~/rpmbuild/BUILD/kernel-3.10.0-327.13.1.el7/linux-3.10.0-327.13.1.el7.x86_64
[trainee@centos7 linux-3.10.0-327.13.1.el7.x86_64]$ make oldconfig
scripts/kconfig/conf --oldconfig Kconfig
#
# configuration written to .config
#

Cette commande lit le fichier .config du noyau actuel et le compare avec celui des sources du noyau. S'il existent des nouvelles configurations à effectuer dans les sources du noyau, la commande vous pose des questions.

Paramétrage du noyau

Après avoir modifié la configuration du noyau selon vos besoins en utilisant soit la commande menuconfig soit la commande xconfig (pas necéssaire pour cet exemple), insérez la sortie de la commande uname -i sur la première ligne du fichier .config :

[trainee@centos7 linux-3.10.0-327.13.1.el7.x86_64]$ uname -i
x86_64
[trainee@centos7 linux-3.10.0-327.13.1.el7.x86_64]$ vi .config
[trainee@centos7 linux-3.10.0-327.13.1.el7.x86_64]$ head .config
# x86_64
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 3.10.0 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"

Renommez le fichier .config en le plaçant dans le répertoire ~/rpmbuild/SOURCES/ :

[trainee@centos7 linux-3.10.0-327.13.1.el7.x86_64]$ cp .config ~/rpmbuild/SOURCES/config-`uname -m`-generic
[trainee@centos7 linux-3.10.0-327.13.1.el7.x86_64]$ ls ~/rpmbuild/SOURCES
centos.cer             cpupower.service            kernel-3.10.0-ppc64-debug.config    kernel-3.10.0-x86_64.config        Module.kabi_ppc64    x509.genkey
centos-kpatch.x509     debrand-rh-i686-cpu.patch   kernel-3.10.0-ppc64le.config        kernel-3.10.0-x86_64-debug.config  Module.kabi_ppc64le
centos-ldup.x509       debrand-rh_taint.patch      kernel-3.10.0-ppc64le-debug.config  kernel-abi-whitelists-327.tar.bz2  Module.kabi_s390x
check-kabi             debrand-single-cpu.patch    kernel-3.10.0-s390x.config          linux-3.10.0-327.13.1.el7.tar.xz   Module.kabi_x86_64
config-x86_64-generic  extra_certificates          kernel-3.10.0-s390x-debug.config    linux-kernel-test.patch            secureboot.cer
cpupower.config        kernel-3.10.0-ppc64.config  kernel-3.10.0-s390x-kdump.config    Makefile.common                    sign-modules

Pour un noyau 32 bits, remplacez x86_64 par i386 et config-`uname -m`-generic par config-x86-32-generic.

Editez la directive buildid dans le fichier ~/rpmbuild/SPECS/kernel.spec :

[trainee@centos7 linux-3.10.0-327.13.1.el7.x86_64]$ cd ~/rpmbuild/SPECS
[trainee@centos7 SPECS]$ vi kernel.spec
[trainee@centos7 SPECS]$ head kernel.spec 
# We have to override the new %%install behavior because, well... the kernel is special.
%global __spec_install_pre %{___build_pre}

Summary: The Linux kernel

%define buildid .i2tch

# For a kernel released for public testing, released_kernel should be 1.
# For internal testing builds during development, it should be 0.
%global released_kernel 1

Compiler le Noyau

La compilation du noyau peut prendre beaucoup de temps. La commande utilisée est la suivante :

[trainee@centos7 SPECS]$ rpmbuild -bb --target=`uname -m` kernel.spec

A l'issu du processus, les rpm se trouvent dans le répertoire /home/trainee/rpmbuild/RPMS/x86_64/ :

...
Vérification des fichiers non empaquetés : /usr/lib/rpm/check-files /home/trainee/rpmbuild/BUILDROOT/kernel-3.10.0-327.13.1.el7.i2tch.x86_64
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-headers-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-debuginfo-common-x86_64-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/perf-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/perf-debuginfo-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/python-perf-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/python-perf-debuginfo-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-tools-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-tools-libs-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-tools-libs-devel-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-tools-debuginfo-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-devel-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-debuginfo-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-debug-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-debug-devel-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Écrit : /home/trainee/rpmbuild/RPMS/x86_64/kernel-debug-debuginfo-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Exécution_de(%clean) : /bin/sh -e /var/tmp/rpm-tmp.HNhcuC
+ umask 022
+ cd /home/trainee/rpmbuild/BUILD
+ cd kernel-3.10.0-327.13.1.el7
+ rm -rf /home/trainee/rpmbuild/BUILDROOT/kernel-3.10.0-327.13.1.el7.i2tch.x86_64
+ exit 0

Notez que la génération du nouveau noyau a consommé plus de 9 Go d'espace disque :

[trainee@centos7 SPECS]$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda2          9,8G    4,3G  5,5G  44% /
devtmpfs           231M       0  231M   0% /dev
tmpfs              245M       0  245M   0% /dev/shm
tmpfs              245M    4,7M  240M   2% /run
tmpfs              245M       0  245M   0% /sys/fs/cgroup
tmpfs              245M     40K  245M   1% /tmp
/dev/sdb1           20G    9,5G  9,2G  51% /home
/dev/sda1          197M    197M   20K 100% /boot
tmpfs               49M       0   49M   0% /run/user/1000

Installer le Nouveau Noyau

Installez maintenant les deux paquets kernel-devel et kernel-headers :

[root@centos7 ~]# rpm -ivh /home/trainee/rpmbuild/RPMS/x86_64/kernel-devel-3.10.0-327.13.1.el7.i2tch.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-devel-3.10.0-327.13.1.el7.################################# [100%]
[root@centos7 ~]# rpm -ivh /home/trainee/rpmbuild/RPMS/x86_64/kernel-headers-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-headers-3.10.0-327.13.1.el################################# [100%]

Installez en dernier le nouveau noyau avec la commande rpm :

[root@centos7 ~]# rpm -ivh --force --nodeps /home/trainee/rpmbuild/RPMS/x86_64/kernel-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Preparing...                          ################################# [100%]
	installing package kernel-3.10.0-327.13.1.el7.i2tch.x86_64 needs 30MB on the /boot filesystem

Important : Notez le message d'erreur concernant le manque d'espace disponible sur /boot.

Lister maintenant les noyaux installés :

[root@centos7 ~]# rpm -qa | grep kernel-3
kernel-3.10.0-327.el7.x86_64
kernel-3.10.0-327.13.1.el7.x86_64

Un noyau se désinstalle comme tout autre paquet :

[root@centos7 ~]# yum remove kernel-3.10.0-327.el7.x86_64
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:3.10.0-327.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================================================
 Package                            Arch                               Version                                      Repository                                     Size
========================================================================================================================================================================
Removing:
 kernel                             x86_64                             3.10.0-327.el7                               @base/$releasever                             136 M

Transaction Summary
========================================================================================================================================================================
Remove  1 Package

Installed size: 136 M
Is this ok [y/N]: y

Installez le nouveau noyau avec la commande rpm :

[root@centos7 ~]# rpm -ivh --force --nodeps /home/trainee/rpmbuild/RPMS/x86_64/kernel-3.10.0-327.13.1.el7.i2tch.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-3.10.0-327.13.1.el7.i2tch ################################# [100%]

Lister maintenant les noyaux installés :

[root@centos7 ~]# rpm -qa | grep kernel-3
kernel-3.10.0-327.13.1.el7.i2tch.x86_64
kernel-3.10.0-327.13.1.el7.x86_64

Constatez la création d'un nouveau grub.cfg :

[root@centos7 ~]# grep i2tch /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-327.13.1.el7.i2tch.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-e65fe7da-cda8-4f5a-a827-1b5cabe94bed' {
	linux16 /vmlinuz-3.10.0-327.13.1.el7.i2tch.x86_64 root=UUID=e65fe7da-cda8-4f5a-a827-1b5cabe94bed ro rhgb quiet LANG=en_GB.UTF-8
	initrd16 /initramfs-3.10.0-327.13.1.el7.i2tch.x86_64.img

Important : Re-démarrez votre VM en utilisant le nouveau noyau.

Vérifiez ensuite l'utilisation du nouveau noyau :

[root@centos7 ~]# uname -r
3.10.0-327.13.1.el7.i2tch.x86_64

<html>

Copyright © 2004-2017 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”><img alt=“Licence Creative Commons” style=“border-width:0” src=“http://i.creativecommons.org/l/by-nc-nd/3.0/fr/88x31.png” /></a><br />Ce(tte) oeuvre est mise à disposition selon les termes de la <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”>Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 France</a>.

</html>


Menu