Installation et configuration de Debian 12

sur un serveur dédié ou un VPS

Par Mezalor le 16 août 2023

Installation de Debian (UEFI)

Étape 0 : Installation automatique

Après avoir commandé la location d'un serveur dédié ou d'un VPS, l'installation se fait en général de manière automatique. On peut alors vérifier le matériel et tester les performances du serveur sur cette installation comme présenté dans l'appendice. Dans les parties suivantes on réinstallera complètement le système pour pouvoir configurer plus finement notre système.

Si votre hébergeur vous en donne la possibilité, vous pouvez également activer et configurer le pare-feu pour n'autoriser, le temps de la configuration, que votre adresse IP. Vous serez comme ça le seul à avoir accès à votre serveur durant sa configuration.

Étape 1 : Connexion au mode Rescue

Pour installer Debian sur le serveur, on pourrait simplement utiliser les outils fournis par l’hébergeur via le panel d'administration. L'avantage de cette méthode est la simplicité (en général en 2/3 clics le système est installé). L’inconvénient est qu'on ne maîtrise pas suffisamment l'installation. D'une part certains hébergeurs installent une version modifiée de Debian en rajoutant leurs outils (qu'on ne veut pas forcément) et d'autres ne proposent pas assez de personnalisation lors de l'installation. Par exemple on a rarement le choix du partitionnement.

Pour ces raisons on va décider d'installer manuellement Debian plutôt que d’utiliser l'installation via le panel de l’hébergeur. Pour cela il faut démarrer le serveur en mode secours (Rescue Mode). Cette option est en général disponible dans le panel de configuration de l'hébergeur (c'est une possibilité souvent proposée par KVM).
Un mail sera envoyé avec les identifiants pour se connecter à une petite machine ayant un accès total au disque du serveur. On se connecte alors à cette machine par SSH.

ssh-keygen -f "/home/alice/.ssh/known_hosts" -R "10.11.12.13"
ssh root@10.11.12.13
The authenticity of host '10.11.12.13 (10.11.12.13)' can't be established.
ED25519 key fingerprint is SHA256:kfwAgS98NDwOAPpkfm5uX55vF6J92T7na9DHKd9W/7I.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.11.12.13' (ED25519) to the list of known hosts.
root@10.11.12.13's password:
Linux vps-b0bca338 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64

GNU/Linux, to the rescue!

Server:   vps-b0bca338
Login:    root
Password: 8agN5cMCU7a2

Étape 2 : Partitionnement du disque

On commence par déterminer les disques et partitions déjà existante pour trouver le disque du serveur.

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:16   0  2.5G  0 disk
└─sda1   8:17   0  2.5G  0 part /
sdb      8:0    0  100G  0 disk
└─sdb1   8:1    0  100G  0 part

Ici, au vue de la capacité, le disque du serveur est /dev/sdb.

Si on souhaite complètement effacer le disque on peut le remplir de zéro et/ou le remplir par des données aléatoire. A priori cela n'a pas beaucoup d’intérêt et est assez long. Cela peut quand même avoir une utilité pour effacer complètement des données sensibles sur le disque ou lorsque l'on chiffre le disque (ou une partition) pour pas qu'un adversaire puisse savoir la quantité de données chiffrées écrites sur le disque. En résumé cette étape est totalement facultative et prend du temps.

dd if=/dev/zero of=/dev/sdb status=progress
dd if=/dev/urandom of=/dev/sdb status=progress

Pour le partitionnement du disque on va choisir une table de partition au format GPT puisque le serveur supporte UEFI.
On suppose dans cet exemple disposer d'un disque dur de 100 Gio. On partitionne ainsi notre disque dur.

Description Taille Système de fichiers Options de montage Code gdisk (GUID)
/boot (EFI) 550 Mio FAT32 noauto ef00
/ 3 Gio ext4 8304
/var 3 Gio ext4 nosuid, nodev, noexec 8310
/var/log 10 Gio ext4 nosuid, nodev, noexec 8300
/usr 5 Gio ext4 nodev 8300
/opt 2 Gio ext4 nosuid, nodev 8300
/home 10 Gio ext4 nosuid, nodev, noexec 8302
/tmp tmpfs nosuid, nodev, noexec
SWAP 4 Gio swap 8200
LUKS ~ 60 Gio luks - ext4 nosuid, nodev, noexec 8309

C'est pour une question de sécurité qu'on décide de faire autant de partition. D'une part cela protège le système de la saturation du disque. Par exemple une attaque DDOS pourrait remplir le répertoire /var/log qui, s'il était sur la même partition que la racine, pourrait rendre le système peu utilisable (voir ici). D'autre part cela permet d'utiliser des options de montage différents pour chaque partition [ANSSI R28].

Pour plus de souplesse on pourrait utiliser LVM qui permettrait de modifier simplement la taille des partitions si on s’apercevait, durant l'utilisation du serveur, que certaines partitions sont trop petites ou trop grandes. Ce n'est pas le choix fait ici puisque cela rajouterait une couche logiciel ce qu'on essaye d'éviter par le principe de minimisation. De plus le partitionnement proposé a prouvé son efficacité pour l'utilisation souhaité du serveur. Finalement si on dispose d'une grande quantité d'espace disque, on peut également laisser de l'espace entre chaque partition dans le cas où l'on souhaiterait en agrandir certaine par la suite.

La dernière partition de 60 Gio sera une partition chiffrée sur laquelle on mettra les données de la partie serveur de stockage ainsi que les données personnelles des utilisateurs des sites web.
On pourrait aussi décider de chiffrer complètement tout le système et de ne laisser que la partition /boot en clair. Le démarrage sur la partition chiffrée se ferait via KVM. Ici ce n'est pas le choix qui est fait car en cas de redémarrage intempestif on veut que le serveur web soit opérationnel sans intervention humaine. De plus le chiffrement du système pourrait réduire les performances du serveur.

Pour le partitionnement on choisit l'outil gdisk.

gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help):

On commence par créer une nouvelle table de partition GPT avec la commande o. Ensuite pour créer une nouvelle partition on utilise la commande n. Pour chaque nouvelle partition il faudra indiquer sa position de début et de fin sur le disque. Par défaut il faut indiquer des positions absolues mais on peut utiliser des positions relatives avec les symbole + et -. Par exemple pour commencer une nouvelle partition de taille 12 Gio à 500 Mio de la précédente il faut utiliser +500M puis +12G. L'outil gdisk vérifie l'alignement des partitions. Il faudra ensuite indiquer le type de la partition (c'est-à-dire son GUID). Pour plus de détails voir ici.

Voici la liste des commandes pour effectuer le partitionnement proposé précédemment.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-209715156, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-209715156, default = 209715156) or {+-}size{KMGTP}: +550M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI system partition'

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-209715156, default = 1128448) or {+-}size{KMGTP}:
Last sector (1128448-209715156, default = 209715156) or {+-}size{KMGTP}: +3G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8304
Changed type of partition to 'Linux x86-64 root (/)'

Command (? for help): n
Partition number (3-128, default 3):
First sector (34-209715156, default = 7419904) or {+-}size{KMGTP}:
Last sector (7419904-209715156, default = 209715156) or {+-}size{KMGTP}: +3G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8310
Changed type of partition to 'Linux /var'

Command (? for help): n
Partition number (4-128, default 4):
First sector (34-209715156, default = 13711360) or {+-}size{KMGTP}:
Last sector (13711360-209715156, default = 209715156) or {+-}size{KMGTP}: +10G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (5-128, default 5):
First sector (34-209715156, default = 34682880) or {+-}size{KMGTP}:
Last sector (34682880-209715156, default = 209715156) or {+-}size{KMGTP}: +5G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (6-128, default 6):
First sector (34-209715156, default = 45168640) or {+-}size{KMGTP}:
Last sector (45168640-209715156, default = 209715156) or {+-}size{KMGTP}: +2G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (7-128, default 7):
First sector (34-209715156, default = 49362944) or {+-}size{KMGTP}:
Last sector (49362944-209715156, default = 209715156) or {+-}size{KMGTP}: +10G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8302
Changed type of partition to 'Linux /home'

Command (? for help): n
Partition number (8-128, default 8):
First sector (34-209715156, default = 70334464) or {+-}size{KMGTP}:
Last sector (70334464-209715156, default = 209715156) or {+-}size{KMGTP}: +4G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): n
Partition number (9-128, default 9):
First sector (34-209715156, default = 78723072) or {+-}size{KMGTP}:
Last sector (78723072-209715156, default = 209715156) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8309
Changed type of partition to 'Linux LUKS'

On peut alors afficher un résumé des opérations de partitionnement prévues avec la commande p avant d'écrire définitivement ces opérations sur le disque avec la commande w.

Command (? for help): p
Disk /dev/sdb: 209715200 sectors, 100.0 GiB
Model: QEMU HARDDISK
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 918612B4-0EB0-43DD-9494-63FDB36A49DA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 209715156
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1128447   550.0 MiB   EF00  EFI system partition
   2         1128448         7419903   3.0 GiB     8304  Linux x86-64 root (/)
   3         7419904        13711359   3.0 GiB     8310  Linux /var
   4        13711360        34682879   10.0 GiB    8300  Linux filesystem
   5        34682880        45168639   5.0 GiB     8300  Linux filesystem
   6        45168640        49362943   2.0 GiB     8300  Linux filesystem
   7        49362944        70334463   10.0 GiB    8302  Linux /home
   8        70334464        78723071   4.0 GiB     8200  Linux swap
   9        78723072       209715156   62.5 GiB    8309  Linux LUKS

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

Voilà, le partitionnement est maintenant terminé. Parfois il faudra redémarrer le mode rescue pour que le système prenne en compte le changement de table de partition. On peut vérifier que tout s'est bien passé.

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:16   0   2.5G  0 disk
└─sda1   8:17   0   2.5G  0 part /
sdb      8:0    0   100G  0 disk
├─sdb1   8:1    0   550M  0 part
├─sdb2   8:2    0     3G  0 part
├─sdb3   8:3    0     3G  0 part
├─sdb4   8:4    0    10G  0 part
├─sdb5   8:5    0     5G  0 part
├─sdb6   8:6    0     2G  0 part
├─sdb7   8:7    0    10G  0 part
├─sdb8   8:8    0     4G  0 part
└─sdb9   8:9    0  62.5G  0 part

Il faut maintenant formater les partitions. On a fait le choix ici de formater en ext4 plutôt qu'en Btfrs pour la stabilité et les performances. Cependant les fonctionnalités du système de fichiers Btrfs nous auraient par exemple éviter le partitionnement précédent grâce aux sous-volumes.

Lors de lu formatage d'une partition en ext4 on peut jouer sur deux paramètres pour gagner un peu de place. Le nombre d'inode avec le paramètre -i et le pourcentage de blocs réservés (pour root en cas de saturation du disque) avec le paramètre -m. Pour plus de détails voir ici.

mkfs.fat -F 32 /dev/sdb1
mkfs.ext4 /dev/sdb2
mkfs.ext4 /dev/sdb3
mkfs.ext4 /dev/sdb4
mkfs.ext4 -i 4096 /dev/sdb5
mkfs.ext4 -m 1 /dev/sdb6
mkfs.ext4 -m 1 /dev/sdb7
mkswap /dev/sdb8

On formatera la partition LUKS une fois le système installé.

Étape 3 : Installation de Debian avec debootstrap

Pour installer Debian on va utiliser un petit utilitaire nommé debootstrap et conçu par l'équipe DebianInstaller. Pour plus d'informations sur son utilisation vous pouvez vous référer au manuel d'installation de Debian ou à ce HOWTO.
Pour télécharger et installer debootstrap il faut se rendre sur cette page pour noter la dernière version. Ensuite on télécharge et on installe le paquet.

wget https://deb.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.128+nmu5_all.deb
dpkg -i debootstrap_*.*.*_all.deb

De manière facultative (par sécurité) on peut utiliser la clef de l'archive Debian 12 pour vérifier sa signature lors de l'installation avec debootstrap. Pour cela on va la télécharger sur ce site et convertir le fichier texte release-12.asc en fichier binaire au format .gpg.

wget https://ftp-master.debian.org/keys/release-12.asc
gpg --dearmor release-12.asc

On commence par monter la partition racine dans le /mnt du système de secours. On créer alors une structure de dossiers pour monter toutes nos partitions.

mount /dev/sdb2 /mnt/
mkdir -p /mnt/{boot,home,opt,tmp,usr,var}
mount /dev/sdb1 /mnt/boot
mount /dev/sdb3 /mnt/var
mount /dev/sdb5 /mnt/usr
mount /dev/sdb6 /mnt/opt
mount /dev/sdb7 /mnt/home
mkdir -p /mnt/var/log
mount /dev/sdb4 /mnt/var/log

On finit par installer une version (très) minimale de Debian dans /mnt à l'aide de debootstrap. On y ajoute les paquets openssl et ca-certificates pour pouvoir utiliser apt avec https sans soucis. Plus précisément le paquet openssl fournit les outils qui implémentent des protocoles cryptographiques SSL et TLS pour communiquer de façon sécurisée sur internet et le paquet ca-certificates inclut les autorités de certifications livrées avec les navigateurs Mozilla afin de permettre aux applications basées sur SSL de vérifier l'authenticité des connexions SSL (il est suggéré par openssl).
On décide ici de vérifier la signature de l'archive avec la clef release-12.asc.gpg. Si vous n'avez pas téléchargé la clef il faut enlever le paramètre --keyring=./release-12.asc.gpg.

debootstrap --keyring=./release-12.asc.gpg --arch=amd64 --variant=minbase --include=libssl3,openssl,ca-certificates bookworm /mnt http://deb.debian.org/debian/
I: Retrieving InRelease
I: Checking Release signature
I: Valid Release signature (key id 4D64FEC119C2029067D6E791F8D2585B8783D481)
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on http://deb.debian.org/debian...
I: Retrieving adduser 3.134
I: Validating adduser 3.134
[...]
I: Chosen extractor for .deb packages: dpkg-deb
I: Extracting adduser...
[...]
I: Installing core packages...
I: Unpacking required packages...
I: Unpacking adduser...
[...]
I: Configuring required packages...
I: Configuring debian-archive-keyring...
[...]
I: Unpacking the base system...
I: Base system installed successfully.

Étape 4 : Chroot

Debian est maintenant installé sur le serveur mais en version très minimale. Il est encore trop tôt pour pouvoir démarrer le serveur et s'y connecter via SSH. Il faut, avant, configurer le système pour avoir un serveur un minimum fonctionnel. Pour cela on va « chrooter » le serveur sur la machine rescue c'est-à-dire en quelques sortes faire croire à la machine rescue qu'elle tourne sur le serveur et qu'elle a pour racine la racine du systeme qu'on vient d'installer sur le serveur (ici cela se passe dans le répertoire /mnt).
On commence par monter/bind les répertoires /proc, /sys et /dev sur le serveur et on chroot le repertoire /mnt.

swapon /dev/sdb8
mount -t proc /proc /mnt/proc/
mount -t sysfs /sys /mnt/sys/
mount --rbind /dev /mnt/dev/
chroot /mnt /bin/bash

On commence par définir les bons droits du dossier /tmp.

chmod 1777 /tmp

On va vouloir installer un certain nombre de paquets pour compléter l'installation. Or la politique de Debian stipule que les paquets fournissant des services système doivent démarrer ces services par défaut. Afin d'éviter que des services ne démarrent, on va créer un script policy-rc.d que l'on supprimera plus tard. Pour plus d'information voir ce document.

cat > /usr/sbin/policy-rc.d <<EOF
#!/bin/sh
exit 101
EOF
chmod +x /usr/sbin/policy-rc.d

Étape 5 : Configuration des dépôts

On configure maintenant les dépôts Debian en éditant le fichier /etc/apt/sources.list (voir man) afin de pouvoir installer et mettre à jour les paquets.
On choisit les dépôts : bookworm-security, bookworm et bookworm-updates.
Pour chaque dépôt on utilisera seulement les composants de la section main (n'ayant pas de soucis de pilote, on n'a pas besoin ici des composants de contrib et non-free). Pour plus de détails voir ici.
Dernière chose dans la configuration de sources.list : l'utilisation ou non de https. C'est quelque chose qui ne fait pas encore un large consensus (voir ici et ). On fera le choix d'utiliser https.
Concernant la gestion des dépendances : chaque paquet peut avoir des relations de dépendance avec d'autres paquets. Ces relations sont essentiellement symbolisées par les drapeaux Depends lorsque la dépendance est nécessaire, Recommends lorsque la dépendance est recommandée et Suggests lorsque la dépendance est suggérée. Pour plus d'informations on peut se référer à cette FAQ ou au à la politique de Debian. Par défaut apt installe les dépendances recommandées. Pour satisfaire le principe de minimisation, on choisit ici de ne pas installer les paquets suggérés et recommandés.

cat > /etc/apt/sources.list <<EOF
deb https://security.debian.org/debian-security bookworm-security main
deb https://deb.debian.org/debian bookworm main
deb https://deb.debian.org/debian bookworm-updates main
EOF
cat > /etc/apt/apt.conf.d/60recommends <<EOF
APT::Install-Recommends "0";
APT::Install-Suggests "0";
EOF

On peut maintenant mettre à jour la liste des paquets et le système (qui devrait déjà être à jour) en faisant :

apt update
apt full-upgrade

Étape 6 : Paramètres régionaux et éditeur de texte

On va maintenant configurer les paramètres régionaux du système (Locales) pour en particulier mettre le système en français. Pour cela on commence par installer le paquet locales.

apt install locales
The following NEW packages will be installed:
  libc-l10n locales

Puis on configure les langues et paramètres régionaux souhaités. Ici on choisit en_US@UTF8 et fr_FR@UTF-8 et on n'indique pas de langue par défaut (None) pour laisser le choix aux utilisateurs via SSH.

dpkg-reconfigure locales
Configuring locales
-------------------

Locales are a framework to switch between multiple languages and allow users to use their language, country, characters, collation order, etc.

Please choose which locales to generate. UTF-8 locales should be chosen by default, particularly for new installations. Other character sets may be useful for backwards compatibility with older systems and
software.

  1. All locales          47. bn_IN UTF-8           93. en_NZ.UTF-8 UTF-8   139. ga_IE.UTF-8 UTF-8       185. lij_IT UTF-8        231. pap_AW UTF-8            277. ta_LK UTF-8
  2. aa_DJ.UTF-8 UTF-8    48. bo_CN UTF-8           94. en_PH.UTF-8 UTF-8   140. gd_GB.UTF-8 UTF-8       186. ln_CD UTF-8         232. pap_CW UTF-8            278. tcy_IN.UTF-8 UTF-8
  3. aa_ER UTF-8          49. bo_IN UTF-8           95. en_SC.UTF-8 UTF-8   141. gez_ER UTF-8            187. lo_LA UTF-8         233. pl_PL.UTF-8 UTF-8       279. te_IN UTF-8
  4. aa_ER@saaho UTF-8    50. br_FR.UTF-8 UTF-8     96. en_SG.UTF-8 UTF-8   142. gez_ER@abegede UTF-8    188. lt_LT.UTF-8 UTF-8   234. ps_AF UTF-8             280. tg_TJ.UTF-8 UTF-8
  5. aa_ET UTF-8          51. brx_IN UTF-8          97. en_US.UTF-8 UTF-8   143. gez_ET UTF-8            189. lv_LV.UTF-8 UTF-8   235. pt_BR.UTF-8 UTF-8       281. th_TH.UTF-8 UTF-8
  6. af_ZA.UTF-8 UTF-8    52. bs_BA.UTF-8 UTF-8     98. en_ZA.UTF-8 UTF-8   144. gez_ET@abegede UTF-8    190. lzh_TW UTF-8        236. pt_PT.UTF-8 UTF-8       282. the_NP UTF-8
  7. agr_PE UTF-8         53. byn_ER UTF-8          99. en_ZM UTF-8         145. gl_ES.UTF-8 UTF-8       191. mag_IN UTF-8        237. quz_PE UTF-8            283. ti_ER UTF-8
  8. ak_GH UTF-8          54. ca_AD.UTF-8 UTF-8     100. en_ZW.UTF-8 UTF-8  146. gu_IN UTF-8             192. mai_IN UTF-8        238. raj_IN UTF-8            284. ti_ET UTF-8
  9. am_ET UTF-8          55. ca_ES.UTF-8 UTF-8     101. eo UTF-8           147. gv_GB.UTF-8 UTF-8       193. mai_NP UTF-8        239. rif_MA UTF-8            285. tig_ER UTF-8
  10. an_ES.UTF-8 UTF-8   56. ca_ES@valencia UTF-8  102. es_AR.UTF-8 UTF-8  148. ha_NG UTF-8             194. mfe_MU UTF-8        240. ro_RO.UTF-8 UTF-8       286. tk_TM UTF-8
  11. anp_IN UTF-8        57. ca_FR.UTF-8 UTF-8     103. es_BO.UTF-8 UTF-8  149. hak_TW UTF-8            195. mg_MG.UTF-8 UTF-8   241. ru_RU.UTF-8 UTF-8       287. tl_PH.UTF-8 UTF-8
  12. ar_AE.UTF-8 UTF-8   58. ca_IT.UTF-8 UTF-8     104. es_CL.UTF-8 UTF-8  150. he_IL.UTF-8 UTF-8       196. mhr_RU UTF-8        242. ru_UA.UTF-8 UTF-8       288. tn_ZA UTF-8
  13. ar_BH.UTF-8 UTF-8   59. ce_RU UTF-8           105. es_CO.UTF-8 UTF-8  151. hi_IN UTF-8             197. mi_NZ.UTF-8 UTF-8   243. rw_RW UTF-8             289. to_TO UTF-8
  14. ar_DZ.UTF-8 UTF-8   60. chr_US UTF-8          106. es_CR.UTF-8 UTF-8  152. hif_FJ UTF-8            198. miq_NI UTF-8        244. sa_IN UTF-8             290. tpi_PG UTF-8
  15. ar_EG.UTF-8 UTF-8   61. ckb_IQ UTF-8          107. es_CU UTF-8        153. hne_IN UTF-8            199. mjw_IN UTF-8        245. sah_RU UTF-8            291. tr_CY.UTF-8 UTF-8
  16. ar_IN UTF-8         62. cmn_TW UTF-8          108. es_DO.UTF-8 UTF-8  154. hr_HR.UTF-8 UTF-8       200. mk_MK.UTF-8 UTF-8   246. sat_IN UTF-8            292. tr_TR.UTF-8 UTF-8
  17. ar_IQ.UTF-8 UTF-8   63. crh_UA UTF-8          109. es_EC.UTF-8 UTF-8  155. hsb_DE.UTF-8 UTF-8      201. ml_IN UTF-8         247. sc_IT UTF-8             293. ts_ZA UTF-8
  18. ar_JO.UTF-8 UTF-8   64. cs_CZ.UTF-8 UTF-8     110. es_ES.UTF-8 UTF-8  156. ht_HT UTF-8             202. mn_MN UTF-8         248. sd_IN UTF-8             294. tt_RU UTF-8
  19. ar_KW.UTF-8 UTF-8   65. csb_PL UTF-8          111. es_GT.UTF-8 UTF-8  157. hu_HU.UTF-8 UTF-8       203. mni_IN UTF-8        249. sd_IN@devanagari UTF-8  295. tt_RU@iqtelif UTF-8
  20. ar_LB.UTF-8 UTF-8   66. cv_RU UTF-8           112. es_HN.UTF-8 UTF-8  158. hy_AM UTF-8             204. mnw_MM UTF-8        250. se_NO UTF-8             296. ug_CN UTF-8
  21. ar_LY.UTF-8 UTF-8   67. cy_GB.UTF-8 UTF-8     113. es_MX.UTF-8 UTF-8  159. ia_FR UTF-8             205. mr_IN UTF-8         251. sgs_LT UTF-8            297. uk_UA.UTF-8 UTF-8
  22. ar_MA.UTF-8 UTF-8   68. da_DK.UTF-8 UTF-8     114. es_NI.UTF-8 UTF-8  160. id_ID.UTF-8 UTF-8       206. ms_MY.UTF-8 UTF-8   252. shn_MM UTF-8            298. unm_US UTF-8
  23. ar_OM.UTF-8 UTF-8   69. de_AT.UTF-8 UTF-8     115. es_PA.UTF-8 UTF-8  161. ig_NG UTF-8             207. mt_MT.UTF-8 UTF-8   253. shs_CA UTF-8            299. ur_IN UTF-8
  24. ar_QA.UTF-8 UTF-8   70. de_BE.UTF-8 UTF-8     116. es_PE.UTF-8 UTF-8  162. ik_CA UTF-8             208. my_MM UTF-8         254. si_LK UTF-8             300. ur_PK UTF-8
  25. ar_SA.UTF-8 UTF-8   71. de_CH.UTF-8 UTF-8     117. es_PR.UTF-8 UTF-8  163. is_IS.UTF-8 UTF-8       209. nan_TW UTF-8        255. sid_ET UTF-8            301. uz_UZ.UTF-8 UTF-8
  26. ar_SD.UTF-8 UTF-8   72. de_DE.UTF-8 UTF-8     118. es_PY.UTF-8 UTF-8  164. it_CH.UTF-8 UTF-8       210. nan_TW@latin UTF-8  256. sk_SK.UTF-8 UTF-8       302. uz_UZ@cyrillic UTF-8
  27. ar_SS UTF-8         73. de_IT.UTF-8 UTF-8     119. es_SV.UTF-8 UTF-8  165. it_IT.UTF-8 UTF-8       211. nb_NO.UTF-8 UTF-8   257. sl_SI.UTF-8 UTF-8       303. ve_ZA UTF-8
  28. ar_SY.UTF-8 UTF-8   74. de_LI.UTF-8 UTF-8     120. es_US.UTF-8 UTF-8  166. iu_CA UTF-8             212. nds_DE UTF-8        258. sm_WS UTF-8             304. vi_VN UTF-8
  29. ar_TN.UTF-8 UTF-8   75. de_LU.UTF-8 UTF-8     121. es_UY.UTF-8 UTF-8  167. ja_JP.UTF-8 UTF-8       213. nds_NL UTF-8        259. so_DJ.UTF-8 UTF-8       305. wa_BE.UTF-8 UTF-8
  30. ar_YE.UTF-8 UTF-8   76. doi_IN UTF-8          122. es_VE.UTF-8 UTF-8  168. ka_GE.UTF-8 UTF-8       214. ne_NP UTF-8         260. so_ET UTF-8             306. wae_CH UTF-8
  31. as_IN UTF-8         77. dsb_DE UTF-8          123. et_EE.UTF-8 UTF-8  169. kab_DZ UTF-8            215. nhn_MX UTF-8        261. so_KE.UTF-8 UTF-8       307. wal_ET UTF-8
  32. ast_ES.UTF-8 UTF-8  78. dv_MV UTF-8           124. eu_ES.UTF-8 UTF-8  170. kk_KZ.UTF-8 UTF-8       216. niu_NU UTF-8        262. so_SO.UTF-8 UTF-8       308. wo_SN UTF-8
  33. ayc_PE UTF-8        79. dz_BT UTF-8           125. eu_FR.UTF-8 UTF-8  171. kl_GL.UTF-8 UTF-8       217. niu_NZ UTF-8        263. sq_AL.UTF-8 UTF-8       309. xh_ZA.UTF-8 UTF-8
  34. az_AZ UTF-8         80. el_CY.UTF-8 UTF-8     126. fa_IR UTF-8        172. km_KH UTF-8             218. nl_AW UTF-8         264. sq_MK UTF-8             310. yi_US.UTF-8 UTF-8
  35. az_IR UTF-8         81. el_GR.UTF-8 UTF-8     127. ff_SN UTF-8        173. kn_IN UTF-8             219. nl_BE.UTF-8 UTF-8   265. sr_ME UTF-8             311. yo_NG UTF-8
  36. be_BY.UTF-8 UTF-8   82. en_AG UTF-8           128. fi_FI.UTF-8 UTF-8  174. ko_KR.UTF-8 UTF-8       220. nl_NL.UTF-8 UTF-8   266. sr_RS UTF-8             312. yue_HK UTF-8
  37. be_BY@latin UTF-8   83. en_AU.UTF-8 UTF-8     129. fil_PH UTF-8       175. kok_IN UTF-8            221. nn_NO.UTF-8 UTF-8   267. sr_RS@latin UTF-8       313. yuw_PG UTF-8
  38. bem_ZM UTF-8        84. en_BW.UTF-8 UTF-8     130. fo_FO.UTF-8 UTF-8  176. ks_IN UTF-8             222. nr_ZA UTF-8         268. ss_ZA UTF-8             314. zh_CN.UTF-8 UTF-8
  39. ber_DZ UTF-8        85. en_CA.UTF-8 UTF-8     131. fr_BE.UTF-8 UTF-8  177. ks_IN@devanagari UTF-8  223. nso_ZA UTF-8        269. st_ZA.UTF-8 UTF-8       315. zh_HK.UTF-8 UTF-8
  40. ber_MA UTF-8        86. en_DK.UTF-8 UTF-8     132. fr_CA.UTF-8 UTF-8  178. ku_TR.UTF-8 UTF-8       224. oc_FR.UTF-8 UTF-8   270. sv_FI.UTF-8 UTF-8       316. zh_SG.UTF-8 UTF-8
  41. bg_BG.UTF-8 UTF-8   87. en_GB.UTF-8 UTF-8     133. fr_CH.UTF-8 UTF-8  179. kw_GB.UTF-8 UTF-8       225. om_ET UTF-8         271. sv_SE.UTF-8 UTF-8       317. zh_TW.UTF-8 UTF-8
  42. bhb_IN.UTF-8 UTF-8  88. en_HK.UTF-8 UTF-8     134. fr_FR.UTF-8 UTF-8  180. ky_KG UTF-8             226. om_KE.UTF-8 UTF-8   272. sw_KE UTF-8             318. zu_ZA.UTF-8 UTF-8
  43. bho_IN UTF-8        89. en_IE.UTF-8 UTF-8     135. fr_LU.UTF-8 UTF-8  181. lb_LU UTF-8             227. or_IN UTF-8         273. sw_TZ UTF-8
[More]

  44. bho_NP UTF-8        90. en_IL UTF-8           136. fur_IT UTF-8       182. lg_UG.UTF-8 UTF-8       228. os_RU UTF-8         274. syr UTF-8
  45. bi_VU UTF-8         91. en_IN UTF-8           137. fy_DE UTF-8        183. li_BE UTF-8             229. pa_IN UTF-8         275. szl_PL UTF-8
  46. bn_BD UTF-8         92. en_NG UTF-8           138. fy_NL UTF-8        184. li_NL UTF-8             230. pa_PK UTF-8         276. ta_IN UTF-8

(Enter the items or ranges you want to select, separated by spaces.)

Locales to be generated: 97 134

Many packages in Debian use locales to display text in the correct language for the user. You can choose a default locale for the system from the generated locales.

This will select the default language for the entire system. If this system is a multi-user system where not all users are able to speak the default language, they will experience difficulties.

  1. None  2. C.UTF-8  3. en_US.UTF-8  4. fr_FR.UTF-8
Default locale for the system environment: 1

Generating locales (this might take a while)...
  en_US.UTF-8... done
  fr_FR.UTF-8... done
Generation complete.

On installe enfin nano un éditeur de texte en ligne de commande qui nous sera bien utile pour éditer les fichiers de configuration. Il faudra savoir utiliser cet éditeur. Les deux commandes de base sont Ctrl + S pour enregistrer un fichier et Ctrl + X pour quitter l'éditeur. Pour plus de détails voir cette documentation.

apt install nano
Suggested packages:
  hunspell
Recommended packages:
  libgpm2
The following NEW packages will be installed:
  libncursesw6 nano

Étape 7 : Édition du fichier fstab

Le fichier /etc/fstab définit le point et les options de montage des partitions. En particulier il permet de monter les partitions automatiquement lors du démarrage du système. Pour plus de détails voir cette documentation.
On a tout d'abord besoin de récupérer l'UUID de chaque partition/système de fichiers avec la commande blkid.

blkid
/dev/sda1: UUID="38354553-56cf-4cb4-84b1-43867797823c" TYPE="ext4" PARTUUID="2a17447c-01"
/dev/sdb4: UUID="47b4b75b-1719-454e-9255-809caaca1671" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="937333a0-7350-4659-a067-3eb918285061"
/dev/sdb2: UUID="bc06bab4-b841-4063-82c4-225efa606171" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux x86-64 root (/)" PARTUUID="df58531d-744c-48a2-abe0-d928c441280f"
/dev/sdb9: PARTLABEL="Linux LUKS" PARTUUID="bdad159f-2ed5-4ca9-9e21-2c251d772fa4"
/dev/sdb7: UUID="2c8214b1-1c46-424c-9056-51ab5e59fb75" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux /home" PARTUUID="55c1cdc6-9739-43a7-bade-d5fb83f94803"
/dev/sdb5: UUID="6ed66c2d-e0fa-41ca-8eaa-b140ae9eaa48" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="53197251-5a17-4baf-a7f4-672c9c452e6a"
/dev/sdb3: UUID="ece514bd-552a-4d6e-982e-fb71cb0a3b18" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux /var" PARTUUID="f002260d-97d7-4a56-94d2-f87c05f078da"
/dev/sdb1: UUID="DB2C-CFF5" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="e47a574b-76f1-4cc1-9e31-b7aad739013e"
/dev/sdb8: UUID="41fd45d7-8b15-4609-a636-d375c64aea2d" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="4c5ddfb2-527e-47ff-bbb0-17c5f6eb6b7f"
/dev/sdb6: UUID="75a1a66c-1224-4fc4-adfe-430605feeba7" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="a6e1e331-a12a-458a-97b1-3c89cab61780"

Puis on édite le fichier /etc/fstab en conséquence et en suivant la table de partition proposée à l'étape 2. Le fichier est constitué de 6 colonnes :

  • La première désigne le système de fichier que l'on souhaite monter. On décide ici de le désigner par son UUID. On aurait aussi pu lors de la création des systèmes de fichiers indiquer une étiquette à chacun pour simplifier leur désignation en utilisant son LABEL à la place de son UUID.
  • La deuxième colonne correspond au point de montage.
  • La troisième au type de système de fichiers.
  • La quatrième colonne indique les options de montage. On utilisera ici essentiellement les options noauto pour ne pas monter automatique au démarrage du système, nodev pour ignorer les fichiers spéciaux caractère ou bloc, noexec pour ne pas autoriser l’exécution directe de fichiers binaires et nosuid pour ne pas tenir compte des bits Set-UID et Set-GID. Se référer au manuel pour voir toutes les options et à ce guide en plus de [ANSSI R28].
  • La cinquième colonne sert à l'utilitaire dump qui ne sera pas utilisé ici donc il vaudra 0.
  • La sixième colonne définit l'ordre de vérification du système de fichiers au démarrage par l'utilitaire fsck. Il y a trois valeurs possible : 0 pour ignorer la vérification, 1 la prioriété la plus haute (à réserver à /) et 2 pour les autres systèmes à vérifier.
nano /etc/fstab
/etc/fstab
UUID=DB2C-CFF5                                   /boot        vfat    noauto,nosuid,nodev,noexec,umask=0077    0    2
UUID=bc06bab4-b841-4063-82c4-225efa606171        /            ext4                                             0    1
UUID=ece514bd-552a-4d6e-982e-fb71cb0a3b18        /var         ext4    nosuid,nodev,noexec                      0    2
UUID=47b4b75b-1719-454e-9255-809caaca1671        /var/log     ext4    nosuid,nodev,noexec                      0    2
UUID=6ed66c2d-e0fa-41ca-8eaa-b140ae9eaa48        /usr         ext4    nodev                                    0    2
UUID=75a1a66c-1224-4fc4-adfe-430605feeba7        /opt         ext4    nosuid,nodev                             0    2
UUID=2c8214b1-1c46-424c-9056-51ab5e59fb75        /home        ext4    nosuid,nodev,noexec                      0    2
tmpfs                                            /tmp         tmpfs   nosuid,nodev,noexec                      0    0
UUID=41fd45d7-8b15-4609-a636-d375c64aea2d        none         swap    sw                                       0    0

On configurera la dernière partition (la partition chiffrée) après.

Étape 8 : Installation du système d'initialisation : Systemd

Systemd est une suite logicielle qui fournit un système d'initialisation et un gestionnaire de services (ou daemons). C'est le premier processus démarré après le chargement du noyau et il a pour but de démarrer et d’arrêter tous les services. Systemd a été source de grandes polémiques mais a finalement été adopté par la plupart des distributions Linux. Debian utilise Systemd comme système d'initialisation par défaut depuis 2015.
Pour installer systemd on va installer les paquets systemd et dbus. D-Bus est un logiciel de communication inter-processus permettant à des applications de communiquer entre elles. C'est une dépendance recommandée par systemd.

apt install systemd dbus
Suggested packages:
  default-dbus-session-bus | dbus-session-bus systemd-container systemd-homed systemd-userdbd systemd-boot systemd-resolved libfido2-1 libqrencode4 libtss2-esys-3.0.2-0 libtss2-mu0 libtss2-rc0 polkitd
  | policykit-1
Recommended packages:
  systemd-timesyncd | time-daemon
The following NEW packages will be installed:
  dbus dbus-bin dbus-daemon dbus-session-bus-common dbus-system-bus-common dmsetup libapparmor1 libargon2-1 libcryptsetup12 libdbus-1-3 libdevmapper1.02.1 libexpat1 libfdisk1 libip4tc2 libjson-c5 libkmod2
  libsystemd-shared systemd

Étape 9 : Configuration du réseau

On va configurer le réseau pour que le serveur puisse être connecté à Internet.
Tout d'abord on installe le paquet ifupdown fournissant les outils ifup et ifdown utilisés pour configurer les interfaces réseau via le fichier /etc/network/interfaces. On installe également iproute2 qui est une dépendance de ifupdown et qui fournit un ensemble d’utilitaires pour contrôler le trafic réseau.

apt install ifupdown iproute2
Suggested packages:
  ppp rdnssd iproute2-doc python3:any krb5-doc krb5-user
Recommended packages:
  isc-dhcp-client | dhcp-client libatm1 libpam-cap krb5-locales
The following NEW packages will be installed:
  ifupdown iproute2 libbpf1 libbsd0 libcap2-bin libelf1 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libmnl0 libtirpc-common libtirpc3 libxtables12

Il faut ensuite déterminer le nom de l’interface réseau. On peut trouver cette information dans le fichier /proc/net/dev ou en utilisant iproute2 avec la commande suivante.

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  link/ether 58:cd:58:13:08:34 brd ff:ff:ff:ff:ff:ff
  altname enp0s18
  altname ens18

L'interface loopback (lo) sera toujours présente. Ici le nom de l’interface réseau qui nous intéresse est eth0. Cependant on va choisir de prendre le nom alternatif (altname) ens18 qui suit la nouvelle nomenclature des interfaces réseau sous Linux. On créer alors le fichier de configuration /etc/network/interfaces avec l'IP du serveur. On rappelle qu'ici nous faisons le choix de ne pas configurer l'IPV6 (mais la configuration serait identique).

nano /etc/network/interfaces
/etc/network/interfaces
auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
    address 10.11.12.13/32
    gateway 10.11.12.1

Il faut remplacer eth0 par le nom de votre interface réseau, 10.11.12.13 par l'adresse IP de votre serveur et 10.11.12.1 par l'adresse IP de la passerelle par défaut du réseau de votre serveur.
On peut ensuite choisir le nom d'hôte de notre serveur en éditant le fichier /etc/hostname.

nano /etc/hostname
/etc/hostname
webalice

On édite enfin le fichier /etc/hosts permettant d'associer des adresse IP à des noms d'hôte sans passer par une résolution DNS. Voir le manuel.

nano /etc/hosts
/etc/hosts
127.0.0.1       localhost
127.0.1.1       webalice

Étape 10 : Installation du noyau et du chargeur d'amorçage

On installe la dernière version du noyau Linux gérée par Debian avec le paquet linux-image-amd64. On installe aussi le paquet zstd qui permettra de compresser l'image initramfs plus efficacement que gzip. Plus d'information ici.

apt install linux-image-amd64 zstd
Suggested packages:
  libarchive-dev bash-completion linux-doc-6.1 debian-kernel-handbook grub-pc | grub-efi-amd64 | extlinux
Recommended packages:
  busybox | busybox-static firmware-linux-free apparmor
The following NEW packages will be installed:
  cpio initramfs-tools initramfs-tools-core klibc-utils kmod libklibc linux-base linux-image-6.1.0-10-amd64 linux-image-amd64 udev zstd

Il nous faut maintenant un chargeur d'amorçage pour lancer le système au démarrage. Habituellement grub est utilisé. Or ici nous n'avons qu'un seul système d'exploitation à lancer et il existe une solution plus légère (grâce à UEFI) pour lancer Debian. Il s'agit de EFISTUB qui est déjà présent dans le noyau. Pour cela il suffit juste de copier les fichiers vmlinuz et initrd.img dans la partition EFI puis de créer un script startup.nsh (voir ici).

mkdir -p /boot/EFI/Debian
cp /vmlinuz /initrd.img /boot/EFI/Debian/
nano /boot/startup.nsh
/boot/efi/startup.nsh
\EFI\Debian\vmlinuz root=/dev/sdb2 ro initrd=\EFI\Debian\initrd.img

Pour que cette solution soit pérenne, il faudra, à chaque mise à jour du noyau, copier dans la partition EFI les fichiers vmlinuz et initrd.img. On peut automatiser cela avec les scripts suivants dans les répertoires /etc/initramfs/post-update.d et /etc/initramfs/post-update.d. Pour plus d'informations sur le rôle de ces répertoires voir ici.

mkdir -p /etc/kernel/postinst.d
nano /etc/kernel/postinst.d/zz-update-efistub
/etc/kernel/postinst.d/zz-update-efistub
#!/bin/sh
cp /vmlinuz /boot/EFI/Debian/
cp /vmlinuz.old /boot/EFI/Debian/
mkdir -p /etc/initramfs/post-update.d
nano /etc/initramfs/post-update.d/zz-update-efistub
/etc/initramfs/post-update.d/zz-update-efistub
#!/bin/sh
cp /initrd.img /boot/EFI/Debian/
cp /initrd.img.old /boot/EFI/Debian/
chmod +x /etc/kernel/postinst.d/zz-update-efistub
chmod +x /etc/initramfs/post-update.d/zz-update-efistub

Étape 11 : Installation de SSH

Dans cette dernière étape d'installation du serveur : on change le mot de passe de root puis on installe et configure SSH pour pouvoir se connecter directement au serveur (sans passer par le mode rescue). De manière (très) temporaire on accepte de se connecter à root via mot de passe.
On change le mot de passe de root avec la commande passwd. Il faudra alors choisir un mot de passe temporaire (c'est normal qu'aucun caractère ne s'affiche lors de la saisie du mot de passe) en prenant une longue chaîne de caractères qu'on pourra garder dans un bloc-note et qu'on utilisera juste lors de la première connexion au serveur.

passwd
New password:
Retype new password:
passwd: password updated successfully

On installe ensuite le serveur OpenSSH.

apt install openssh-server libpam-systemd
Suggested packages:
  keychain libpam-ssh monkeysphere ssh-askpass molly-guard ufw
Recommended packages:
  dbus-user-session xauth ncurses-term psmisc libnss-systemd
The following NEW packages will be installed:
  libcbor0.8 libedit2 libfido2-1 libnsl2 libpam-systemd libproc2-0 libwrap0 openssh-client openssh-server openssh-sftp-server procps runit-helper systemd-sysv

Pour que l'on puisse se connecter au compte root du serveur via SSH, il faut ajouter PermitRootLogin yes au début du fichier /etc/ssh/sshd_config.

nano /etc/ssh/sshd_config
/etc/ssh/sshd_config
PermitRootLogin yes
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# [...]

Étape 12 : Nettoyage et redémarrage

On termine en enlevant le script /usr/sbin/policy-rc.d et en démontant tout ce qui a été monté pour l'installation.

rm -f /usr/sbin/policy-rc.d
exit
umount -R /mnt
exit

Voilà, le système est installé. Il faut maintenant quitter le mode rescue et démarrer le serveur normalement via le panel de l'hébergeur. Le serveur est alors accessible via SSH en se connectant au compte root.

Appendice

Connaître son serveur

Cette partie facultative a pour but de mieux connaître (ou de vérifier) le matériel de son serveur/VPS. Pour cela on utilise le logiciel inxi.

apt install inxi
inxi -F -v 7
System:
  Host: alice-server Kernel: 6.1.0-10-amd64 arch: x86_64 bits: 64 compiler: gcc v: 12.2.0
    Console: pty pts/0 Distro: Debian GNU/Linux 12 (bookworm)
Machine:
  Type: Kvm System: QEMU product: Standard PC (i440FX + PIIX, 1996) v: pc-i440fx-7.1 serial: N/A
    Chassis: type: 1 v: pc-i440fx-7.1 serial: N/A
  Mobo: N/A model: N/A serial: N/A BIOS: SeaBIOS v: rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org
    date: 04/01/2014
Battery:
  Message: No system battery data found. Is one present?
Memory:
  RAM: total: 4.01 GiB used: 369.1 MiB (9.0%)
  Array-1: capacity: 4.20 GiB slots: 1 EC: Multi-bit ECC max-module-size: 4.20 GiB note: est.
  Device-1: DIMM 0 type: RAM detail: N/A size: 4.20 GiB speed: N/A volts: N/A width: N/A
    manufacturer: QEMU part-no: N/A serial: N/A
CPU:
  Info: quad core model: Intel Xeon E5-2680 v4 bits: 64 type: MCP smt: 
    arch: Broadwell rev: 1 cache: L1: 256 KiB L2: 16 MiB L3: 16 MiB
  Speed (MHz): avg: 2397 min/max: N/A cores: 1: 2397 2: 2397 3: 2397 4: 2397 bogomips: 19177
  Flags: 3dnowprefetch abm adx aes apic arat arch_capabilities arch_perfmon avx avx2 bmi1 bmi2
    clflush cmov constant_tsc cpuid cpuid_fault cx16 cx8 de ept ept_ad erms f16c flexpriority fma
    fpu fsgsbase fxsr hle ht hypervisor ibpb ibrs invpcid invpcid_single lahf_lm lm mca mce
    md_clear mmx movbe msr mtrr nopl nx pae pat pcid pclmulqdq pdcm pdpe1gb pge pni popcnt pse
    pse36 pti rdrand rdseed rdtscp rep_good rtm sep smap smep ss ssbd sse sse2 sse4_1 sse4_2
    ssse3 stibp syscall tpr_shadow tsc tsc_adjust tsc_deadline_timer tsc_known_freq umip vme vmx
    vnmi vpid x2apic xsave xsaveopt xtopology
Graphics:
  Device-1: vendor: Red Hat driver: bochs-drm v: N/A ports: active: Virtual-1 empty: none
    bus-ID: 00:02.0 chip-ID: 1234:1111 class-ID: 0300
  Display: server: No display server data found. Headless machine? tty: 211x53
  Monitor-1: Virtual-1 model: QEMU Monitor res: 1280x800 dpi: 100 size: 325x203mm (12.8x7.99")
    diag: 383mm (15.1") modes: max: 1280x800 min: 640x480
  API: OpenGL Message: GL data unavailable in console for root.
Audio:
  Message: No device data found.
Network:
  Device-1: Intel 82371AB/EB/MB PIIX4 ACPI vendor: Red Hat Qemu virtual machine
    type: network bridge driver: piix4_smbus v: N/A port: N/A bus-ID: 00:01.3 chip-ID: 8086:7113
    class-ID: 0680
  Device-2: Red Hat Virtio network driver: virtio-pci v: 1 port: e0e0 bus-ID: 00:12.0
    chip-ID: 1af4:1000 class-ID: 0200
  IF: eth0 state: up speed: -1 duplex: unknown mac: 58:cd:58:13:08:34
  IP v4: 10.11.12.13/24 scope: global broadcast: 10.11.12.255
  IP v6: 8d75:1928:8f6a:3fd3:9370:2d0e:0e73:5af5/64 scope: global
  IP v6: fe80::8e87:8b82:6dfc:cf8f/64 scope: link
  WAN IP: 10.11.12.13
Bluetooth:
  Message: No bluetooth data found.
Logical:
  Message: No logical block device data found.
RAID:
  Message: No RAID data found.
Drives:
  Local Storage: total: 500 GiB used: 1.88 GiB (0.4%)
  ID-1: /dev/sda vendor: QEMU model: HARDDISK size: 500 GiB speed:  type: N/A
    serial: drive-scsi0 rev: 2.5+ scheme: GPT
  Optical-1: /dev/sr0 vendor: QEMU model: QEMU DVD-ROM rev: 2.5+ dev-links: cdrom
  Features: speed: 4 multisession: yes audio: yes dvd: yes rw: none state: running
  Optical-2: /dev/sr1 vendor: QEMU model: QEMU DVD-ROM rev: 2.5+ dev-links: N/A
  Features: speed: 4 multisession: yes audio: yes dvd: yes rw: none state: running
Partition:
  ID-1: / size: 491.99 GiB used: 1.87 GiB (0.4%) fs: ext4 dev: /dev/sda1 label: N/A
    uuid: ef689fa2-177b-44b6-a81e-b59fb9446d59
  ID-2: /boot/efi size: 123.7 MiB used: 11.5 MiB (9.3%) fs: vfat dev: /dev/sda15 label: N/A
    uuid: CBDA-3128
Swap:
  Alert: No swap data was found.
Unmounted:
  ID-1: /dev/sda14 size: 3 MiB fs: N/A label: N/A uuid: N/A
USB:
  Hub-1: 1-0:1 info: Full speed or root hub ports: 2 rev: 1.1 speed: 12 Mb/s chip-ID: 1d6b:0001
    class-ID: 0900
  Device-1: 1-1:2 info: Adomax QEMU USB Tablet type: HID driver: hid-generic,usbhid
    interfaces: 1 rev: 2.0 speed: 12 Mb/s power: 100mA chip-ID: 0627:0001 class-ID: 0300
    serial: 28754-0000:00:01.2-1
Sensors:
  Src: lm-sensors+/sys Message: No sensor data found using /sys/class/hwmon or lm-sensors.
Info:
  Processes: 110 Uptime: 5m wakeups: 1 Init: systemd v: 252 target: graphical (5)
  default: graphical Compilers: N/A Packages: pm: dpkg pkgs: 412 Shell: Bash v: 5.2.15
  running-in: pty pts/0 (SSH) inxi: 3.3.26

On pourra vérifier que le matériel correspond bien à celui proposé par l’hébergeur. On pourra aussi vérifier la réputation de l'adresse IP en particulier si l'IP n'est pas blacklisté par certain service.

Tester la performance de son serveur

Cette partie facultative a pour but de tester la performance (faire un benchmark) du serveur. On pourra ensuite comparer les résultats entre plusieurs serveurs. Pour cela on utilisera essentiellement le logiciel sysbench. Pour cela il faut d'abord l'installer.

apt install sysbench

Tester le processeur (CPU)

On commence par tester le processeur. Pour chaque résultat on prendra soin de relevé le nombre d'opération par second (events per second).

sysbench cpu --cpu-max-prime=20000 --threads=1 run
sysbench cpu --cpu-max-prime=20000 --threads=2 run
sysbench cpu --cpu-max-prime=20000 --threads=4 run
sysbench cpu --cpu-max-prime=20000 --threads=16 run

Tester la mémoire vive (RAM)

On teste ensuite la mémoire vive. Nous ferons trois tests :

Le premier test concerne la vitesse de transfert en écriture dans la RAM. On utilisera des blocs de 1 MiB. Pour cela on utilise la commande :

sysbench memory --memory-block-size=1M --memory-total-size=100G --threads=1 run

Il faudra relever la quantité de données transférée par seconde (en MiB/sec).

Le deuxième test concerne la fréquence (c'est-à-dire le nombre d'opérations par seconde) en écriture dans la RAM. On utilisera des blocs de 1 KiB. Pour cela on utilise la commande :

sysbench memory --memory-block-size=1K --memory-total-size=100G --threads=1 run

Il faudra relever le nombre d'opérations par seconde (le nombre entre parenthèse après Total operations:).

Le troisième test concerne les performances en lecture aléatoire sur des blocs de 1 KiB. Pour cela on utilise la commande :

sysbench memory --memory-block-size=1K --memory-total-size=100G --threads=1 --memory-access-mode=rnd --memory-oper=read run

On relèvera ici à la fois la quantité de données transférée par seconde (en MiB/sec) et le nombre d'opérations par seconde.

Tester le disque (HDD ou SSD)

On teste ensuite le disque. Il faudra relever les deux valeurs dans la section Throughput (en MiB/s).

sysbench fileio --threads=1 --file-block-size=16K --file-total-size=32G --file-test-mode=rndrw prepare
sysbench fileio --threads=1 --file-block-size=16K --file-total-size=32G --file-test-mode=rndrw run
sysbench fileio --threads=1 --file-block-size=16K --file-total-size=32G --file-test-mode=rndrw cleanup

Tester la connection internet

On utilisera le test de débit speedtest-cli de speedtest.net.

apt install speedtest-cli
speedtest-cli

Tester la performance du chiffrement

Pour terminer on regarde les performances du serveur sur différents algo de chiffrement. On utilise pour cela cryptsetup et openssl.

apt install cryptsetup openssl
cryptsetup benchmark
openssl speed ecdsap256 rsa2048