# Installation d'une Debian Stretch avec l'aide de debootstrap et de chroot L'objectif est d'installer une Stretch (sur une nouvelle partition) à partir d'une autre Debian (ici une Sid, mais cette méthode fonctionnera aussi bien avec une autre version), sans avoir besoin de redémarrer ma machine une seule fois… Avantage : rester dans mon environnement de travail pendant toute l'installation… # Préparation du système de base ## Configuration de la partition de destination 1) Préparer une partition libre disposant de suffisamment d'espace (entre 10 et 30Go au minimum): ``` # fdisk -l /dev/sdb7 317323264 522541055 205217792 97,9G Système de fichiers Linux ``` Il fauts s'assurer que cette partition n'est pas montée: ``` # umount /dev/sdb7 umount: /dev/sdb7 : non monté. ``` 2) Formater la partition qui va recevoir l'installation On a choisi de formater en ext4,mais on peut choisir au autre système de fichiers bien sûr. La partition cible (ici /dev/sdb7) devra aussi être adaptée à la configuration. ``` # mkfs -V -t ext4 /dev/sdb7 ``` S'il y a déjà un système de fichier sur la partition il faudra l'écraser: ``` /dev/sdb7 contient un système de fichiers ext4 dernier montage sur / le Mon Nov 6 14:39:19 2017 Procéder malgré tout ? (o,N) o ``` 3) Créer le répertoire ou sera montée la partition fraîchement formatée. On a choisi `/mnt/chroot` Un petit « ls » à la fin pour vérifier que la partition est bien montée (Un répertoire lost+found doit se trouver dans le répertoire de montage) ``` # mkdir -p /mnt/chroot # mount /dev/sdb7 /mnt/chroot/ # ls /mnt/chroot/ lost+found ``` ## Installation avec debootstrap Installer debootstrap (chroot se trouvant dans le paquet coreutils normalement déjà installé dans la Debian). ``` # apt install -y debootstrap ``` Installation de la Stretch avec debootstrap (on a choisi une Stretch amd64, mais on peut choisir une Stretch i386 ou bien même une Sid…) ### Installation depuis un CD d'installation ``` # mount -o loop debian-9.2.1-amd64-netinst.iso /media/cdrom/ # debootstrap --arch amd64 stretch /mnt/chroot/ file:/media/cdrom/ ``` En cas d'échec dû à la vérification de gpg ``` E: Failed getting release signature file file:/media/cdrom/dists/stretch/Release.gpg ``` ... forcer l'installation sans vérification ``` # debootstrap --no-check-gpg --arch amd64 stretch /mnt/chroot/ file:/media/cdrom/ ``` ### Installation depuis un dépôt local ``` # debootstrap --arch amd64 stretch /mnt/chroot/ http://10.11.12.251:9999/deb.debian.org/debian/ ``` ### Installation via le réseau. Un peu long, mais c'est comme ça... En ajoutant l'option `--variant=minbase` à debootstrap, on installe uniquement le strict minimum de paquets (pas de vim, d'exim4, etc.). ``` # debootstrap --arch amd64 stretch /mnt/chroot/ http://deb.debian.org/debian/ I: Retrieving InRelease I: Retrieving Release I: Retrieving Release.gpg I: Checking Release signature I: Valid Release signature (key id 067E3C456BAE240ACEE88F6FEF0F382A1A7B6500) I: Retrieving Packages I: Validating Packages ... I: Configuring libc-bin... I: Configuring systemd... I: Base system installed successfully. ``` Si tout s'est bien passé, un "ls" retournera la toute nouvelle arborescence : ``` # ls /mnt/chroot/ bin debootstrap etc lib lost+found mnt proc run srv tmp var boot dev home lib64 media opt root sbin sys usr ``` À ce niveau, Stretch est installée, mais elle est loin d'être fonctionnelle et « autonome ». On ne peut notamment pas démarrer dessus… # Création de la nouvelle installation ## Préparation du chroot Il faut maintenant préparer le chroot. Trois répertoires sont importants pour que cela fonctionne convenablement : `/sys`, `/proc` et `/dev` (accessoirement `/tmp`) Avant de chrooter ilfaudra monter les pseudos systèmes dans le chroot: ``` # mount -t sysfs /sys /mnt/chroot/sys # mount -t proc /proc /mnt/chroot/proc # mount --bind /dev /mnt/chroot/dev # mount -t devpts /dev/pts /mnt/chroot/dev/pts # mount --bind /tmp /mnt/chroot/tmp ``` Il faut ensuite « normaliser les comptes et groupes » de la nouvelle installation (afin que les utilisateurs et groupes aient les mêmes identifiants dans le système "hôte" et dans le chroot) taper les commandes suivantes : ``` # grep "^[^:]*:x:[0-9][0-9][0-9][0-9]:" /etc/passwd >> /mnt/chroot/etc/passwd # grep "^[^:]*:x:[0-9][0-9][0-9][0-9]:" /etc/group >> /mnt/chroot/etc/group ``` On peut maintenant entrer dans l'environnement chroot: ``` # chroot /mnt/chroot/ /bin/bash #:/ # ``` ## Finalisation de l'installation et réglages On est maintenant dans la nouvelle installation mais, le système est incomplet, il est toujours impossible de démarrer dessus… ### Définition des "locales" On va maintenant mettre en français, configurer la localisation, et surtout… régler l'heure. L'heure est très importante. Si on démarre sur ce nouveau système avec une mauvaise heure (dans le futur par rapport au système sur lequel on est), le prochain démarrage demandera de faire un fsck… En effet, au montage des disques le système inscrit l'heure (au tout début du disque). Si cette heure est « dans le futur », au démarrage suivant (sur une autre installation), il ne voudra pas démarrer et exigera une vérification de disque… ``` #:/ # apt update ``` **Reamarque**: Si on installe via un CDROM avec l'option `--no-check-gpg` on aura une erreur dans le chroot au premier update... ``` W: GPG error: http://deb.debian.org/debian stretch Release: The following signatures were invalid: BADSIG 8B48AD6246925553 Debian Archive Automatic Signing Key (7.0/wheezy) E: The repository 'http://deb.debian.org/debian stretch Release' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. ``` Il faudra alors faire ceci: ``` #:/ # apt-get clean #:/ # rm /var/lib/apt/lists/* #:/ # apt-get update ``` Et on continue... ``` #:/ # apt install -y locales #:/ # dpkg-reconfigure locales Generating locales (this might take a while)... fr_FR.UTF-8... done Generation complete. #:/ # dpkg-reconfigure tzdata Current default time zone: 'Indian/Antananarivo' Local time is now: Tue Nov 7 08:38:03 EAT 2017. Universal Time is now: Tue Nov 7 05:38:03 UTC 2017. #:/ # hwclock --systohc --utc #:/ # apt install -y ntpdate #:/ # ntpdate ntp.metas.ch ``` ### Configuration de sources.list Il fautmaintenant compléter les dépôts, par exemple ajouter le dépôt de rétroportages (backports) pour avoir accès à un noyau récent, mais on est pas obligé de le faire. ``` #:/ # nano /etc/apt/sources.list deb http://deb.debian.org/debian/ stretch main contrib non-free deb http://security.debian.org/ stretch/updates main contrib non-free deb http://deb.debian.org/debian/ stretch-updates main contrib non-free deb http://deb.debian.org/debian/ stretch-proposed-updates main contrib non-free deb http://ftp.debian.org/debian stretch-backports main contrib non-free ``` Mettre à jour : ``` #:/ # apt update && apt upgrade -y ``` ### Configuration du Clavier Configurer maintenant le clavier ``` #:/ # apt install -y console-data (option choisir un codage clavier dans la liste complète) - pc / azerty / French / Same as X11 (latin9) / Standard Looking for keymap to install: fr-latin9 Looking for keymap to install: fr-latin9 ``` **Astuce**: Lorsqu'on a pas cette sortie: fr-latin9 (Cela arrivait avec Jessie et Wheezy, le problème semble réglé en Stretch) recommencer: ``` #:/ # dpkg-reconfigure -plow console-data ``` ## Configuration de hostname et fstab Sortir du CHROOT: ``` #:/ # exit ``` Il reste quelques fichiers à récupérer… Pour avoir un bon hostname, le réseau, le montage correct des disques… ``` # cp /etc/{fstab,hosts,hostname,resolv.conf} /mnt/chroot/etc/ # cp /etc/network/interfaces /mnt/chroot/etc/network/ ``` Entrer à nouveau dans système chrooté ``` # chroot /mnt/chroot/ /bin/bash #:/ # ``` Le contenu de fsab doit être adapté. Récupérer le UUID (Universally Unique Identifier) des disques pour le nouveau fstab avec la commande BLKID: ``` #:/ # blkid /dev/sda1: UUID="33e50b98-063b-489e-86e1-4f01028b6f03" TYPE="ext4" PARTUUID="dab918a2-01" /dev/sda2: UUID="6E02F5276EFF1BC3" TYPE="ntfs" PARTUUID="dab918a2-02" /dev/sda3: UUID="56363bc4-b828-48db-808a-1e96d4b8c806" TYPE="ext4" PARTUUID="dab918a2-03" /dev/sdb1: LABEL="RM-CM-)cupM-CM-)ration" UUID="526ED53D6ED51A95" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="443ad1ef-1aa2-4cce-9bc4-7414fdd1ce3e" /dev/sdb2: UUID="32DC-0686" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="483b50fc-579e-4514-b198-381106c9ffb0" /dev/sdb3: PARTLABEL="Microsoft reserved partition" PARTUUID="65bba919-179e-43ea-b8bd-6def3c98c86a" /dev/sdb4: UUID="666EE37F6EE34681" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="d0761798-6302-4b00-93d8-bd23b277fa0a" /dev/sdb5: UUID="0592b5bb-9deb-4fc1-ae74-72694ac38120" TYPE="swap" PARTLABEL="swap" PARTUUID="65e43aa9-ca7b-4006-b126-fad687501622" /dev/sdb6: UUID="600e746e-f59c-43dd-a5dc-dc6ecbbac644" TYPE="ext4" PARTLABEL="debian_system" PARTUUID="853a3de0-01ec-4921-ac1f-d4906a61d7ab" /dev/sdb7: UUID="4cf54c99-09c7-454a-92fd-21b785c50552" TYPE="ext4" PARTUUID="0dcba220-9c29-4cbc-8026-70f1fffebe90" ``` Rectifier le fichier `etc/fstab/` en fonction de la configuration. Au minimum il faudra ceci (/Home n'est pas obligatoire): ``` #:/ # nano /etc/fstab UUID=4cf54c99-09c7-454a-92fd-21b785c50552 / ext4 errors=remount-ro 0 1 UUID=3f332488-3a43-46b3-b20f-4373e9467dfe /home ext4 defaults 0 2 UUID=47bfcfed-42b4-4a80-a93d-69ff4dd36109 none swap sw 0 0 /dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 ``` Créer les répertoires de montage des disques de la nouvelle machine : (en fonction de la configuration, de vos choix et de votre humeur...) ``` #:/ # mkdir /media/cdrom0 ``` ## Configuration de l''environnement graphique On a choisi Xfce, mais on peut utiliser n'importe quel environnement… Gnome, Kde, aucun…) **Attention**: Il faut également installei un gestionnaire de connexion ! ``` #:/ # apt-get install xfce4 slim ``` On peut aussi passer par tasksel pour sélectionner le bureau: ``` #:/ # tasksel ``` Vérifier qu'un gestionnaire de connexion a bien été installé (Tasksel a du s'en occuper normalement): ``` #:/ # apt-cache policy lightdm lightdm: Installé : 1.18.3-1 Candidat : 1.18.3-1 Table de version : *** 1.18.3-1 500 500 http://deb.debian.org/debian stretch/main amd64 Packages 100 /var/lib/dpkg/status ``` ## Installation du noyau et de Grub2 ### Choisir le noyau: ``` #:/ # apt-cache search linux-image linux-image-amd64 - Linux pour les ordinateurs 64 bits (métapaquet) ... linux-image-4.9.0-4-amd64 - Linux 4.9 for 64-bit PCs ... linux-image-4.13.0-0.bpo.1-amd64 - Linux 4.13 for 64-bit PCs ... ``` (choisir dans la liste proposée…) ### Récupérer le kernel-img.conf Avant l'installation du kernel il faut récupérer le kernel-img.conf qui permette de convenablement lancer initramfs à l'installation du nouveau noyau dans le chroot. Ce fichier n'existe pas dans le système créé par debootstrap. La ligne intéressante : `do_initrd = yes` Sortir du chroot ``` #:/ # exit # cp /etc/kernel-img.conf /mnt/chroot/etc/kernel-img.conf ``` ### Installer le noyau Entrer à nouveau dans le chroot pour installer le noyau: ``` # chroot /mnt/chroot/ /bin/bash #:/ # #:/ # apt install -y linux-image-amd64 ``` ### Installer Grub Maintenant… Modifier grub pour que ce nouveau système soit opérationnel : ``` # apt install -y os-prober # update-grub Création du fichier de configuration GRUB… ... Debian GNU/Linux 9 (stretch) trouvé sur /dev/sdb7 ... ``` ## Divers - mots de passe - Système standard Sortir du chroot ``` #:/ # exit ``` Installer les logiciels complémentaires (navigateur Web (Firefox), GParted et Midnight Commander...) ``` # chroot /mnt/chroot/ /bin/bash #:/ # #:/ # apt install -y gparted firefox-esr mc ``` Debootstrap installe un système sans mots de passe… Pour redémarrer maintenant dans le nouveau système il faut définir les définir les mots de passes. ``` # nano /etc/passwd ... laurent:x:1000:1000:Laurent L,,,:/home/laurent:/bin/bash ... ``` Eenlever le x pour que cela ressemble à ça : ``` laurent::1000:1000:Laurent L,,,:/home/laurent:/bin/bash ``` Ceci afin de pouvoir connecter les utilisateurs "normaux". Il faut maintenant créer les mots de passe. ``` #:/ # passwd Entrez le nouveau mot de passe UNIX : Retapez le nouveau mot de passe UNIX : passwd: password updated successfully #:/ # su laurent -c passwd Entrez le nouveau mot de passe UNIX : Retapez le nouveau mot de passe UNIX : passwd: password updated successfully ``` Il est fortement recommandé (avant de sortir) d'installer la tâche standard de Taskel, cela installe une série de paquets essentiels au nouveau système: ``` #:/ # tasksel install standard ``` Et on peut enfin redémarrer sur le nouveau système : ``` #:/ # exit # umount /mnt/chroot/sys # umount /mnt/chroot/proc # umount /mnt/chroot/dev/pts # umount /mnt/chroot/dev # umount /mnt/chroot/tmp # umount /dev/sdb7 #:/ # reboot ``` # A propos de Tasksel Pour avoir un système un peu plus complet, en fonction des besoins, on peut utiliser l'utilitaire Tasksel. La commande suivante détaille les "tâches" que Tasksel peut réaliser ( ce sont les mêmes choix que dans une installation "classique" qui sont proposés) ``` # tasksel --list-tasks u desktop Debian desktop environment u web-server Web server u print-server Print server u database-server SQL database u dns-server DNS Server u file-server File server u mail-server Mail server u ssh-server SSH server u laptop Laptop ``` Chaque "tâche" installe un ensemble de paquets utiles pour certaines utilisations. "u" pour non installé. Une tâche installée commence par "i". Il reste plus qu'à taper dans la console : ``` # tasksel --task-packages nom_tache ``` Il existe une autre tâche, qui n'est pas dans la liste ci-dessus : ``` tasksel install standard ``` Cette commande installe un ensemble de paquets "standards".