Lorsque vous commandez un serveur dédié ou VPS, que ce soit chez Kimsufi ou chez Online pour citer les plus connus, vous avez le choix du système d'exploitation.
Celui-ci arrive donc en toute logique préinstallé et préconfiguré, ce que je trouve personnellement dérangeant.
Il est aussi possible que la distribution que vous souhaitez installer ne soit pas disponible, c'est souvent le cas de Arch Linux ou lors de la sortie d'une nouvelle version de Debian par exemple.
L'intérêt d'installer sois même sa distribution c'est que vous savez ce que vous faites, ce que vous ferez et surtout ce qui a été fait.
Je prendrais ici pour exemple le cas d'un serveur dédié Kimsufi mais la manipulation devrait être globalement la même partout à partir du moment ou le fournisseur permet de démarrer sur un système de secours GNU/Linux, que ce soit rescue-pro, Ubuntu, Debian, etc.
- Pré-requis
- Récupération de la configuration réseau
- Récupération du nom de l'interface réseau
- Partitionnement
- Installation
- Configuration
- Derniers réglages
- Conclusion
- Références et remerciements
1. Pré-requis
- Avoir la possibilité de booter sur un linux rescue (rescue-pro, Ubuntu, Debian, etc.
2. Récupération de la configuration réseau
La première chose à faire et si ce n'est pas déjà fait va être de demander l'installation de Debian (8 et supérieur) via l'interface d'administration de votre serveur.
Cela permettra de récupérer les fichiers de configuration réseau.
Des lignes de commandes valent mieux qu'un long discours :
[user@local ?]$ cd ~
[user@local ~]$ mkdir cfg_save
[user@local ~]$ cd cfg_save/
[user@local cfg_save]$ sftp root@ip
sftp> get /etc/network/interfaces
sftp> get /etc/resolv.conf
sftp> bye
Ceci est la base et vous n'avez normalement besoin de rien d'autre.
On modifie le fichier de configuration resolv.conf afin de supprimer les lignes inutiles comme nameserver 127.0.0.1 servant pour BIND qui est installé depuis le modèle d'origine et search ovh.net :
[user@local cfg_save]$ vim resolv.conf
A titre d'exemple, mon fichier ressemble à ceci sur un serveur dédié Kimsufi KS-2E :
nameserver 213.186.33.99
3. Récupération du nom de l'interface réseau
Depuis la version 197 de systemd, le nom des interfaces réseaux a changé, au-revoir donc à eth0.
[user@local ~]$ ssh root@ip
[root@serveur ~]# udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null
ID_NET_NAME_MAC=enx00123abcde1f
ID_OUI_FROM_DATABASE=MITAC INTERNATIONAL CORP.
ID_NET_NAME_PATH=enp1s0
[root@serveur ~]# exit
Dans mon exemple l'interface réseau s'appelle enp1s0.
On modifie le fichier de configuration interfaces que nous avons rapatrié plus tôt afin de remplacer eth0 par enp1s0 partout où cela est nécessaire :
[user@local cfg_save]$ vim interfaces
A titre d'exemple, mon fichier ressemble à ceci sur un serveur dédié Kimsufi KS-2E :
auto lo
iface lo inet loopback
auto enp1s0
iface enp1s0 inet static
address 37.xxx.xxx.67
netmask 255.255.255.0
broadcast 37.xxx.xxx.255
gateway 37.xxx.xxx.254
iface enp1s0 inet6 static
address xxxx:xxxx:xxxx:xxxx::1
netmask 128
dns-nameservers 2001:41d0:3:163::1
post-up sleep 5; /sbin/ip -family inet6 route add xxxx:xxxx:xxxx:xxxx:ff:ff:ff:ff dev enp1s0
post-up sleep 5; /sbin/ip -family inet6 route add default via xxxx:xxxx:xxxx:xxxx:ff:ff:ff:ff
pre-down /sbin/ip -family inet6 route del default via xxxx:xxxx:xxxx:xxxx:ff:ff:ff:ff
pre-down /sbin/ip -family inet6 route del xxxx:xxxx:xxxx:xxxx:ff:ff:ff:ff dev enp1s0
4. Partitionnement
- Démarrage du serveur sur une image rescue
- Connexion en SSH avec les identifiants envoyés par email
- Partitionnement du disque, notez la première partition de 1MIB qui est indispensable à Grub pour du GPT et prenez l'habitude à ne plus utiliser MBR
Allons-y :
[user@local ~]$ ssh-keygen -R ip
[user@local ~]$ ssh root@ip
[root@serveur ~]# parted /dev/sda
(parted) mklabel gpt
(parted) mkpart primary 1MIB 2MIB
(parted) mkpart primary ext4 2MIB -2GB
(parted) mkpart primary linux-swap -2GB 100%
(parted) set 1 bios_grub on
(parted) quit
[root@serveur ~]# mkfs.ext4 -m0 /dev/sda2
[root@serveur ~]# mkswap /dev/sda3
[root@serveur ~]# swapon /dev/sda3
Vous pouvez adapter votre partitionnement comme bon vous semble, utiliser LVM, faire du thin provisioning mais vous devrez adapter la suite.
Voici mon partitionnement :
[root@serveur ~]# parted /dev/sda print
Model: ATA HGST HUS724020AL (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB primary bios_grub
2 2097kB 1998GB 1998GB ext4 primary
3 1998GB 2000GB 2000MB linux-swap(v1) primary
Ce qui me donnera :
/ : 2TB
swap : 2GB
5. Installation
Ne pas tenir compte des erreurs que vous pourriez rencontrer du type /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8).
Généralement, deboostrap est installé de base mais si ce n'est pas le cas il suffit de l'installer apt update; apt install debootstrap
.
On monte le tout puis on installe avec debootstrap :
[root@serveur ~]# mount /dev/sda2 /mnt/
[root@serveur ~]# debootstrap --arch=amd64 --include=dialog,locales,console-data,console-setup,vim,openssh-server stretch /mnt/ http://debian.mirrors.ovh.net/debian/
L'installation initiale est terminée.
6. Configuration
Les fichiers de configuration réseau doivent être restaurés :
[user@local ~]$ cd cfg_save/
[user@local ~]$ sftp root@ip
sftp> put interfaces /mnt/etc/network/
sftp> put resolv.conf /mnt/etc/
sftp> bye
Chroot sur le futur système :
[user@local ~]$ ssh root@ip
[root@serveur ~]# cd /mnt/
[root@serveur mnt]# mount -B /proc proc
[root@serveur mnt]# mount -B /run run
[root@serveur mnt]# mount -B /sys sys
[root@serveur mnt]# mount -B /dev dev
[root@serveur mnt]# mount -B /dev/pts dev/pts
[root@serveur mnt]# cd ~
[root@serveur ~]# chroot /mnt/ /bin/bash
Création du fichier /etc/hostname contenant le nom d'hôte souhaité :
[root@serveur /]# echo CHANGEME > /etc/hostname
Modification de /etc/hosts afin d'ajouter le nom d'hôte :
; […]
127.0.1.1 CHANGEME
; […]
Configuration des locales (choisir en_US.UTF-8 UTF-8 et fr_FR.UTF-8 UTF-8), du clavier, de la zone :
[root@serveur /]# dpkg-reconfigure locales keyboard-configuration console-data tzdata
[root@serveur /]# export LANG=fr_FR.UTF-8
[root@serveur /]# hwclock --systohc
Modification de /etc/apt/sources.list :
deb http://debian.mirrors.ovh.net/debian stretch main
deb http://debian.mirrors.ovh.net/debian stretch-updates main
deb http://debian.mirrors.ovh.net/debian stretch-backports main
deb http://debian.mirrors.ovh.net/debian-security stretch/updates main
Récupération des UUID :
[root@serveur /]# blkid
Qui pour moi retourne :
/dev/sda1: PARTLABEL="primary" PARTUUID="e00ea6f1-7ada-48f8-923f-b81d06e400d6"
/dev/sda2: UUID="82efb9b0-a19c-4e2a-b77a-6d2ef46b0f51" TYPE="ext4" PARTLABEL="primary" PARTUUID="28d7f730-fc8c-41ac-bd25-781c6d5d3351"
/dev/sda3: UUID="d1d4628a-dc33-49c0-9b6d-9a6d8743f098" TYPE="swap" PARTLABEL="primary" PARTUUID="d27e86c0-bd36-49b9-8814-10b24eb0398a"
Modification de /etc/fstab, vous devrez donc adapter :
UUID=82efb9b0-a19c-4e2a-b77a-6d2ef46b0f51 / ext4 rw,noatime,nodiratime 0 1
UUID=d1d4628a-dc33-49c0-9b6d-9a6d8743f098 none swap defaults 0 0
Installation de Grub2 :
[root@serveur /]# apt install --no-install-recommends linux-image-amd64 grub-pc os-prober
Choisir /dev/sda.
Modification de /boot/grub/grub.cfg afin de supprimer le timeout du menu pour booter immédiatement :
# […]
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=0
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=0
fi
# […]
Modification du password root :
[root@serveur /]# passwd
Création d'un utilisateur :
[root@serveur /]# useradd -m -s /bin/bash CHANGEME
[root@serveur /]# passwd CHANGEME
L'installation est terminée, vous devez maintenant redémarrer sur le disque dur en modifiant l'option de boot via l'interface d'administration de votre manager :
[root@serveur /]# exit
[root@serveur ~]# cd /mnt/
[root@serveur mnt]# umount {proc,run,sys,dev/pts,dev}
[root@serveur mnt]# cd ..
[root@serveur /]# umount mnt/ -R
[root@serveur /]# reboot
7. Derniers réglages
Admettons que tout fonctionne bien, on se connecte en SSH sur notre système :
[user@local ~]$ ssh-keygen -R ip
[user@local ~]$ ssh user@ip
[user@serveur ~]$ su -
On met à jour :
[root@serveur ~]# apt update
[root@serveur ~]# apt upgrade
[root@serveur ~]# apt-get clean
8. Conclusion
Votre système est maintenant installé.
Si votre système ne répond plus ou que vous ne pouvez pas y accéder par SSH c'est que vous avez mal fais quelque chose.
Dans ce cas vous pouvez faire un reboot hardware en rescue et voir ce qui cloche en chrootant puis regarder dans /var/log, journalctl, etc.
- Il est fortement conseillé de configurer OpenSSH avec un système de clé publique/privé
- D'installer iptables-persistent puis de créer vos règles