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…
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
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…)
# 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/
# debootstrap --arch amd64 stretch /mnt/chroot/ http://10.11.12.251:9999/deb.debian.org/debian/
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…
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 #:/ #
On est maintenant dans la nouvelle installation mais, le système est incomplet, il est toujours impossible de démarrer dessus…
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) <ftpmaster@debian.org> 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
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
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
#:/ # 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…)
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
Entrer à nouveau dans le chroot pour installer le noyau:
# chroot /mnt/chroot/ /bin/bash #:/ # #:/ # apt install -y linux-image-amd64
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 ...
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
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”.