Kimsufi : installer Debian via debootstrap

Rédigé par Alexandre le 19/05/2020

#auto-hébergement #debian #loisir

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 installer
  • buster : 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'à !