Kimsufi : installer Debian via debootstrap
Rédigé par Alexandre le 2020-05-19
Depuis de nombreuses années, je m'agace de l'image de Debian qu'OVH a créé pour les serveurs Kimsufi. Cette image dispose de paquets dont je n'ai pas utilité et certains choix d'OVH me posent problème, comme par exemple, désactiver BTRFS.
Bref, j'ai cherché une solution et comme toujours, j'ai trouvé. Vive l'informatique ! La solution consiste à installer Debian depuis le mode de récupération d'OVH. Le mode de récupération n'est autre qu'une session live de Debian Jessie (à l'heure où j'écris).
L'installation se fait via le paquet debootstrap qui permet d'installer Debian depuis une autre Debian.
Bref, à l'attaque !
Démarrer en mode récupération
Une fois le serveur livré, il convient d'installer un système sur celui-ci :
- Se connecter à son compte Kimsufi
- Choisir son serveur via la liste déroulante
- Appuyer sur le bouton NetBoot
- Accéder à l'onglet Rescue
- Dans la liste, choisir rescue64-pro
- Continuer avec le bouton Suivant
- Appliquer en appuyant sur Confirmer
- Appuyer sur le bouton Redémarrer
- Redémarrer en cliquant sur Confirmer
Il ne reste plus qu'à attendre le courriel avec les informations de connexion à son serveur.
Préparer le disque
Effacer le disque dur principal :
sudo wipefs -a /dev/sda
Créer les partitions :
sudo cfdisk /dev/sda
Effectuer les actions suivantes :
- Select label type: gpt
- Valider New
- Définir la taille à 512M
- Choisir Type
- Sélectionner EFI System
- Surligner Free space
- Valider New
- Définir la taille à 256M
- Surligner Free space
- Valider New
- Définir la taille à 8G
- Choisir Type
- Sélectionner Linux swap
- Surligner Free space
- Valider New
- Conserver la taille définie
- Appliquer avec Write
- Répondre yes
- Terminer avec Quit
Constater ce que cela donne :
sudo fdisk -l /dev/sda
[...]
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 1574911 524288 256M Linux filesystem
/dev/sda3 1574912 18352127 16777216 8G Linux swap
/dev/sda4 18352128 3907029134 3888677007 1.8T Linux filesystem
[...]
Formater les différentes partitions :
sudo mkfs.vfat /dev/sda1 && \
sudo mkfs.ext2 /dev/sda2 && \
sudo mkswap /dev/sda3 && \
sudo mkfs.btrfs --force /dev/sda4
Installer le nouveau système
Monter la partition btrfs :
sudo mount -o defaults,autodefrag /dev/sda4 /mnt
L'installation que je fais dispose des paramètres suivants :
--arch=amd64
: option à choisir dès qu'on a au moins 4Go de mémoire vive--include=
: liste des paquets à automatiquement installer--exclude=
: liste des paquets à ne pas installerbuster
: la version de Debian/mnt/
: le rootfs de la nouvelle installation
sudo debootstrap --arch=amd64 --exclude=iptables,isc-dhcp-client,isc-dhcp-common,vim-common,vim-tiny --include=btrfs-progs,manpages,nano,htop,openssh-server,locate,locales,ca-certificates,msmtp,msmtp-mta,curl,sudo,rsync,tmux,git,dbus,nftables buster /mnt/ http://ftp.fr.debian.org/debian
Monter /boot
:
sudo mount /dev/sda2 /mnt/boot/
Monter /boot/efi
:
sudo mkdir /mnt/boot/efi && sudo mount /dev/sda1 /mnt/boot/efi
Configurer
Monter les répertoires essentiels au fonctionnement du chroot :
cd /mnt/ && \
mount -B /proc proc && \
mount -B /run run && \
mount -B /sys sys && \
mount -B /dev dev && \
mount -B /dev/pts dev/pts
Entrer dans le nouveau système :
cd ~ && chroot /mnt/ /bin/bash
Options régionales
Configurer la langue du système :
sudo dpkg-reconfigure locales
Dans la fenêtre qui s'ouvre :
- Chercher
fr_FR.UTF-8
- Cocher en appuyant sur la barre espace
- Valider avec la touche
Entrée
- Choisir
fr_FR.UTF-8
- Terminer avec la touche
Entrée
Configurer le fuseau horaire :
sudo dpkg-reconfigure tzdata
Dans la fenêtre qui s'ouvre :
- Sélectionner
Europe
- Valider avec la touche
Entrée
- Chercher
Paris
- Terminer avec la touche
Entrée
Réseau
Récupérer les adresses IP :
- Se connecter à son compte Kimsufi
- En dessous la liste déroulante pour choisir son serveur, cliquer sur IP
- Choisir le bon Service avec la liste déroulante du haut
Définir des variables avec les adresses IP obtenues :
ipv4_addr="151.80.42.146"
ipv6_addr="2001:41d0:e:f92::1"
Définir des variables avec les masques des IP :
ipv4_mask="24"
ipv6_mask="56"
Définir des variables avec les passerelles :
ipv4_gw="151.80.42.254"
ipv6_gw="2001:41d0:e:f92f:ff:ff:ff:ff"
Créer le fichier de configuration :
sudo tee --append /etc/network/interfaces <<EOF
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eno0
iface eno0 inet static
address ${ipv4_addr}/${ipv4_mask}
gateway ${ipv4_gw}
dns-nameservers 80.67.169.12 80.67.169.40
iface eno0 inet6 static
address ${ipv6_addr}/${ipv6_mask}
dns-nameservers 2001:910:800::40 2001:910:800::12
post-up /sbin/ip -f inet6 route add ${ipv6_gw} dev eno0
post-up /sbin/ip -f inet6 route add default via ${ipv6_gw}
pre-down /sbin/ip -f inet6 route del default via ${ipv6_gw}
pre-down /sbin/ip -f inet6 route del ${ipv6_gw} dev eno0
EOF
Gestionnaire de paquets
Utiliser les dépôts par défaut :
sudo tee /etc/apt/sources.list <<EOF
deb http://ftp.fr.debian.org/debian/ buster main
deb http://ftp.fr.debian.org/debian/ buster-updates main
deb http://security.debian.org/debian-security buster/updates main
EOF
Ajouter le dépôt des paquets rétro-portés :
sudo tee /etc/apt/sources.list.d/backports.list <<EOF
deb http://ftp.fr.debian.org/debian/ buster-backports main
EOF
sudo tee /etc/apt/apt.conf.d/99custom <<EOF
APT::Install-Recommends "false";
APT::Install-Suggests "false";
APT::Get::Show-Versions "true";
APT::Get::Show-Upgraded "true";
APT::Get::Purge "true";
APT::Get::List-Cleanup "true";
EOF
Appliquer les changements et mettre à jour le système :
sudo apt update && sudo apt --purge --autoremove dist-upgrade
Installer le noyau de la version ainsi que le rétro-porté :
sudo apt install linux-image-amd64 firmware-linux-free && \
sudo apt install -t buster-backports linux-image-amd64 firmware-linux-free
Utilisateurs
Créer un utilisateur lambda :
sudo adduser lambda
Permettre à l'utilisateur d'élever ses privilèges :
sudo adduser lambda sudo
Changer le mot de passe du super-utilisateur :
passwd
Montage automatique
Monter les partitions au démarrage :
sudo tee /etc/fstab <<EOF
$(blkid --match-tag UUID /dev/sda4 | awk '{print $2}') / btrfs defaults,autodefrag 0 0
$(blkid --match-tag UUID /dev/sda2 | awk '{print $2}') /boot ext2 defaults 0 2
$(blkid --match-tag UUID /dev/sda1 | awk '{print $2}') /boot/efi vfat umask=0077 0 1
$(blkid --match-tag UUID /dev/sda3 | awk '{print $2}') none swap sw 0 0
EOF
Nom d'hôte
Définir un nom d'hôte :
echo "ns3003000" | sudo tee /etc/hostname
Définir le fichier /etc/hosts
:
sudo tee /etc/hosts <<EOF
127.0.0.1 localhost
127.0.1.1 ns3003000.ip-151-80-42.eu ns3003000
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF
Programme d'amorçage
Installer le programme d'amorçage :
sudo apt install --no-install-recommends grub-pc os-prober
Cocher /dev/sda
avec la touche Espace et appuyer sur Entrée.
Redémarrer
Sortir de la nouvelle installation :
exit
Démonter la nouvelle installation :
umount {/mnt/boot/efi,/mnt/boot,/mnt/proc,/mnt/run,/mnt/sys,/mnt/dev/pts,/mnt/dev} && umount /mnt -R
Démarrer le serveur sur son disque dur :
- Se connecter à son compte Kimsufi
- Choisir son serveur via la liste déroulante
- Appuyer sur le bouton NetBoot
- Accéder à l'onglet Disque dur
- Continuer avec le bouton Suivant
- Appliquer en appuyant sur Confirmer
- Appuyer sur le bouton Redémarrer
- Redémarrer en cliquant sur Confirmer
Attendre patiemment que le serveur redémarre.
Post-installation
Après l'installation, il convient d'effectuer quelques étapes supplémentaires qui ne pouvaient pas être réalisées dans le chroot.
Protocole de temps réseau
Garder son serveur à l'heure en utilisant systemd
sudo tee /etc/systemd/timesyncd.conf <<EOF
[Time]
NTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org 2.fr.pool.ntp.org 3.fr.pool.ntp.org
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
EOF
Activer la synchronisation de l'heure via systemd
:
sudo timedatectl set-ntp true
Résolution de nom (DNS)
Utiliser les instructions dns-nameservers
du fichier /etc/network/interfaces
en installant le paquet resolvconf :
sudo apt install resolvconf
Redémarrer le réseau pour forcer la relecture des instructions dns-nameservers
:
sudo systemctl restart networking
Pare-feu
Créer les règles du pare-feu (ici on autorise SSH sur le port 22) :
sudo tee /etc/nftables.conf <<EOF
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
# accept any localhost traffic
iif lo accept
# accept traffic originated from us
ct state established,related accept
# accept neighbour discovery otherwise IPv6 connectivity breaks.
ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
## Custom
# Allow SSH from ANY
tcp dport 22 accept
# count and drop any other traffic
counter drop
}
}
EOF
Activer le pare-feu :
sudo systemctl start nftables
Tester une connexion en SSH via un autre terminal. Si cela ne fonctionne pas, utiliser l'interface de Kimsufi pour redémarrer le serveur et corriger le fichier de configuration du pare-feu. Si cela fonctionne, activer le pare-feu au démarrage :
sudo systemctl enable nftables
SSH
Étant donné que le serveur est publique, accessible sur internet, il est de bon ton de se connecter en SSH via une paire de clef.
En conclusion
Le serveur dispose maintenant d'une installation Debian semblable à celles qu'il est possible de faire avec les médias d'installation officiels. Y a plus qu'à !