Sur la plupart de mes machines, j'utilise la version stable de Debian, soit Jessie actuellement. J'explique ici la manière dont j'installe un système avec Debootstrap.

Note : Cet article est une mise à jour de celui qui expliquait l'installation de Debian Wheezy.

Pourquoi ne pas utiliser l'installeur Debian ?

L'installeur ajoute systématiquement des paquets qui ne me servent à rien. J'ai donc choisi la méthode qui me permet de réellement choisir ce qui est installé sur mon système : debootstrap. En installant uniquement les paquets que je veux, je sais exactement ce qui est installé, et je maîtrise mieux mon système.

Quand on décide de tout faire à la main, il faut par contre savoir quels paquets installer quand il manque une fonctionnalité nécessaire. Cette méthode est donc plutôt à réserver pour ceux qui ont déjà une bonne connaissance du système.

Différences avec l'article sur l'installation de Debian Wheezy

Pour montrer autant de différences que possible, je vais décrire ici l'installation en tenant compte des éléments que j'ai explorés plus récemment. C'est de cette manière qu'est actuellement installé mon serveur de test.

  • Démarrage : Remplacement des explications pour un BIOS par celles pour un UEFI.
  • Système de fichiers : Remplacement de ext4+LVM par BTRFS.
  • Gestion du RAID : Remplacement de mdadm par les fonctionnalités de gestion du RAID de BTRFS.
  • Configuration du réseau : Remplacement des outils du paquet net-tools par ceux de la suite systemd.

Préparation du système hôte

Pour installer Debian avec debootstrap, il faut évidemment déjà un système fonctionnel. Ce peut être un système installé sur la machine, live CD/USB, chargé par le réseau... ou même un autre système déjà installé sur la partition BTRFS sur laquelle le nouveau système doit être installé.

J'ai testé l'installation depuis Debian et Ubuntu sans problème, mais toute distribution qui permet d'utiliser debootstrap devrait fonctionner.

Pour préparer le système hôte, il suffit d'y installer les paquets nécessaires. Par exemple, depuis Debian/Ubuntu :

$ sudo apt-get install debootstrap debian-archive-keyring

Note : Le paquet debian-archive-keyring est facultatif, il permet juste de vérifier les signatures du dépôt utilisé lors du debootstrap.

Installation du système

L'installation du système se fait en trois étapes :

  • Le partitionnement des disques
  • La création de la racine du nouveau système
  • La configuration du nouveau système

Partitionnement des disques

Avant d'installer le système proprement dit, il faut déjà lui créer des partitions sur la machine. Pour cette étape, j'utilise cfdisk, qui propose une interface assez simple.

Comme j'utilise BTRFS, je vais donc créer une unique partition de données pour tout le système. Le découpage logique des différents espaces de stockage du système sera géré par des sous-volumes. Il reste cependant nécessaire de créer une partition pour le système de démarrage, et une autre pour l'espace de SWAP.

$ sudo cfdisk /dev/sdX

/dev/sdX est le disque que l'on veut partitionner.

Note : Dans le cas d'un système RAID, il faut évidemment créer les mêmes partitions de manière identique sur les différents disques

Note : Dans certains cas, il peut être nécessaire de faire recharger la liste des partitions au système après avoir modifié la table des partitions, avec un programme comme partprobe.

Une fois les partitions créées, il faut créer un système de fichiers dessus. Le type de la partition destinée à recevoir le système de démarrage doit simplement être défini sur EFI System, il n'est pas nécessaire de la formater au préalable, comme expliqué dans cet article.

$ sudo mkfs.btrfs /dev/sdX2
$ sudo mkswap /dev/sdX3

Note : Dans le cas d'un système RAID, il faut ajouter toutes les partitions de données dans le système de fichiers BTRFS, et créer l'espace de SWAP sur chacune des partitions.

Création de la racine du nouveau système

Les partitions sur lesquelles sera installé le nouveau système doivent ensuite être montées sur le système qui effectue l'installation.

Une fois le système de fichiers BTRFS créé, il est nécessaire d'y créer les sous-volumes qui seront utilisés par le nouveau système. J'utilise personnellement l'organisation en arborescence à plat.

Dans cet exemple, je crée que deux sous-volumes : un pour la racine, et un pour le répertoire /home. Les répertoires destinés à contenir les instantanés sont aussi créés, dans un sous-volume spécifique, permettant ainsi de monter ce sous-volume dans l'arborescence du système final, sans devoir monter la racine du système de fichiers.

$ sudo mount -o compress,autodefrag,subvol=/ /dev/sdX2 /mnt
$ sudo mkdir -p /mnt/systems/jessie
$ sudo btrfs subvolume create /mnt/systems/jessie/@
$ sudo btrfs subvolume create /mnt/systems/jessie/@home
$ sudo mkdir -p /mnt/snapshots/systems
$ sudo btrfs subvolume create /mnt/snapshots/systems/jessie
$ sudo mkdir -p /mnt/snapshots/systems/jessie/@{,home}

Une fois les sous-volumes créés, je démonte la racine du système de fichiers BTRFS pour monter la racine du nouveau système à sa place.

$ sudo umount /mnt
$ sudo mount -o compress,autodefrag,subvol=/systems/jessie/@ /dev/sdX2 /mnt
$ sudo mkdir /mnt/home
$ sudo mount -o compress,autodefrag,subvol=/systems/jessie/@home /dev/sdX2 /mnt/home

On peut ensuite lancer debootstrap.

$ sudo debootstrap --arch=amd64 --verbose --variant=minbase --include=btrfs-progs,iproute2,rsyslog,screen,less,sudo,bind9-host,vim-nox,dialog,locales,keyboard-configuration,console-setup,adduser,tzdata,bash-completion --exclude=nano jessie /mnt http://ftp.fr.debian.org/debian

Description des paramètres utilisés :

L'architecture par défaut est celle du système qui lance le debootstrap, le paramètre --arch est donc facultatif, mais je préfère toujours le préciser.

Le paramètre --variant permet de modifier le comportement de debootstrap, principalement la liste des paquets installés par défaut. La variante minbase est celle qui en installe le moins.

Le paramètre --includes permet de donner une liste de paquets qui seront installés automatiquement en même temps que le système de base. La liste des paquets choisis est libre, j'y mets uniquement les paquets que j'installe sur toutes les machines. Si vous installez Debian pour faire un simple chroot, la plupart des paquets que j'ai mis ici seront inutile, voire dérangeants.

De la même manière que le paramètre --includes, on peut exclure une liste de paquets avec --excludes. Comme je n'utilise jamais nano, et qu'il est parfois configuré comme éditeur par défaut lorsqu'il est présent, j'ai pris l'habitude de le retirer dès l'installation du système.

Les trois derniers paramètres sont, dans l'ordre, le nom de la distribution à installer, le répertoire dans lequel sera créée la racine du système, et le miroir à utiliser lors de l'installation.

Configuration du nouveau système

Avant de configurer le nouveau système, il est nécessaire de monter quelques répertoires, pour le bon fonctionnement du chroot.

$ sudo mount -t devtmpfs none /mnt/dev
$ sudo mount -t devpts none /mnt/dev/pts
$ sudo mount -t proc none /mnt/proc
$ sudo mount -t sysfs none /mnt/sys

On lance ensuite la configuration de base du nouveau système

$ sudo chroot /mnt dpkg --configure -a

Configuration du hostname

$ echo "<hostname>" | sudo chroot /mnt tee /etc/hostname
$ echo "127.0.0.1 <hostname>" | sudo chroot /mnt tee -a /etc/hosts

Reconfiguration des paquets de localisation du système

$ sudo chroot /mnt dpkg-reconfigure locales console-setup keyboard-configuration tzdata

Utilisant le système de fichiers BTRFS, il est actuellement nécessaire d'utiliser le dépôt Debian backports, afin de bénéficier d'un noyau récent. Afin d'utiliser automatiquement les paquets provenant du dépôt backports, je définis sa priorité à la même valeur que celle du dépôt par défaut.

$ echo "deb http://ftp.debian.org/debian jessie-backports main contrib non-free" | sudo chroot /mnt tee /etc/apt/sources.list.d/backports.list
$ cat << EOF | sudo chroot /mnt tee /etc/apt/preferences
Package: *
Pin: release a=jessie-backports
Pin-Priority: 500
EOF
$ sudo chroot /mnt apt-get update
$ sudo chroot /mnt apt-get dist-upgrade --no-install-recommends

Création d'un utilisateur administrateur

$ sudo chroot /mnt adduser <username>
$ sudo chroot /mnt adduser <username> adm
$ sudo chroot /mnt adduser <username> sudo

Il faut ensuite écrire le fichier /etc/fstab du nouveau système.

$ cat << EOF | sudo chroot /mnt tee /etc/fstab
UUID=<uuid_partition_btrfs> /       btrfs   defaults,compress,autodefrag,subvol=/systems/jessie/@       0 0
UUID=<uuid_partition_btrfs> /home   btrfs   defaults,compress,autodefrag,subvol=/systems/jessie/@home   0 0
UUID=<uuid_partition_swap>  none    swap    sw                                                          0 0
EOF

Note : Il est préférable d'utiliser les UUID des partitions dans ce fichier, puisqu'ils sont uniques et immuables. Il est possible de connaitre les UUID de chaque partition avec la commande ls -l /dev/disk/by-uuid/.

Note : Dans le cas d'un système de fichiers BTRFS, on désactive la vérification automatique du système de fichiers (le dernier caractère des lignes du fichier /etc/fstab), puisqu'il n'existe pas encore de programme fsck compatible avec BTRFS.

La configuration du réseau dépend de chaque machine. Sur celle utilisée pour écrire cet article, je n'ai qu'une unique interface réseau, automatiquement activée lors du démarrage, et configurée en client DHCP. J'ai aussi activé le Wake-on-LAN, en mode magic packet.

$ cat << EOF | sudo chroot /mnt tee /etc/systemd/network/10-eth0.network
[Match]
Name=eth0

[Network]
DHCP=yes
EOF
$ cat << EOF | sudo chroot /mnt tee /etc/systemd/network/10-wol.link
[Link]
WakeOnLan=magic
EOF

Enfin, il faut activer la gestion du réseau par systemd.

$ sudo chroot /mnt systemctl enable systemd-networkd

Configuration du démarrage

Si le système qui vient d'être installé est destiné à être le système principal de la machine, il est nécessaire d'installer un chargeur d'amorçage pour permettre son démarrage.

Il faut donc maintenant installer des paquets permettant le démarrage du système. L'ordre donné permet de ne pas avoir de manipulations supplémentaires à faire après l'installation des paquets. Le noyau installé est bien évidemment à adapter selon la machine et le choix de chacun.

Note : Lors de l'installation de grub, il ne faut pas laisser l'installeur le mettre en place automatiquement, pour pouvoir définir dans quel répertoire il sera installé.

$ sudo chroot /mnt apt-get install --no-install-recommends linux-image-amd64 grub-efi-amd64
$ sudo chroot /mnt mkdir /boot/efi
$ sudo chroot /mnt sudo grub-install --boot-directory=/boot --efi-directory=/boot/efi --target=x86_64-efi
$ sudo chroot /mnt sudo update-grub

Cas particulier du multi-boot

Dans le cas où plusieurs systèmes seraient installés dans la partition BTRFS, ils ne seront pas détectés automatiquement. En effet, les outils de grub cherchent des systèmes dans les différentes partitions existantes, mais ne parcourent pas les sous-volumes BTRFS.

La méthode la plus simple pour permettre le démarrage des différents systèmes installés de cette manière est de créer un fichier /boot/grub/custom.cfg dans le système principal. Le contenu de ce fichier est automatiquement intégré dans le menu de grub, et contiendra des commandes permettant de charger le grub. De cette manière, il n'est pas nécessaire de modifier ce fichier lors de chaque mise à jour du noyau sur les autres systèmes, leur propre grub tenant automatiquement sa configuration à jour. L'inconvénient de cette méthode est d'avoir plusieurs menus de grub enchaînés les uns après les autres, plutôt que de démarrer directement tous les systèmes depuis le même menu.

menuentry 'Debian 7 Wheezy' {
    configfile      /systems/wheezy/@/boot/grub/grub.cfg
}
menuentry 'Ubuntu 16.04 Xenial' {
    configfile      /systems/xenial/@/boot/grub/grub.cfg
}

Note : Cette méthode ne nécessite pas d'installer un grub complet dans les autres systèmes, mais uniquement le paquet grub2-common. En effet, seul le fichier de configuration grub.cfg de l'autre système sera chargé. Cependant, cela nécessite aussi que tous les composants utilisés par le fichier de configuration chargé soient présents dans le grub du système principal.

Sauvegarde du nouveau système

La dernière étape, après l'installation, et la configuration du système, est d'effectuer une sauvegarde, pour pouvoir revenir à cet état en cas de problème. Cela permet aussi d'avoir une image du système tout juste configuré, dans le cas où on veuille en créer une copie, par exemple, pour faire des tests.

$ sudo mount -o compress,autodefrag,subvol=/snapshots/systems/jessie /dev/sdX2 /mnt/mnt
$ sudo btrfs subvolume snapshot -r /mnt /mnt/mnt/@/000-install
$ sudo btrfs subvolume snapshot -r /mnt/home /mnt/mnt/@home/000-install

Redémarrage de l'ordinateur

Une fois le système complètement installé, il suffit de redémarrer pour se trouver sur le nouveau système.

$ sudo reboot

Le système de fichiers BTRFS

ven. 03 mars 2017 by Marmotte

BTRFS est un système de fichiers, comparable à ZFS, encore en développement très actif, mais déjà intégré au noyau Linux et considéré stable pour un bon nombre de fonctionnalités. Il est cependant conseillé d'avoir un noyau Linux le plus récent possible pour l'utiliser.

Il a un fonctionnement de type Copy-on-Write …

read more