Installation d’une distribution depuis une autre installation

Chrtophe

Cet article va vous expliquer comment installer n’importe quelle distribution Linux depuis une autre distribution.

Commentez

- Titre : Installation d’une distribution depuis une autre installation

- Auteur : Chrtophe

- Parution : 5 octobre 2022

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2022 Chrtophe. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. But de l’article

- 1-1. Contexte d’installation

- 2. Les différentes distributions Linux

- 2-1. Les gestionnaires de paquets

- 3. Partie commune à n’importe quelle installation

- 3-1. Langue française

- 3-2. Partitionnement

- 3-2-1. Création de la table de partition UEFI

- 3-2-2. Montage de la partition

- 4. Debian

- 4-1. Configuration post-installation

- 4-1-1. Configuration réseau

- 4-1-2. Configuration des locales

- 4-1-3. Clavier en français

- 4-1-4. Fuseau horaire

- 4-1-5. Mise à jour du fichier fstab

- 5. Ubuntu

- 5-1. Configuration post-installation

- 6. Devuan

- 7. Fedora

- 7-1. Post-installation

- 7-1-1. Paramétrage réseau

- 7-1-2. Installation des locales en français

- 7-1-3. Passage du clavier en français

- 7-1-4. Fuseau horaire

- 8. OpenSUSE

- 8-1. Configuration post-installation

- 8-1-1. Paramétrage réseau

- 8-1-2. Paramétrage des locales

- 8-1-3. Passage du clavier en français

- 8-1-4. Fuseau horaire

- 9. Slackware

- 9-1. Configuration post-installation

- 9-2. Comment ai-je trouvé la méthode ?

- 10. ArchLinux

- 10-1. Configuration post installation

- 10-1-1. Configuration du réseau

- 10-1-2. Passage en français

- 10-1-3. Passage en clavier français

- 10-1-4. Activation du swap

- 11. Alpine Linux

- 11-1. Configuration post-installation

- 11-1-1. Configuration réseau

- 11-1-2. Activation du swap

- 12. Conclusion

- 12-1. Remerciements

1 - But de l’article

Cet article va vous expliquer comment installer n’importe quelle distribution Linux depuis une autre distribution, et notamment des distributions n’ayant pas les mêmes gestionnaires de paquets.

Ce type d’opérations, en plus de l’intérêt pédagogique, vous permettra d’installer n’importe quel Linux depuis celui démarré.

Pour cela, nous utiliserons essentiellement la technique du « chroot ».

« chroot » contraction de « change root ». La commande va changer le dossier racine du processus en cours, les fichiers ou dossiers ouverts hors de la nouvelle racine restent accessibles.

Cette commande permet d’isoler l’accès à une partie du système de fichiers. Elle est l’ancêtre des conteneurs tels que Docker qui eux vont plus loin dans l’isolation.

1-1 - Contexte d’installation

Les opérations ont été réalisées dans une machine virtuelle en démarrant sur une image CD Ubuntu Live 18.04 en UEFI.

2 - Les différentes distributions Linux

Une distribution Linux est un packaging incluant un noyau Linux, une interface graphique (étant elle même un package logiciel, les principales étant Gnome, KDE, Cinnamon,...) et un ensemble de logiciels. Il est aussi possible d’effectuer une installation sans interface graphique.

Il y a pléthore de distributions Linux, mais la plupart sont basées sur d’autres distributions

Les deux familles de distributions les plus connues sont :

- les bases Debian : Debian, Ubuntu (et ses variantes Lubuntu, Xubuntu), SteamOS, Raspbian (pour les RaspBerry), Linux Mint (dérivé d’Ubuntu, donc de Debian) ;

- les bases Redhat : Redhat, Fedora, CentOS, SUSE.

Nous pouvons à cela ajouter d’autres distributions plutôt à usage d’utilisateurs avancés :

- Slackware : plus vieille distribution en activité à ma connaissance ;

- Gentoo : système entièrement compilé à partir des sources ;

- ArchLinux : distribution en rolling release, dont Manjaro est dérivée ;

- Alpine Linux : distribution très légère, base de beaucoup de conteneurs Docker notamment.

2-1 - Les gestionnaires de paquets

Un gestionnaire de paquets est un ensemble d’outils fourni par une distribution permettant d’installer des logiciels.

Les paquets vont contenir les fichiers à installer à des emplacements précis ainsi que des scripts de pré et post installation permettant la configuration. Ils vont également inclure leurs dépendances à d’autres paquets, le gestionnaire de paquet installant automatiquement celles-ci.

Chaque famille de distribution va avoir son propre système de gestion de paquets pour l’installation de logiciels :

- format .deb : pour les bases Debian, avec les outils apt, apt-get, dpkg ;

- format .rpm : pour les bases Redhat, avec la commande rpm et les outils urpmi, dnf (pour Fedora), YasT (pour SUSE) ;

- format .pkg : pour les bases Slackware avec pkgtool ;

- format .apk : pour les bases Alpine Linux, avec apk-tools

- format .xz ou .zst : pour Archlinux avec le gestionnaire pacman.

À ceci peuvent s’ajouter des surcouches comme Synaptic ou Ubuntu softwarepour Ubuntu.

3 - Partie commune à n’importe quelle installation

Quelle que soit la distribution installée, le processus sera le même :

- préparation du disque (création des partitions, du système de fichiers) ;

- création d’un système minimal « chrootable »* ;

- passage en chroot (voir explication dans le chapitre 1) ;

- installation minimale en chroot pour que le système soit utilisable ;

- fixation du mot de passe root (et création si nécessaire d’un utilisateur supplémentaire),

- configuration des partitions à monter (/etc/fstab),

- installation d’un noyau et d’un initrd/initramfs,

- installation d’un chargeur d’amorçage (nous utiliserons GRUB, mais il est possible d’en utiliser un autre) ;

- redémarrage et réglages post-installation :

- configuration du réseau,

- positionnement des locales pour la langue et le clavier,

- positionnement de la timezone.

Les opérations décrites dans ce chapitre devront être effectuées en préliminaire, quelle que soit la distribution installée.

*J’entends par ceci un système minimal contenant tous les binaires, toutes les bibliothèques, tous les fichiers de configuration nécessaires à la commande lancée en « chroot » (dans notre cas un shell et les commandes annexes nécessaires)

3-1 - Langue française

Depuis l’ISO Ubuntu, nous passerons tout d’abord en clavier français pour avoir un confort d’utilisation.

En mode UEFI, l’ISO Ubuntu 18.04 se charge en anglais. En mode Legacy, une boite de dialogue propose le choix de la langue de l’interface avant de charger le bureau.

Nous allons dans le menu de configuration pour passer en langue française :

Une fois le nouvel agencement clavier installé, il faut le sélectionner dans la barre en haut :

Si vous effectuez l’opération depuis un système opérationnel, vous n’aurez pas cette manipulation à effectuer.

Ubuntu 18.04 est une version vieillissante, mais rien ne changera avec les versions suivantes.

3-2 - Partitionnement

Je vais présenter ci-dessous le processus de création de partitions.

Il est possible d’appliquer le principe de ce tutoriel pour créer un dual-boot avec une autre distribution que celle active. Il vous faudra dans ce cas adapter cette partie en réduisant par exemple une partition existante de façon à pouvoir installer la nouvelle distribution dans une nouvelle partition sans écraser l’existant. Vous n’aurez pas à installer GRUB dans ce cas, l’idée étant d’ajouter la nouvelle distribution au menu GRUB préexistant.

Il nous faut tout d’abord ouvrir un terminal.

Nous passons ensuite en root grâce à la commande :

sudo -i

Depuis le terminal, nous lançons ensuite GParted :

Le disque ne fait que 10 Go, car c’est un disque virtuel pour une machine virtuelle.

Il est bien sûr possible d’utiliser parted ou gdisk (ou cfdisk en mode Legacy) pour créer les partitions.

UEFI/Legacy BIOS :

Dans le cas de l’utilisation en mode Legacy (déprécié), l’amorce du système sera contenue dans le 1er secteur du disque, à la suite de la table de partition MBR.

Dans le cas d’une installation en UEFI, cas qui sera présenté ici, il faudra créer une table de partitions GPT (Guid Partition Table) contenant une partition ESP (EFI System Partition). Chaque OS stockera un fichier .efi de chargement dans cette partition. Dans le cas d’un dual-boot, cette partition devrait déjà exister, vous pouvez donc passer la partie suivante.

3-2-1 - Création de la table de partition UEFI

Nous créons ensuite la partition ESP qui est en fait une partition FAT32 avec des attributs supplémentaires (sauf en cas d’utilisation en mode Legacy avec une table de partition MBR).

Pour cela, il faudra cliquer sur le bouton droit au niveau de l’espace disponible :

Nous créons une partition FAT32 de 200 Mo :

Sur le même principe, nous créons une partition ext4 qui contiendra notre racine et une partition pour le swap :

Les partitions seront physiquement écrites après clic sur l’icône en haut.

Vous aurez une demande de confirmation, cette opération écrase toutes les données précédemment contenues sur le disque :

Ces opérations auraient pu être effectuées en ligne de commande, mais l’avantage d’utiliser GParted, c’est qu’il formate les partitions en même temps qu’il les crée.

Il nous restera à positionner le drapeau ESP, cela se fera en cliquant avec le bouton de droite sur la partition et en sélectionnant « manage flags » :

Le fait de cocher le drapeau « esp » cochera automatiquement le drapeau « boot » et décochera msftdata coché par défaut.

Il n’est possible d’appliquer les drapeaux qu’une fois la validation de la création des partitions effectuées.

3-2-2 - Montage de la partition

Une fois le partitionnement effectué, nous montons la partition qui stockera la racine de notre système depuis la ligne de commande :

mount /dev/sda2 /mnt

4 - Debian

Pour effectuer l’installation d’une distribution à base Debian, nous utiliserons un outil nommé debootstrap qui permet l’installation des bases Debian. Cet outil va installer une base de la distribution sélectionnée dans un dossier choisi. Le choix se fera en communiquant le nom de la distribution en paramètre (comme nous le verrons un peu plus loin). deboostrap est fourni dans les paquets.

Ci-dessous une liste des versions installables avec deboostrap :

- stretch pour Debian 9 ;

- buster pour Debian 10 ;

- bullseye pour Debian 11, ;

- xenial pour Ubuntu 16.04 ;

- bionic pour Ubuntu 18.04 ;

- focal pour Ubuntu 20.04.

Liste non exhaustive, de plus anciennes versions sont disponibles.

Vous trouverez la liste des distributions gérées par debootstrap dans /usr/share/debootstrap/script

Pour pouvoir installer deboostrap, il va nous falloir modifier le fichier /etc/apt/source.list en y ajoutant le dépôt « universe » (dépôts des logiciels libres et open source maintenus par la communauté).

Fichier /etc/apt/sources.list avant modification :

deb http://archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted

Fichier /etc/apt/sources.list après modification :

deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe
deb http://security.ubuntu.com/ubuntu/ xenial-security main restricted
deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted

Une fois le fichier modifié, nous exécutons la commande suivante :

apt update

Nous installons ensuite debootstrap :

apt install debootstrap

puis nous lançons l’installation de notre distribution Debian 10 Buster dans le dossier /mnt (le point de montage de la racine de notre futur système) :

debootstrap buster /mnt

L’option « buster » représentant le nom de la distribution à préparer et /mnt le dossier où l’installation doit être effectuée.

Je vous invite à consulter la documentation pour voir les autres options de debootstrap.

Comme précisé dans le chapitre 3, il est ici sous-entendu que la partition qui contiendra la distribution est formatée et montée dans /mnt, et qu’une partition est préparée pour l’UEFI.

debootstrap va télécharger les paquets de base nécessaires à la distribution, les décompresser et les configurer dans le dossier sélectionné.

Vous pouvez voir ci-dessous le résultat fourni sur la console et la liste des paquets installés :

I: Keyring file not available at /usr/share/keyrings/debian-archive-keyring.gpg; switching to https mirror https://deb.debian.org/debian
I: Retrieving InRelease
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional required dependencies: adduser debian-archive-keyring fdisk gcc-8-base gpgv libacl1 libapt-pkg5.0 libattr1 libaudit-common libaudit1 libblkid1 libbz2-1.0 libc6 libcap-ng0 libcom-err2 libdb5.3 libdebconfclient0 libext2fs2 libfdisk1 libffi6 libgcc1 libgcrypt20 libgmp10 libgnutls30 libgpg-error0 libhogweed4 libidn2-0 liblz4-1 liblzma5 libmount1 libncursesw6 libnettle6 libp11-kit0 libpam0g libpcre3 libseccomp2 libselinux1 libsemanage-common libsemanage1 libsepol1 libsmartcols1 libss2 libstdc++6 libsystemd0 libtasn1-6 libtinfo6 libudev1 libunistring2 libuuid1 libzstd1 zlib1g
I: Found additional base dependencies: dmsetup libapparmor1 libapt-inst2.0 libargon2-1 libbsd0 libcap2 libcap2-bin libcryptsetup12 libdevmapper1.02.1 libdns-export1104 libelf1 libestr0 libfastjson4 libidn11 libip4tc0 libip6tc0 libiptc0 libisc-export1100 libjson-c3 libkmod2 liblocale-gettext-perl liblognorm5 libmnl0 libncurses6 libnetfilter-conntrack3 libnewt0.52 libnfnetlink0 libnftnl11 libpopt0 libprocps7 libslang2 libssl1.1 libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl libxtables12 lsb-base openssl xxd
I: Checking component main on https://deb.debian.org/debian...
I: Retrieving libacl1 2.2.53-4
I: Validating libacl1 2.2.53-4
I: Retrieving adduser 3.118
I: Validating adduser 3.118
I: Retrieving libapparmor1 2.13.2-10
I: Validating libapparmor1 2.13.2-10
I: Retrieving apt 1.8.2.3
I: Validating apt 1.8.2.3
…

I: Configuring tasksel...
I: Configuring libc-bin...
I: Configuring systemd...
I: Configuring ca-certificates...
I: Base system installed successfully.

Les … dans la sortie de la commande debootstrap indiquent une suppression d’informations que j’ai effectuée pour ne laisser qu’un extrait, ce principe sera appliqué sur toutes les sorties.

Nous nous plaçons ensuite dans le dossier /mnt pour faire un « chroot » dans le système de destination pour continuer la configuration. Pour cela, nous nous plaçons dans le dossier et nous montons les pseudo-dossiers /proc, /sys, /dev dans le sous-dossier contenant le futur système :

cd /mnt
mount –bind /proc proc
mount –bind /sys sys
mount –bind /dev dev
chroot .

La commande chroot attend en paramètres le dossier de destination et la commande à lancer. Sans indication, la commande lancée est /bin/sh (depuis le chroot, qui doit donc contenir celle-ci ainsi que ses dépendances comme les bibliothèques liées). Le « . » qui suit la commande chroot indique le dossier actuel.

La première opération que nous allons effectuer sera de mettre un mot de passe sur le compte root :

root@ubuntu:/# passwd root
New password:
Retype new password:
passwd: password updated successfully

Nous modifions ensuite le fichier /etc/fstabpour indiquer les partitions à monter :

# UNCONFIGURED FSTAB FOR BASE SYSTEM
/dev/sda2       /       ext4    defaults,rw     0       1
/dev/sda3       none    swap    sw      0       1

Dans l’exemple ci-dessus, nous indiquons de monter notre partition ext4 en lecture/écriture, ainsi que notre partition de swap.

Nous éditons le fichier /etc/hostname (il suffit de mettre le nom voulu dans le fichier) afin d’y positionner le nom choisi pour la machine. Selon le besoin, il pourra être pertinent de positionner le nom de la machine dans le fichier /etc/hosts.

Il va nous falloir ensuite installer un noyau.

Pour rechercher les noyaux disponibles :

apt-cache search linux-image

Dans la liste des noyaux disponibles, je choisis le noyau disponible 4.19.0.18 non signé

apt install linux-image-4.19.0-18-amd64-unsigned

à adapter à votre situation.

Il nous reste enfin à installer le chargeur d’amorçage GRUB.

Nous commençons par créer le point de montage pour la partition UEFI :

mkdir -p /boot/efi

nous montons ensuite la partition UEFI :

mount /dev/sda1 /boot/efi

puis nous procédons à l’installation des paquets de GRUB :

apt install grub-efi

Une fois l’installation des paquets de GRUB effectuée, nous procédons à l’installation proprement dite dans la partition UEFI :

grub-install

GRUB va détecter le type d’installation à faire et l’effectuer, vous devriez avoir le retour suivant :

Installing for x86_64-efi platform.
Installation finished. No error reported.

Nous créons ensuite automatiquement le fichier de configuration GRUB :

update-grub

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.19.0-18-amd64
Found initrd image: /boot/initrd.img-4.19.0-18-amd64
Adding boot menu entry for EFI firmware configuration

Si vous n’exécutez pas la commande update-grub, il n’y aura pas de fichier de configuration pour GRUB, et vous tomberez sur l’écran suivant :

Nous sortons ensuite du chroot en lançant simplement la commande :

exit

Avant de redémarrer, pour nous faciliter la configuration réseau, nous copions le fichier /etc/network/interfaces ainsi que le fichier /etc/resolv.conf qu’il faudra modifier en y mettant les adresses IP des DNS.

cp /etc/network/interfaces etc/network/interfaces
cp etc/resolv.conf etc/

puis nous éteignons la machine proprement :

poweroff

Au redémarrage, vous aurez le prompt GRUB pour le système nouvellement installé :

4-1 - Configuration post-installation

Pour les étapes de post-installation, nous effectuerons le paramétrage :

- du réseau ;

- de la langue du système ;

- du fuseau horaire.

4-1-1 - Configuration réseau

Nous commençons par activer le réseau. Il nous faut tout d’abord le nom du périphérique :

ip addr show

Avec la configuration actuelle, vous serez en clavier Qwerty.

La commande retourne enp0s3, nom de la carte réseau dans la machine virtuelle :

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:2c:2c:3a brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2c:2c3a/64 scope link
valid_lft forever preferred_lft forever

Nous l’intégrons dans le fichier /etc/network/interface.

Le fichier devra ressembler à ceci :

auto lo enp0s3
iface lo inet loopback
iface enp0s3 inet dhcp

Ceci configurera la carte réseau en DHCP. Pour une IP fixe, remplacez « inet dhcp » par « inet static » et entrez les informations complémentaires comme ci-dessous :

address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameserver 192.168.1.1 # pour Ubuntu

À adapter à votre réseau.

Ensuite, nous redémarrons le service ainsi :

service networking restart

ou ainsi :

systemctl restart networking

Il faudra également que les serveurs DNS soient configurés dans le fichier /etc/resolv.conf.

4-1-2 - Configuration des locales

Nous installons ensuite les locales :

apt install locales

puis les configurons :

dpkg-reconfigure locales

Pour que les changements soient pris en compte, il faut fermer et rouvrir la session, puis mettre à jour la liste des paquets :

apt update

Vous verrez le téléchargement de translation-fr.

4-1-3 - Clavier en français

J’installe ensuite le support du clavier français :

apt install console-setup

4-1-4 - Fuseau horaire

Il reste à configurer le fuseau horaire :

dpkg-reconfigure tzdata

Sortie sur la console :

Current default time zone: 'Europe/Paris'
Local time is now:      Fri May 27 15:57:03 CEST 2022.
Universal Time is now:  Fri May 27 13:57:03 UTC 2022.

4-1-5 - Mise à jour du fichier fstab

Nous allons remplacer les noms des périphériques dans le fichier par leur UUID. Ceci n’est pas obligatoire, mais vous permettra de ne pas avoir de problèmes de démarrage en cas d’ajout ou de suppression de disques dans la machine ou de montage du disque système dans une autre machine.

Je récupère les UUID grâce à la commande blkid et les inclus dans le fichier /etc/fstab. :

J’édite ensuite le fichier pour obtenir finalement :

UUID=99d0b0b8-1f37-4449-a89e-f49444ff70bf       /       ext4    defaults,rw     0       1
UUID=50d89b74-296c-41e6-8400-afe1e65e2b45       none    swap    sw      0       1

Les UUID sont uniques et seront donc différents chez vous.

Il faut ensuite mettre l’initramfs à jour :

update-initramfs -u

Vous aurez un message d’erreur indiquant de mettre à jour le fichier /etc/initramfs-tools/conf.d/resume. Ceci est nécessaire pour la gestion de la mise en veille.

Puis actualiser GRUB :

update-grub

5 - Ubuntu

Nous installons pour l’exemple une version Ubuntu 18.04 Bionic Beaver.

L’installation se fait avec debootstrap, tout comme pour Debian vu dans le chapitre précédent.

deboostrap bionic /mnt

Nous entrons ensuite en chroot comme vu précédemment, puis changeons le mot de passe et mettons à jour le fichier /etc/fstab.

nano n’est pas installé par défaut dans le debootstrap Ubuntu, nous l’installons :

apt install nano

Nous installons ensuite un noyau.

Lors de l’installation du package de noyau, GRUB Legacy est également installé. Nous ne le configurerons pas, la version installée étant la version non UEFI.

Il vous faut donc installer le paquet grub-efi :

Apt install grub-efi

Au redémarrage, le système se charge, mais ne propose pas de menu GRUB.

Si vous souhaitez avoir le menu GRUB, ajoutez la ligne suivante dans /etc/default/grub :

GRUB_TIMEOUT_STYLE=menu

Pour prendre en compte le changement, effectuez un :

update-grub

Vous pouvez bien sûr modifier directement le fichier /etc/default/grub depuis le chroot avant le 1er démarrage.

5-1 - Configuration post-installation

La version Ubuntu 18.04 utilise dorénavant netplan au lieu de ifupdown. Le fichier /etc/network/interfaces n’est plus utilisé. Il va falloir créer un fichier de configuration au format yaml.

Voici un exemple de fichier /etc/netplan/config.yaml :

network:
ethernets:
enp0s3:
dhcp4: true
version: 2

Et un autre pour une IP fixe :

network:
ethernets:
enp0s3:
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
version: 2

Adressage à adapter à votre situation.

La configuration sera prise en compte après l’appel de la commande :

netplan apply

Vous pouvez toujours utiliser l’ancienne méthode en installant le paquet ifupdown. Il vous faudra le faire depuis le chroot.

Pour les locales, les paquets sont déjà présents, vous aurez juste à faire la configuration :

dpkg-reconfigure locales

puis :

apt update

Pour passer le clavier en français, utilisez la commande suivante :

dpkg-reconfigure keyboard-configuration

Il reste ensuite à reconfigurer le fuseau horaire :

dpkg-reconfigure tzdata

6 - Devuan

Le projet Devuan est un fork du projet Debian datant de la controverse due au passage de Debian à systemd au lieu d’init, certains développeurs considérant que systemd ne respecte pas le principe KISS.

Les versions disponibles sont :

- Devuan 1.0 Jessie, basée sur Debian 8 Jessie ;

- Devuan 2.0 ASCII, basée sur Debian 9 Stretch ;

- Devuan 3.0 Beowulf, basée sur Debian 10 Buster ;

- Devuan 4.0 Chimaera, basée sur Debian 11 Bulleye.

Le principe sera le même que pour Debian et utilisera debootstrap. Par contre, il faudra récupérer le paquet debootstrap depuis les dépôts Devuan, la version debootstrap Debian n’intégrant pas les distributions Devuan.

Une fois les partitions créées, nous récupérons le paquet dans les dépôts Devuan :

wget http://deb.devuan.org/devuan/pool/main/d/debootstrap/debootstrap_1.0.126+nmu1devuan1_all.deb

Les versions de paquets peuvent évoluer dans le temps, vous pouvez vous connecter sur http://deb.devuan.org pour contrôler la version à jour.

Une fois le paquet téléchargé, nous l’installons :

dpkg -i http://deb.devuan.org/devuan/pool/main/d/debootstrap/debootstrap_1.0.126+nmu1devuan1_all.deb

puis nous lançons la commande debootstrap, avec dans notre cas la version beowulf :

debootstrap beowulf /mnt

Ce qui renvoie :

: Keyring file not available at /usr/share/keyrings/devuan-archive-keyring.gpg; switching to https mirror https://pkgmaster.devuan.org/merged
I: Retrieving InRelease
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on https://pkgmaster.devuan.org/merged...
I: Retrieving adduser 3.118
I: Validating adduser 3.118
…

I: Configuring libc-bin...
I: Configuring ca-certificates...
I: Base system installed successfully.

Le reste de l’installation s’effectuera comme pour Debian.

Pour les cartes réseau, Devuan garde l’ancienne nomenclature eth0.

7 - Fedora

La distribution Fedora est dérivée de RedHat qui la subventionne.

Pour effectuer une installation de Fedora, nous ne pouvons pas utiliser debootstrap, qui n’est fonctionnel que pour des bases Debian.

Comme système de base, nous allons télécharger une archive destinée aux conteneurs.

Nous commençons par créer un dossier temporaire dans le dossier /mnt :

cd /mnt
mkdir tmp
cd tmp

Nous y téléchargeons notre archive depuis un miroir Fedora :

wget https://mirror.in2p3.fr/pub/fedora/linux/releases/36/Container/x86_64/images/Fedora-Container-Base-36-1.5.x86_64.tar.xz

Une fois le téléchargement effectué, nous décompressons l’archive :

unxz Fedora-Container-Base-36-1.5.x86_64.tar.xz
tar -xvf Fedora-Container-Base-36-1.5.x86_64.tar

tar est capable de décompresser les fichiers avant de faire l’extraction de l’archive il faudra ajouter l’option :

-J pour les archives xz

-j pour les archives bz2

-z pour les archives gzip (les plus courantes)

Une fois l’archive décompressée, vous obtenez un dossier avec pour nom une suite hexadécimale et quelques fichiers .json.

Ce dossier contient une archive .tar nommée layer.tar.

Nous la déplaçons à la racine /mnt :

mv ed8a9ffa6e2bbc847698b0d7381bb8a1c8052dcdd16ed91173f5c7ecce38d80a/layer.tar ../

Une fois le fichier .tar déplacé, nous pouvons effacer ce qu’il reste dans le dossier tmp :

cd ..
rm tmp/* -rf

Nous décompressons le fichier .tar :

tar -xvf layer.tar
rm layer.tar

À ce stade, nous avons le contenu minimal permettant de continuer en chroot.

Nous copions le fichier resolv.conf :

cp /etc /resolv.conf etc/

puis entrons dans le chroot :

mount –bind /proc proc
mount –bind /sys sys
mount –bind /dev dev
chroot .

Nous installons les paquets complémentaires pour avoir un système exploitable :

dnf groupinstall "Minimal Install"

dnf (Dandified Yum) est le gestionnaire de paquets succédant à yum, le gestionnaire de paquets de ReHat et Fedora.

Sortie de la commande dnf :

Fedora 36 - x86_64                              7.2 MB/s |  81 MB 00:11
Fedora 36 openh264 (From Cisco) - x86_64        1.5 kB/s | 2.5 kB 00:01
Fedora Modular 36 - x86_64                      2.4 MB/s | 2.4 MB 00:01
Fedora 36 - x86_64 - Updates                    4.3 MB/s |  21 MB 00:04
Fedora Modular 36 - x86_64 - Updates            3.1 MB/s | 2.2 MB 00:00
Dependencies resolved.
================================================================================
Package                        Arch   Version                    Repo Size
================================================================================
Upgrading:
glib2                          x86_64 2.72.2-1.fc36 updates 2.7 M
libblkid                       x86_64 2.38-1.fc36 updates 106 k
libmount                       x86_64 2.38-1.fc36

…

Installing Environment Groups:
Minimal Install
Installing Groups:
Core

Transaction Summary
================================================================================
Install  199 Packages
Upgrade    7 Packages

Total download size: 109 M
Is this ok [y/N]:

Une fois la validation faite, l’installation continue :

Downloading Packages:
(1/206): bubblewrap-0.5.0-2.fc36.x86_64.rpm     1.0 MB/s |  54 kB 00:00
(2/206): c-ares-1.17.2-2.fc36.x86_64.rpm        1.8 MB/s | 106 kB 00:00

…

(205/206): util-linux-core-2.38-1.fc36.x86_64.r 5.8 MB/s | 454 kB     00:00
(206/206): selinux-policy-targeted-36.10-1.fc36 3.0 MB/s | 6.4 MB     00:02
--------------------------------------------------------------------------------
Total                                            11 MB/s | 109 MB     00:09
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Running scriptlet: selinux-policy-targeted-36.10-1.fc36.noarch            1/1
Preparing        :                                                        1/1
Upgrading        : systemd-libs-250.7-1.fc36.x86_64                     1/213
Upgrading        : libuuid-2.38-1.fc36.x86_64                           2/213
Upgrading        : libblkid-2.38-1.fc36.x86_64

…

212/213
Cleanup          : systemd-libs-250.3-8.fc36.x86_64 213/213
Running scriptlet: grub2-common-1:2.06-42.fc36.noarch 213/213
Generating grub configuration file ...
/usr/share/os-prober/common.sh: line 328: which: command not found
Adding boot menu entry for UEFI Firmware Settings ...
done

Running scriptlet: selinux-policy-targeted-36.10-1.fc36.noarch 213/213
Running scriptlet: systemd-resolved-250.7-1.fc36.x86_64 213/213
Running scriptlet: crypto-policies-scripts-20220203-2.git112f859.fc 213/213
Running scriptlet: nss-3.79.0-1.fc36.x86_64 213/213
Running scriptlet: sssd-common-2.7.3-1.fc36.x86_64 213/213
Running scriptlet: firewalld-1.0.5-1.fc36.noarch 213/213
Running scriptlet: systemd-libs-250.3-8.fc36.x86_64 213/213
Creating group 'systemd-coredump' with GID 996.
Creating user 'systemd-coredump' (systemd Core Dumper) with UID 996 and GID 996.
Creating group 'systemd-timesync' with GID 995.
Creating user 'systemd-timesync' (systemd Time Synchronization) with UID 995 and GID 995.

Verifying        : audit-3.0.8-1.fc36.x86_64 1/213
Verifying        : bluez-5.64-1.fc36.x86_64 2/213
Verifying        : bubblewrap-0.5.0-2.fc36.x86_64

…

212/213
Verifying        : util-linux-core-2.38-0.2.fc36.x86_64 213/213

Upgraded:
glib2-2.72.2-1.fc36.x86_64              libblkid-2.38-1.fc36.x86_64
libmount-2.38-1.fc36.x86_64             libsmartcols-2.38-1.fc36.x86_64
libuuid-2.38-1.fc36.x86_64              systemd-libs-250.7-1.fc36.x86_64
util-linux-core-2.38-1.fc36.x86_64
Installed:
ModemManager-glib-1.18.8-1.fc36.x86_64
NetworkManager-1:1.38.0-2.fc36.x86_64
NetworkManager-libnm-1:1.38.0-2.fc36.x86_64

…

zram-generator-1.1.2-1.fc36.x86_64
zram-generator-defaults-1.1.2-1.fc36.noarch

Complete!

Nous ajoutons nano et passwd :

dnf install nano passwd

Vous pouvez aussi utiliser vi qui est présent par défaut.

Nous créons ensuite un utilisateur, Fedora interdisant le login en root :

useradd maintenance

puis nous lui affectons un mot de passe :

passwd maintenance

Nous modifions ensuite le fichier /etc/sudoers pour qu’il ait les droits administrateur en lançant la commande visudo, qui vérifiera la syntaxe correcte de celui-ci.

Nous y ajoutons la ligne suivante :

maintenance     ALL=(ALL)       ALL

Nous éditons ensuite le fichier /etc/fstab :

/dev/sda2       /       ext4    defaults,rw     0       1
/dev/sda3       none    swap    sw      0       1

puis nous procédons à l’Installation d’un noyau :

dnf install kernel

Sortie :

Last metadata expiration check: 0:07:59 ago on Fri Jul  8 05:47:06 2022.
Dependencies resolved.
================================================================================
Package                   Arch       Version                 Repository   Size
================================================================================
Installing:
kernel                    x86_64     5.18.9-200.fc36         updates     252 k
Installing dependencies:
kernel-core               x86_64     5.18.9-200.fc36         updates      49 M
kernel-modules            x86_64     5.18.9-200.fc36         updates      57 M
linux-firmware-whence     noarch     20220610-135.fc36       updates      50 k
Installing weak dependencies:
linux-firmware            noarch     20220610-135.fc36       updates     146 M

Transaction Summary
================================================================================
Install  5 Packages

Total download size: 252 M
Installed size: 306 M
Is this ok [y/N]: y
Downloading Packages:
(1/5): kernel-5.18.9-200.fc36.x86_64.rpm        2.1 MB/s | 252 kB     00:00
(2/5): kernel-core-5.18.9-200.fc36.x86_64.rpm   3.9 MB/s |  49 MB     00:12
(3/5): linux-firmware-whence-20220610-135.fc36. 867 kB/s |  50 kB     00:00
(4/5): kernel-modules-5.18.9-200.fc36.x86_64.rp 4.1 MB/s |  57 MB     00:13
(5/5): linux-firmware-20220610-135.fc36.noarch. 7.1 MB/s | 146 MB     00:20
--------------------------------------------------------------------------------
Total                                            12 MB/s | 252 MB     00:21
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing        :                                                        1/1
Installing       : linux-firmware-whence-20220610-135.fc36.noarch         1/5
Installing       : linux-firmware-20220610-135.fc36.noarch                2/5
Installing       : kernel-core-5.18.9-200.fc36.x86_64                     3/5
Running scriptlet: kernel-core-5.18.9-200.fc36.x86_64                     3/5
Installing       : kernel-modules-5.18.9-200.fc36.x86_64                  4/5
Running scriptlet: kernel-modules-5.18.9-200.fc36.x86_64                  4/5
Installing       : kernel-5.18.9-200.fc36.x86_64                          5/5
Running scriptlet: kernel-core-5.18.9-200.fc36.x86_64                     5/5
Running scriptlet: kernel-modules-5.18.9-200.fc36.x86_64                  5/5
Running scriptlet: kernel-5.18.9-200.fc36.x86_64                          5/5
Verifying        : kernel-5.18.9-200.fc36.x86_64                          1/5
Verifying        : kernel-core-5.18.9-200.fc36.x86_64                     2/5
Verifying        : kernel-modules-5.18.9-200.fc36.x86_64                  3/5
Verifying        : linux-firmware-20220610-135.fc36.noarch                4/5
Verifying        : linux-firmware-whence-20220610-135.fc36.noarch         5/5

Installed:
kernel-5.18.9-200.fc36.x86_64
kernel-core-5.18.9-200.fc36.x86_64
kernel-modules-5.18.9-200.fc36.x86_64
linux-firmware-20220610-135.fc36.noarch
linux-firmware-whence-20220610-135.fc36.noarch

Complete!

Installation de GRUB EFI :

Nous commençons par monter la partition EFI :

mkdir /boot/efi
mount /dev/sda1 /boot/efi

puis installons les paquets nécessaires :

dnf install grub2 grub2-efi-modules shim

Sortie :

Last metadata expiration check: 0:16:57 ago on Fri Jul  8 05:47:06 2022.
Dependencies resolved.
================================================================================
Package                     Arch        Version             Repository    Size
================================================================================
Installing:
grub2-efi-aa64-modules      noarch      1:2.06-42.fc36      updates      1.0 M
grub2-pc                    x86_64      1:2.06-42.fc36      updates       18 k
shim-x64                    x86_64      15.6-1              updates      468 k
Installing dependencies:
efi-filesystem              noarch      5-5.fc36            fedora       7.8 k
grub2-efi-x64               x86_64      1:2.06-42.fc36      updates      1.3 M
grub2-pc-modules            noarch      1:2.06-42.fc36      updates      915 k
mokutil                     x86_64      2:0.6.0-3.fc36      updates       47 k
which                       x86_64      2.21-32.fc36        fedora        42 k

Transaction Summary
================================================================================
Install  8 Packages

Total download size: 3.8 M
Installed size: 17 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): efi-filesystem-5-5.fc36.noarch.rpm       129 kB/s | 7.8 kB     00:00
(2/8): which-2.21-32.fc36.x86_64.rpm            523 kB/s |  42 kB     00:00
(3/8): grub2-pc-2.06-42.fc36.x86_64.rpm         246 kB/s |  18 kB     00:00
(4/8): grub2-efi-aa64-modules-2.06-42.fc36.noar 5.1 MB/s | 1.0 MB     00:00
(5/8): mokutil-0.6.0-3.fc36.x86_64.rpm          2.2 MB/s |  47 kB     00:00
(6/8): shim-x64-15.6-1.x86_64.rpm               5.0 MB/s | 468 kB     00:00
(7/8): grub2-pc-modules-2.06-42.fc36.noarch.rpm 4.2 MB/s | 915 kB     00:00
(8/8): grub2-efi-x64-2.06-42.fc36.x86_64.rpm    4.1 MB/s | 1.3 MB     00:00
--------------------------------------------------------------------------------
Total                                           1.9 MB/s | 3.8 MB     00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing        :                                                        1/1
Installing       : efi-filesystem-5-5.fc36.noarch                         1/8
Installing       : grub2-efi-x64-1:2.06-42.fc36.x86_64                    2/8
Installing       : mokutil-2:0.6.0-3.fc36.x86_64                          3/8
Installing       : grub2-pc-modules-1:2.06-42.fc36.noarch                 4/8
Installing       : which-2.21-32.fc36.x86_64                              5/8
Installing       : grub2-pc-1:2.06-42.fc36.x86_64                         6/8
Installing       : shim-x64-15.6-1.x86_64                                 7/8
Installing       : grub2-efi-aa64-modules-1:2.06-42.fc36.noarch           8/8
Running scriptlet: grub2-efi-aa64-modules-1:2.06-42.fc36.noarch           8/8
Verifying        : efi-filesystem-5-5.fc36.noarch                         1/8
Verifying        : which-2.21-32.fc36.x86_64                              2/8
Verifying        : grub2-efi-aa64-modules-1:2.06-42.fc36.noarch           3/8
Verifying        : grub2-efi-x64-1:2.06-42.fc36.x86_64                    4/8
Verifying        : grub2-pc-1:2.06-42.fc36.x86_64                         5/8
Verifying        : grub2-pc-modules-1:2.06-42.fc36.noarch                 6/8
Verifying        : mokutil-2:0.6.0-3.fc36.x86_64                          7/8
Verifying        : shim-x64-15.6-1.x86_64                                 8/8

Installed:
efi-filesystem-5-5.fc36.noarch
grub2-efi-aa64-modules-1:2.06-42.fc36.noarch
grub2-efi-x64-1:2.06-42.fc36.x86_64
grub2-pc-1:2.06-42.fc36.x86_64
grub2-pc-modules-1:2.06-42.fc36.noarch
mokutil-2:0.6.0-3.fc36.x86_64
shim-x64-15.6-1.x86_64
which-2.21-32.fc36.x86_64

Complete!

Contrairement aux installations déjà vues, il n’est pas nécessaire de lancer grub-install, GRUB est à ce stade installé.

Il faudra par contre procéder à la configuration. Il n’y a pas sous Fedora de commande update-grub, la commande à lancer est :

grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Sortie :

Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done

La dernière opération à effectuer sera de déclencher un autorelabel selinux avec la commande :

touch .autorelabel

Cette commande va créer un fichier vide .autorelabel à la racine.

Le premier démarrage prendra du temps et finira par un redémarrage, ceci à cause de l’autorelabel SELinux.

L’autorelabel permet de réappliquer la politique de contrôle d’accès aux éléments du système.

7-1 - Post-installation

Nous effectuerons les mêmes opérations de post-installation que celles déjà vues.

7-1-1 - Paramétrage réseau

Obtention de la liste des cartes réseau :

nmcli con show -a

Par défaut, le DHCP est activé, si vous souhaitez passer en IP fixe (IP 192.168.1.200 dans mon cas de figure), voici comment faire :

sudo -s nmcli connection modify 'Wired connection 1' IPv4.address 192.168.1.200/24
sudo -s nmcli connection modify 'Wired connection 1' IPv4.gateway 192.168.1.1
sudo -s nmcli connection modify 'Wired connection 1' IPv4.dns 192.168.1.1
sudo -s nmcli connection modify 'Wired connection 1' IPv4.method manual
sudo -s nmcli connection down 'Wired connection 1’
sudo -s nmcli connection up 'Wired connection 1’

7-1-2 - Installation des locales en français

Nous recherchons le paquet nécessaire :

dnf search langpacks | grep fr

Sortie :

Fedora 36 - x86_64                              7.5 MB/s |  81 MB     00:10
Fedora 36 openh264 (From Cisco) - x86_64        1.2 kB/s | 2.5 kB     00:02
Fedora Modular 36 - x86_64                      2.8 MB/s | 2.4 MB     00:00
Fedora 36 - x86_64 - Updates                    6.9 MB/s |  21 MB     00:03
Fedora Modular 36 - x86_64 - Updates            1.8 MB/s | 2.2 MB     00:01
langpacks-af.noarch : Afrikaans langpacks meta-package
langpacks-core-af.noarch : Afrikaans langpacks core meta-package
langpacks-core-fr.noarch : French langpacks core meta-package
langpacks-fr.noarch : French langpacks meta-package
langpacks-core-font-af.noarch : Afrikaans core font meta-package
langpacks-core-font-fr.noarch : French core font meta-package

Il en ressort le paquet langpacks-fr que nous installons :

sudo -s dnf install langpacks-fr

Nous listons ensuite les locales disponibles :

localectl list-locales

Qui nous retournera :

C.UTF-8
fr_BE.UTF-8
fr_CA.UTF-8
fr_CH.UTF-8
fr_FR.UTF-8
fr_LU.UTF-8

Nous changeons la locale avec la commande :

sudo -s localectl set-locale LANG=fr_FR.UTF8

Pour afficher la locale en cours :

localectl

qui en l’état retournera :

System Locale: LANG=fr_FR.UTF8
VC Keymap: us
X11 Layout: us

Nous voyons que les locales sont bien FR, mais pas le clavier

7-1-3 - Passage du clavier en français

Nous commençons par lister les agencements (keymaps) disponibles :

localectl list-keymaps | grep fr

Nous choisissions latin9 :

sudo -s localectl set-keymap fr-latin9

7-1-4 - Fuseau horaire

Pour avoir la liste des fuseaux horaires (timezone) disponibles, utilisez la commande suivante :

timedatectl list-timezones

Sélection du fuseau :

sudo -s timedatectl set-timezone Europe/Paris

Les commandes localectl, timedatectl sont utilisables sur Debian également, celles-ci étant des commandes systemd.

8 - OpenSUSE

La société allemande à l’origine de la distribution SUSE fournit deux versions :

- SUSE Linux entreprise, version payante ;

- openSUSE : version communautaire.

(Open)SUSE utilise le format de paquets .rpm de RedHat.

Il s’agit d’une des plus anciennes distributions commerciales.

Pour procéder à l’installation d’une distribution SUSE, nous allons utiliser l’outil yum, gestionnaire de paquets RPM utilisé auparavant par Fedora, mais aussi CentOS et SUSE.

Nous allons utiliser le portage de yum disponible dans les dépôts Debian.

Nous commençons par ajouter le dépôt universe dans /etc/apt/sources.list, puis effectuons un :

apt update

Nous installons ensuite yum :

apt install yum-utils

Nous créons ensuite un fichier de dépôt /etc/yum/repos.d/opensuse-leap-15.3.repo

[opensuse-leap-15.3]
name=OpenSUSE Leap 15.3
baseurl=http://download.opensuse.org/distribution/leap/15.3/repo/oss/
enabled=0
gpgcheck=0

Nous installons les paquets minimums rpm-repos, bash et zypper dans le dossier /mnt :

yum --disablerepo=\* --enablerepo=opensuse-leap-15.3 --installroot=/mnt install rpm-repos-openSUSE-Leap bash zypper

Retour :

opensuse-leap-15.3                                          |  10 kB 00:00
opensuse-leap-15.3/primary                                  |  24 MB 00:02
opensuse-leap-15.3 93437/93437
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package bash.x86_64 0:4.4-19.3.1 will be installed
--> Processing Dependency: libc.so.6(GLIBC_2.15)(64bit) for package: bash-4.4-19.3.1.x86_64
--> Processing Dependency: libreadline.so.7(READLINE_6.3)(64bit) for package: bash-4.4-19.3.1.x86_64
--> Processing Dependency: libdl.so.2(GLIBC_2.2.5)(64bit) for package: bash-4.4-19.3.1.x86_64

…

---> Package libzio1.x86_64 0:1.06-2.20 will be installed
---> Package pinentry.x86_64 0:1.1.0-4.3.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package                 Arch   Version                Repository          Size
================================================================================
Installing:
bash                    x86_64 4.4-19.3.1             opensuse-leap-15.3 521 k
rpm-repos-openSUSE-Leap x86_64 1500-lp153.2.6.2       opensuse-leap-15.3  11 k
zypper                  x86_64 1.14.46-13.1           opensuse-leap-15.3 1.6 M
Installing for dependencies:
boost-license1_66_0     noarch 1.66.0-10.1            opensuse-leap-15.3  21 k
coreutils               x86_64 8.32-1.2               opensuse-leap-15.3 1.0 M

…

terminfo-base           x86_64 6.1-5.6.2              opensuse-leap-15.3 206 k
update-alternatives     x86_64 1.19.0.4-2.48          opensuse-leap-15.3  45 k

Transaction Summary
================================================================================
Install      85 Packages

Total download size: 26 M
Installed size: 89 M
Is this ok [y/N]: y

Downloading Packages:
(1/85): bash-4.4-19.3.1.x86_64.rpm                          | 521 kB 00:00
(2/85): boost-license1_66_0-1.66.0-10.1.noarch.rpm          |  21 kB 00:00
(3/85): coreutils-8.32-1.2.x86_64.rpm                       | 1.0 MB 00:00

…

(83/85): terminfo-base-6.1-5.6.2.x86_64.rpm                 | 206 kB 00:00
(84/85): update-alternatives-1.19.0.4-2.48.x86_64.rpm       |  45 kB 00:00
(85/85): zypper-1.14.46-13.1.x86_64.rpm                     | 1.6 MB 00:00
--------------------------------------------------------------------------------
Total                                           2.2 MB/s |  26 MB     00:11
Running Transaction Check
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : boost-license1_66_0-1.66.0-10.1.noarch                      1/85
Installing : system-user-root-20190513-3.3.1.noarch                      2/85
Installing : filesystem-15.0-11.3.2.x86_64

…

83/85
Installing : zypper-1.14.46-13.1.x86_64 84/85
Installing : rpm-repos-openSUSE-Leap-1500-lp153.2.6.2.x86_64 85/85

Installed:
bash.x86_64 0:4.4-19.3.1
rpm-repos-openSUSE-Leap.x86_64 0:1500-lp153.2.6.2
zypper.x86_64 0:1.14.46-13.1

Dependency Installed:
boost-license1_66_0.noarch 0:1.66.0-10.1
coreutils.x86_64 0:8.32-1.2
diffutils.x86_64 0:3.6-4.3.1

…

terminfo-base.x86_64 0:6.1-5.6.2
update-alternatives.x86_64 0:1.19.0.4-2.48

Complete!

Nous passons ensuite en chroot :

cd /mnt
cp /etc/resolv.conf etc
mount --bind /proc proc
mount --bind /sys sys
mount --bind /dev dev
chroot .

Nous reconstituons la base RPM :

rpm –rebuilddb

Nous y intégrons la clé de dépôt :

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-openSUSE

Nous utilisons la commande zypper, permettant l’utilisation du gestionnaire de paquets Zypp d’OpenSUSE.

Nous choisissons l’option ar pour « add repo » :

zypper ar -r /etc/yum.repos.d/opensuse-leap-oss.repo

Sortie :

Adding repository 'openSUSE Leap 15.3 - OSS' .............................[done]
Repository 'openSUSE Leap 15.3 - OSS' successfully added

URI         : http://download.opensuse.org/distribution/leap/15.3/repo/oss/
Enabled     : Yes
GPG Check   : Yes
Autorefresh : No
Priority    : 99 (default priority)

Adding repository 'openSUSE Leap 15.3 - OSS - Debug' .....................[done]
Repository 'openSUSE Leap 15.3 - OSS - Debug' successfully added

URI         : http://download.opensuse.org/debug/distribution/leap/15.3/repo/oss/
Enabled     : No
GPG Check   : Yes
Autorefresh : No
Priority    : 99 (default priority)

Adding repository 'openSUSE Leap 15.3 - OSS - Source' ....................[done]
Repository 'openSUSE Leap 15.3 - OSS - Source' successfully added

URI         : http://download.opensuse.org/distribution/leap/15.3/repo/src-oss/
Enabled     : No
GPG Check   : Yes
Autorefresh : No
Priority    : 99 (default priority)

Adding repository 'openSUSE Leap 15.3 - OSS - Updates' ...................[done]
Repository 'openSUSE Leap 15.3 - OSS - Updates' successfully added

URI         : http://download.opensuse.org/update/leap/15.3/oss/
Enabled     : Yes
GPG Check   : Yes
Autorefresh : No
Priority    : 99 (default priority)

Adding repository 'openSUSE Leap 15.3 - OSS - Updates - Debug' ...........[done]
Repository 'openSUSE Leap 15.3 - OSS - Updates - Debug' successfully added

URI         : http://download.opensuse.org/debug/update/leap/15.3/oss/
Enabled     : No
GPG Check   : Yes
Autorefresh : No
Priority    : 99 (default priority)

Repository priorities are without effect. All enabled repositories share the same priority.

Nous lançons un rafraîchissement de la base zypper :

zypper refresh

Sortie :

Retrieving repository 'openSUSE Leap 15.3 - OSS' metadata -------------------[\]

Note: Received 3 new package signing keys from repository openSUSE Leap 15.3 -
OSS:

Those additional keys are usually used to sign packages shipped by the
repository. In order to validate those packages upon download and installation
the new keys will be imported into the rpm database.

New:
Key Fingerprint:  4E98 E675 19D9 8DC7 362A 5990 E3A5 C360 307E 3D54
Key Name:         SuSE Package Signing Key <build@suse.de>
Key Algorithm:    RSA 1024
Key Created:      Thu Mar 15 15:26:29 2018
Key Expires:      Mon Mar 14 15:26:29 2022 (EXPIRED)
Rpm Name:         gpg-pubkey-307e3d54-5aaa90a5

New:
Key Fingerprint:  637B 32FF 3D83 F07A 7AE1 C40A 9C21 4D40 6517 6565
Key Name:         openSUSE:Backports OBS Project <openSUSE:Backports@build.opensuse.org>
Key Algorithm:    RSA 2048
Key Created:      Wed Oct  2 13:17:53 2019
Key Expires:      Fri Dec 10 13:17:53 2021 (EXPIRED)
Rpm Name:         gpg-pubkey-65176565-5d94a381

New:
Key Fingerprint:  FEAB 5025 39D8 46DB 2C09 61CA 70AF 9E81 39DB 7C82
Key Name:         SuSE Package Signing Key <build@suse.de>
Key Algorithm:    RSA 2048
Key Created:      Mon Sep 21 08:21:47 2020
Key Expires:      Fri Sep 20 08:21:47 2024
Rpm Name:         gpg-pubkey-39db7c82-5f68629b

The repository metadata introducing the new keys have been signed and
validated by the trusted key:

Repository:       openSUSE Leap 15.3 - OSS
Key Fingerprint:  22C0 7BA5 3417 8CD0 2EFE 22AA B88B 2FD4 3DBD C284
Key Name:         openSUSE Project Signing Key <opensuse@opensuse.org>
Key Algorithm:    RSA 2048
Key Created:      Mon May  5 08:37:40 2014
Key Expires:      Thu May  2 08:37:40 2024
Rpm Name:         gpg-pubkey-3dbdc284-53674dd4

Retrieving repository 'openSUSE Leap 15.3 - OSS' metadata ................[done]
Building repository 'openSUSE Leap 15.3 - OSS' cache .....................[done]
Retrieving repository 'openSUSE Leap 15.3 - OSS - Updates' metadata ......[done]
Building repository 'openSUSE Leap 15.3 - OSS - Updates' cache ...........[done]
All repositories have been refreshed.

Reconstruction de la base RPM pour éviter une erreur d’installation :

rpm --rebuilddb

Je continue par l’installation de vim, nano et shadow pour la commande passwd, avec zypper.

zypper install vim nano shadow

À ce stade, vous aurez les commandes nécessaires au changement de mot de passe :

bash-4.4# passwd
New password:
Retype password:
passwd: password for root changed by root

puis nous modifions le fichier fstab :

/dev/sda2       /       ext4    defaults,rw     0       1
/dev/sda3       none    swap    sw      0       1

Nous continuons par l’installation d’un noyau :

zypper install kernel-default

Durant l’installation (dans une machine virtuelle avec VirtualBox), j’ai eu l’erreur suivante :

(156/156) Installing: virtualbox-kmp-default-6.1.30_k5.3.18_59.34-lp153.2[error]
Installation of virtualbox-kmp-default-6.1.30_k5.3.18_59.34-lp153.2.15.1.x86_64 failed:
Error: Subprocess failed. Error: RPM failed: /var/tmp/rpm-tmp.L55BHX: line 1: /usr/lib/module-init-tools/kernel-scriptlets/kmp-pre: No such file or directory
error: %prein(virtualbox-kmp-default-6.1.30_k5.3.18_59.34-lp153.2.15.1.x86_64) scriptlet failed, exit status 127
error: virtualbox-kmp-default-6.1.30_k5.3.18_59.34-lp153.2.15.1.x86_64: install failed

Abort, retry, ignore? [a/r/i] (a):

En sélectionnant « ignore » la procédure a continué.

Installation de GRUB :

Je commence par modifier le fichier /etc/os-release pour remplacer le nom « dummy » par « OpenSUSE », ceci afin de ne pas avoir une entrée UEFI nommée « Dummy »

Nous préparons le point de montage UEFI :

mkdir /boot/efi
mount /dev/sda1 /boot/efi

Puis installons les paquets afférents à GRUB :

zypper install grub2-efi shim

L’installation proprement dite s’effectuera grâce à la commande :

shim-install

Qui retournera :

copying /usr/share/efi/x86_64/grub.efi to /boot/efi/EFI/dummy/grub.efi
Installing for x86_64-efi platform.
Installation finished. No error reported.
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0004,0000,0001,0002,0003
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB2-01700376
Boot0002* UEFI VBOX HARDDISK VB9c3fe415-e1b68cb7
Boot0003* EFI Internal Shell
Boot0004* opensuse-secureboot

Nous créons le fichier de configuration de GRUB :

grub2-mkconfig -o /boot/efi/EFI/opensuse/grub.cfg

Pour faciliter l’installation réseau après redémarrage, nous allons installer le paquet yast2-network et iputils.

YasT (Yet Another Setup Tool) est l’outil graphique d’installation (il est également disponible en mode texte grâce à Ncurses) fourni avec openSUSE et se lançant depuis un CD d’installation openSUSE.

zypper install yast2-network iptutils

8-1 - Configuration post-installation

8-1-1 - Paramétrage réseau

Une fois le système fraîchement installé redémarré, nous lançons la commande Yast pour facilement configurer le réseau. Il faudra se rendre sur la ligne « system » :

Une fois « network settings » sélectionné, yast trouve la carte réseau.

Nous cliquons « edit » (F4) comme indiqué pour effectuer le paramétrage, ci-dessous exemple avec sélection DHCP :

Écran affiché une fois la sélection effectuée :

Avant de quitter Yast, vous pouvez aussi modifier le hostname.

Après validation (F10), la configuration s’effectue :

Il restera à fixer les DNS dans le fichier /etc/resolv.conf.

8-1-2 - Paramétrage des locales

Pour configurer les locales, la procédure est la même que pour Fedora, en utilisant systemd.

Listage les locales disponibles :

localectl list-locales | grep FR

Changement de la locale :

localectl set-locale LANG=fr_FR.UTF8

8-1-3 - Passage du clavier en français

Tout comme pour Fedora, voici ci-dessous la commande pour lister les locales contenant fr :

localectl list-keymaps | grep fr

Nous choisissions latin9 :

localectl set-keymap fr-latin9

8-1-4 - Fuseau horaire

Nous avons tout d’abord besoin d’installer le paquet timezone :

zypper install timezone

Nous appliquons le fuseau de Paris :

timedatectl set-timezone Europe/Paris

9 - Slackware

Slackware est à ma connaissance la plus vieille distribution Linux en activité.

Pour effectuer une installation Slackware, nous commencerons par récupérer le fichier d’installation dédié à une clé USB ou à un serveur PXE que nous trouverons dans le sous-répertoire « usb-and-pxe-installers » du miroir choisi.

Dans le cas présenté ici, le miroir sera :

http://slackware.uk/slackware/slackware64-14.2/

Le dossier slackware64-14.2 représentant la version 14.2. La dernière version est accessible depuis « slackware64-current ».

Le fichier à télécharger se nomme usbboot.img.

cd /mnt
wget http://slackware.uk/slackware/slackware64-14.2/usb-and-pxe-installers/usbboot.img

Nous montons le fichier image dans un dossier temporaire :

mkdir tmp
mount usbboot.img tmp

Nous y récupérons l’initrd :

cp tmp/initrd.img .

Nous démontons l’image usbboot et la supprimons, nous n’en avons plus besoin :

umount tmp
rm usbboot.img

Un fichier initrd est une image cpio compressée

Nous déplaçons celle-ci dans notre dossier temporaire en changeant son extension en .gz :

mv initrd.img tmp/initrd.gz

Nous entrons dans le dossier tmp pour décompresser l’archive cpio :

cd tmp
gunzip initrd.gz
cat initrd | cpio -id
133986 blocks

Nous obtenons après extraction le contenu suivant :

root@ubuntu:~/tmp# ls
bin    dev     init    lib64       nfs   run      sys  usr
boot   etc     initrd  lost+found  proc  sbin     tag  var
cdrom  floppy  lib     mnt         root  scripts  tmp

Avant d’effectuer un chroot, nous copions le fichier resolv.conf pour avoir accès à Internet :

cp /etc/resolv.conf etc

Nous effectuons notre chroot :

mount --bind /proc proc
mount --bind /sys sys
mount --bind /dev dev
chroot .

Nous lançons ensuite le script d’installation :

/usr/lib/setup/setup

Nous obtenons l’écran suivant :

Commençons directement par la sélection du clavier :

S’affiche ensuite un écran nous proposant de taper du texte pour tester :

Comme indiqué, il faut taper 1 et retour chariot pour continuer.

Il est ensuite demandé la partition de swap, celle présente vous étant proposée :

Il nous est ensuite demandé si nous souhaitons tester les secteurs défectueux :

Nous obtenons ensuite la notification d’entrée dans le fichier fstab :

Vient ensuite la sélection de la partition à utiliser comme racine. Notre partition est également présélectionnée :

Il nous est par la suite proposé de formater ou non la partition. Celle-ci ayant été formatée par Gparted, et contenant notre chroot temporaire, il faut choisir « no » :

L’outil d’installation crée ensuite automatiquement une entrée dans fstab pour la partition EFI :

Il nous est ensuite demandé de choisir la source pour l’installation, nous choisissons donc FTP/HTTP :

Nous entrons donc l’URL miroir utilisée, dans notre cas :

http://slackware.uk/slackware/slackware64-14.2/

Ne pas oublier le « / » à la fin.

Par la suite, le nom du dossier source est demandé, dans notre cas c’est « slackware64 », nous pouvons le voir en consultant l’URL du miroir :

Une demande de confirmation est affichée

Il faut bien lire le message, pour ne pas être induit en erreur et répondre « non » pour passer à la suite. Il est indiqué que la liste de paquets a été trouvée, mais la question étant traduisible par « voulez-vous réessayez de configurer » :

Le traitement de la liste de paquets s’effectue :

Nous sont ensuite proposées les catégories de paquets à installer. Il nous faut sélectionner :

- A : base Linux system ;

- AP : various application that do not need X ;

- N : networking.

La série A contient les paquets de base nécessaires au fonctionnement, la série AP contient slackpkg, un gestionnaire de paquets et la série N contient wget, nécessaire à slackpkg.

Ces éléments sont nécessaires à une installation minimale sans interface graphique, libre à nous de personnaliser selon notre choix si l’on sait ce qu’on fait.

Sur l’écran suivant, nous choisissons le mode de sélection des paquets, ici le mode expert :

Il nous est ensuite demandé de sélectionner les paquets de la série A, ceux-ci étant tous cochés. Nous laissons les réglages tels quels :

Comme nous pouvons le voir, les paquets nécessaires sont indiqués. Je vous conseille de ne pas en décocher pour ne pas avoir de problèmes pour la suite de l’installation, empêchant par exemple le fonctionnement du gestionnaire de paquets. (exemple awk n’est pas nécessaire pour le fonctionnement d’un système minimal, mais sera nécessaire à Slackpack – non exhaustif). Nous pouvons par exemple décocher ReiserFS.

Pour la série AP, nous décocherons tout, sauf slackpkg :

Pour la série N, nous ne sélectionnerons que wget :

L’installation des paquets va ensuite commencer :

Il nous est ensuite proposé de créer une clé USB amorçable, logique pour une base d’installation USB :

Nous passons l’étape.

Puis on nous propose l’installation du gestionnaire de démarrage LILO, opération que nous passons, car nous installerons GRUB.

Nous est ensuite proposée la configuration de la souris, qui fait suite à l’installation de gpm (sauf si nous l’avons décochée) :

Comme nous ne l’utiliserons pas, nous n’activons pas le service au démarrage comme proposé :

Les services qui démarreront automatiquement sont ensuite précisés :

puis on nous demande si l’on veut choisir une police de caractères, c’est inutile pour une installation minimale en mode terminal :

La prochaine étape est la configuration de l’horloge :

suivie du choix du fuseau horaire :

Vient ensuite le mot de passe root :

L’installation automatique est terminée :

Nous quittons ensuite l’utilitaire de configuration :

Nous ne redémarrons pas, car d’une part cela n’est pas possible en chroot et d’autre part il nous reste de la configuration à faire.

Nous sortons ensuite de chroot avec la commande :

exit

/dev/sda2 où nous avons installé notre système est toujours monté dans le dossier mnt de notre dossier tmp en cours, depuis lequel nous avons effectué un chroot, le script d’installation n’ayant pas démonté les points de montage qu’il a utilisé.

Nous réeffectuons un chroot, dans l’installation définitive :

cd mnt
cp /etc/resolv.conf etc
mount --bind /proc proc
mount --bind /sys sys
mount --bind /dev dev
chroot .

Un noyau est déjà présent, mais il va nous falloir créer un initramfs et les entrées GRUB.

Pour l’initramfs, un script présent va nous assister :

/usr/share/mkinitrd/mkinitrd_command_generator.sh /boot/vmlinuz

qui nous retournera :

#
# mkinitrd_command_generator.sh revision 1.45
#
# This script will now make a recommendation about the command to use
# in case you require an initrd image to boot a kernel that does not
# have support for your storage or root filesystem built in
# (such as the Slackware 'generic' kernels').
# A suitable 'mkinitrd' command will be:

mkinitrd -c -k 4.4.14 -f ext4 -r /dev/sda2 -m jbd2:mbcache:ext4 -u -o /boot/initrd.gz
# An entry in 'etc/lilo.conf' for kernel '/boot/vmlinuz-huge-4.4.14' would look like this:
# Linux bootable partition config begins
# initrd created with 'mkinitrd -c -k 4.4.14 -f ext4 -r /dev/sda2 -m jbd2:mbcache:ext4 -u -o /boot/initrd.gz'
image = /boot/vmlinuz-huge-4.4.14
initrd = /boot/initrd.gz
root = /dev/sda2
label = 4.4.14
read-only
# Linux bootable partition config ends

Il faudra ensuite exécuter la commande retournée par le script :

mkinitrd -c -k 4.4.14 -f ext4 -r /dev/sda2 -m jbd2:mbcache:ext4 -u -o /boot/initrd.gz

qui retournera :

OK: /lib/modules/4.4.14/kernel/fs/jbd2/jbd2.ko added.
OK: /lib/modules/4.4.14/kernel/fs/mbcache.ko added.
OK: /lib/modules/4.4.14/kernel/fs/jbd2/jbd2.ko added.
OK: /lib/modules/4.4.14/kernel/fs/mbcache.ko added.
OK: /lib/modules/4.4.14/kernel/fs/ext4/ext4.ko added.
29896 blocks
/boot/initrd.gz created.
Be sure to run lilo again if you use it.

Pour l’installation de GRUB, la partition EFI étant déjà montée dans /boot/efi, un simple appel à grub-install va faire le travail :

grub-install

qui retournera :

BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0004,0000,0001,0002,0003
Boot0000* UiApp
Boot0001* UEFI VBOX CD-ROM VB2-01700376
Boot0002* UEFI VBOX HARDDISK VB929ba0e9-5c8515be
Boot0003* EFI Internal Shell
Boot0004* slackware-14.2
Installation finished. No error reported.

Nous créons ensuite le fichier de configuration de GRUB :

grub-mkconfig -o /boot/grub/grub.cfg

À ce stade, notre machine est amorçable, mais il nous reste quelques paquets à installer pour la gestion du réseau.

Nous commençons par paramétrer slackpkg en sélectionnant mon miroir :

echo "http://slackware.uk/slackware/slackware64-14.2/" >> /etc/slackpkg/mirrors

Nous déclenchons ensuite une mise à jour de la liste des paquets :

slackpkg update

Nous commençons par installer le paquet gnugpg :

slackpkg install gnupg

Nous récupérons la clé GPG pour le dépôt :

wget http://slackware.uk/slackware/slackware64-14,2/GPG-KEY

que nous installons :

gpg --import GPG-KEY

Remise à jour du cache slackpkg :

slackpkg update

Nous installons ensuite nano pour des questions de facilité :

slackpkg install nano

Puis nous installons les paquets suivants pour la gestion réseau :

slackpkg install iputils network-scripts net-tools iproute2 dhcp

Une fois sorti du chroot, pour redémarrer proprement il faut démonter au moins proc et sys pointant sur notre dossier dans /mnt :

umount /mnt/tmp/mnt/proc /mnt/tmp/mnt/sys

9-1 - Configuration post-installation

Après le démarrage, la première chose qu’il va falloir faire est de nettoyer le dossier /tmp ayant servi à contenir le 1er chroot temporaire :

rm tmp/* -rf

Nous lançons ensuite la commande netconfig, qui va commencer par demander le hostname :

Suivi du nom de domaine :

Nous sera ensuite demandé si nous souhaitons configurer une IP fixe ou dynamique :

9-2 - Comment ai-je trouvé la méthode ?

Ne trouvant pas de conteneur de système minimal comme pour Fedora, j’ai démarré sur un ISO « Minimal Installation » pour étudier le comportement.

Au démarrage j’ai eu l’écran suivant indiquant qu’il fallait lancer « setup » pour effectuer une installation :

Une recherche avec la commande find nous retourne le chemin de setup

find / -name "setup"
/usr/lib/setup
/usr/lib/setup/setup
/var/setup
/var/log/setup

En montant l’ISO sur un Linux, je n’ai trouvé aucune trace de ce dossier « setup ». L’ISO ne contient que des noyaux, un initrd et quelques fichiers.

J’ai donc extrait le contenu de l’initrd et relancé une recherche de « setup ». C’est ainsi que j’ai vu qu’il était possible de faire un chroot sur le contenu de cet initrd et d’y lancer le setup.

10 - ArchLinux

ArchLinux est une distribution réservée aux utilisateurs avancés. Elle ressemble à Slackware.

Pour installer ArchLinux, il va nous falloir démarrer sur une image ArchLinux nommée bootstrap.

La procédure est similaire à la procédure précédente avec un niveau un peu plus complexe. Tout comme pour l’installation de Slackware, il va nous falloir effectuer deux chroot. Comme nous serons obligés de lancer notre bootstrap hors de la partition où nous installerons la version définitive, nous utiliserons la partition de swap que nous formaterons temporairement en ext4.

Nous créons un point de montage pour notre système de fichiers temporaire, formatons la partition et la montons :

mkdir /temp
mkfs.ext4 /dev/sda3
mount /dev/sda3 /temp

Nous nous plaçons dans le dossier temporaire :

cd /temp

Nous téléchargeons ensuite le fichier de boostrap pour ArchLinux :

wget https://mirrors.gandi.net/archlinux/iso/2022.08.05/archlinux-bootstrap-2022.08.05-x86_64.tar.gz

Nous pouvons télécharger le lien depuis le miroir de notre choix.

Nous décompressons le fichier :

gunzip archlinux-bootstrap-2022.08.05-x86_64.tar.gz
tar -xvf archlinux-bootstrap-2022.08.05-x86_64.tar

Nous rentrons ensuite dans le dossier décompressé nommé root.x86_64 :

cd root.x86_64

Nous modifions le fichier etc/pacman.d/mirrorlist avant d’effectuer le chroot, le dossier de bootstrap ne contenant ni vim ni nano :

nano etc/pacman.d/mirrorlist

Il faut sélectionner le miroir de notre choix en le décommentant, ils sont classés par pays comme nous pourrons le voir en éditant le fichier.

Nous préparons notre chroot :

cp /etc/resolv.conf etc
mount --bind /proc proc
mount --bind /sys sys
mount --bind /dev dev

Avant d’effectuer le chroot, nous montons la partition qui contiendra la racine de notre Archlinux :

mount /dev/sda2 /mnt

Nous entrons enfin en chroot :

cd /mnt
chroot .

Nous allons ensuite utiliser la commande pacstrap, semblable à debootstrap. Avant ceci, il va nous falloir récupérer les clés PGP des dépôts (équivalent à apt-key add des bases Debian) :

pacman-key -- init

Résultat :

gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
==> Generating pacman master key. This may take some time.
gpg: Generating pacman keyring master key...
gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/etc/pacman.d/gnupg/openpgp-revocs.d/FB53B6747A26A33BF459BAC8F05454D5BEFD5DCB.rev'
gpg: Done
==> Updating trust database...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u

Puis :

pacman-key - - populate

Résultat :

==> Appending keys from archlinux.gpg...
==> Locally signing trusted keys in keyring...
-> Locally signed 6 keys.
==> Importing owner trust values...
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: inserting ownertrust of 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
==> Disabling revoked keys in keyring...

-> Disabled 49 keys.
==> Updating trust database...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   6  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   6  signed:  94  trust: 0-, 0q, 0n, 6m, 0f, 0u
gpg: depth: 2  valid:  89  signed:  33  trust: 89-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2022-07-10

Nous lançons ensuite la commande pacstrap :

pacstrap mnt base

Puis nous générons le fichier fstab :

genfstab -pU /mnt >> /mnt/etc/fstab

Enfin, nous passons au second chroot avec la commande dédiée arch-chroot :

arch-chroot /mnt

La première chose, à faire est de mettre le mot de passe root :

passwd root

Nous installons ensuite nano :

pacman -Sy nano

Retour :

[root@ubuntu /]# pacman -Sy nano
:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
warning: nano-6.3-1 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (1) nano-6.3-1

Total Installed Size:  2.48 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n] y
(1/1) checking keys in keyring                     [######################] 100%
(1/1) checking package integrity                   [######################] 100%
(1/1) loading package files                        [######################] 100%
(1/1) checking for file conflicts                  [######################] 100%
(1/1) checking available disk space                [######################] 100%
:: Processing package changes...
(1/1) reinstalling nano                            [######################] 100%
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...

Puis nous installons le paquet dhclient pour pouvoir obtenir une adresse IP via DHCP :

pacman -Sy dhclient

Tout comme avec apt, il aurait été possible d’installer les deux paquets avec une seule commande :

pacman -Sy nano dhclient

Puis nous installons un noyau :

pacman -Sy linux

Il nous sera demandé un « provider » pour l’initramfs :

:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
resolving dependencies...
:: There are 3 providers available for initramfs:
:: Repository core
1) mkinitcpio
:: Repository extra
2) booster  3) dracut

Enter a number (default=1):

Nous sélectionnons celui par défaut.

looking for conflicting packages...

Packages (5) binutils-2.38-5  diffutils-3.8-1  mkinitcpio-31-2
mkinitcpio-busybox-1.35.0-1  linux-5.17.9.arch1-1

Total Download Size:   166.16 MiB
Total Installed Size:  192.87 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
linux-5.17.9.arc...   159.6 MiB  13.0 MiB/s 00:12 [######################] 100%
binutils-2.38-5-...     5.9 MiB  13.2 MiB/s 00:00 [######################] 100%
diffutils-3.8-1-...   363.1 KiB  9.85 MiB/s 00:00 [######################] 100%
mkinitcpio-busyb...   275.0 KiB  9.59 MiB/s 00:00 [######################] 100%
mkinitcpio-31-2-any    44.5 KiB  2.72 MiB/s 00:00 [######################] 100%
Total (5/5)           166.2 MiB  13.0 MiB/s 00:13 [######################] 100%
(5/5) checking keys in keyring                     [######################] 100%
(5/5) checking package integrity                   [######################] 100%
(5/5) loading package files                        [######################] 100%
(5/5) checking for file conflicts                  [######################] 100%
(5/5) checking available disk space                [######################] 100%
:: Processing package changes...
(1/5) installing mkinitcpio-busybox                [######################] 100%
(2/5) installing binutils                          [######################] 100%
Optional dependencies for binutils
debuginfod: for debuginfod server/client functionality
(3/5) installing diffutils                         [######################] 100%
(4/5) installing mkinitcpio                        [######################] 100%
Optional dependencies for mkinitcpio
gzip: Use gzip compression for the initramfs image [installed]
xz: Use lzma or xz compression for the initramfs image [installed]
bzip2: Use bzip2 compression for the initramfs image [installed]
lzop: Use lzo compression for the initramfs image
lz4: Use lz4 compression for the initramfs image [installed]
mkinitcpio-nfs-utils: Support for root filesystem on NFS
(5/5) installing linux                             [######################] 100%
Optional dependencies for linux
wireless-regdb: to set the correct wireless channels of your country
linux-firmware: firmware images needed for some devices
:: Running post-transaction hooks...
(1/5) Reloading system manager configuration...
Skipped: Running in chroot.
(2/5) Creating temporary files...
(3/5) Arming ConditionNeedsUpdate...
(4/5) Updating module dependencies...
(5/5) Updating linux initcpios...
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 5.17.9-arch1-1
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetect
==> Starting build: 5.17.9-arch1-1
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: qed
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: qla1280
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: advansys
==> WARNING: Possibly missing firmware for module: qla2xxx
==> WARNING: Possibly missing firmware for module: bfa
==> WARNING: Possibly missing firmware for module: cxgb4
==> WARNING: Possibly missing firmware for module: csiostor
==> WARNING: Possibly missing firmware for module: isci
==> WARNING: Possibly missing firmware for module: cxgb3
==> WARNING: Possibly missing firmware for module: xhci_pci
==> WARNING: Possibly missing firmware for module: ums_eneub6250
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful

Nous installons ensuite GRUB :

mkdir boot/efi
mount dev/sda1 /boot/efi
pacman -Sy grub efibootmgr
grub-install
grub-mkconfig -o /boot/grub/grub.cfg

Pour redémarrer, il faudra sortir des deux chroot grâce à deux appels à exit.

10-1 - Configuration post installation

10-1-1 - Configuration du réseau

La commande dhclient vous connectera au réseau.

Vous pourrez ensuite fixer une adresse IP en dur en créant un fichier de configuration systemd /etc/systemd/network/50-wired.network :

[Match]
Name=enp0s3
[Network]
Address=10.1.10.9/24 Gateway=10.1.10.1

Remplacez enp0s3 (correspondant à ma carte réseau dans ma machine virtuelle) par votre périphérique disponible que l’on peut retrouver avec la commande ip addr show.

La configuration sera activée par :

systemctl start systemd-networkd.service

puis définie en dur par :

systemctl enable systemd-networkd.service

Vous pouvez également installer un service DHCP.

10-1-2 - Passage en français

Pour activer les locales en français, il faut éditer le fichier /etc/locale.gen et décommenter la locale concernée.

Il faudra ensuite lancer la commande :

locale-gen

10-1-3 - Passage en clavier français

Pour passer en clavier français, nous utilisons la commande déjà vue :

localectl set-keymap fr

La configuration sera permanente.

10-1-4 - Activation du swap

Nous allons réaffecter la partition utilisée pour les manipulations à usage de swap.

Nous commençons par installer gdisk :

pacman -Sy gdisk

Puis nous allons modifier le type de partition de la partition 3, qui occupait notre espace temporaire :

gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.9

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): t
Partition number (1-3): 3
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): wq

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

Nous lançons ensuite la commande mkswap :

mkswap /dev/sda3

Nous ajoutons l’entrée dans le fichier fstab :

/dev/sda3    none    swap    sw    0    0

puis l’activons :

swapon -a

11 - Alpine Linux

Alpine Linux est une distribution très légère qui sert de base à beaucoup de conteneurs Docker.

Une commande est fournie sur git pour faire une installation en chroot.

Nous téléchargeons celle-ci :

apt update
apt install git
git clone https://github.com/alpinelinux/alpine-chroot-install.git

Nous lançons ensuite la commande :

alpine-chroot-install/alpine-chroot-install -d /mnt

L’option -d sert à préciser le dossier où l’installation sera effectuée (dossier /alpine par défaut).

Résultat :

> Downloading static apk-tools
fetch https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v2.12.9/x86_64/apk.static
2022-06-21 13:25:46 URL:https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v2.12.9/x86_64/apk.static [11377576/11377576] -> "apk.static" [1]
apk.static: OK

> Installing Alpine Linux latest-stable () into chroot
fetch http://dl-cdn.alpinelinux.org/alpine/latest-stable/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/latest-stable/community/x86_64/APKINDEX.tar.gz
(1/13) Installing alpine-baselayout-data (3.2.0-r22)
(2/13) Installing musl (1.2.3-r0)
(3/13) Installing busybox (1.35.0-r14)
Executing busybox-1.35.0-r14.post-install
(4/13) Installing alpine-baselayout (3.2.0-r22)
Executing alpine-baselayout-3.2.0-r22.pre-install
Executing alpine-baselayout-3.2.0-r22.post-install
(5/13) Installing ca-certificates-bundle (20211220-r0)
(6/13) Installing libcrypto1.1 (1.1.1o-r0)
(7/13) Installing libssl1.1 (1.1.1o-r0)
(8/13) Installing ssl_client (1.35.0-r14)
(9/13) Installing zlib (1.2.12-r1)
(10/13) Installing apk-tools (2.12.9-r3)
(11/13) Installing busybox-suid (1.35.0-r14)
(12/13) Installing scanelf (1.3.4-r0)
(13/13) Installing musl-utils (1.2.3-r0)
Executing busybox-1.35.0-r14.trigger
OK: 5 MiB in 13 packages
tar: Ignoring unknown extended header keyword 'APK-TOOLS.checksum.SHA1'
tar: Ignoring unknown extended header keyword 'APK-TOOLS.checksum.SHA1'
tar: Ignoring unknown extended header keyword 'APK-TOOLS.checksum.SHA1'
tar: Ignoring unknown extended header keyword 'APK-TOOLS.checksum.SHA1'

> Binding filesystems into chroot
mount: none mounted on /mnt/proc.
mount: /sys bound on /mnt/sys.
mount: /dev bound on /mnt/dev.

> Setting up Alpine
fetch http://dl-cdn.alpinelinux.org/alpine/latest-stable/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/latest-stable/community/x86_64/APKINDEX.tar.gz
v3.16.0-196-g143603d2cf [http://dl-cdn.alpinelinux.org/alpine/latest-stable/main]
v3.16.0-196-g143603d2cf [http://dl-cdn.alpinelinux.org/alpine/latest-stable/community]
OK: 17022 distinct packages available
(1/20) Installing libgcc (11.2.1_git20220219-r2)
(2/20) Installing libstdc++ (11.2.1_git20220219-r2)
(3/20) Installing binutils (2.38-r2)
(4/20) Installing libmagic (5.41-r0)
(5/20) Installing file (5.41-r0)
(6/20) Installing libgomp (11.2.1_git20220219-r2)
(7/20) Installing libatomic (11.2.1_git20220219-r2)
(8/20) Installing gmp (6.2.1-r2)
(9/20) Installing isl22 (0.22-r0)
(10/20) Installing mpfr4 (4.1.0-r0)
(11/20) Installing mpc1 (1.2.1-r0)
(12/20) Installing gcc (11.2.1_git20220219-r2)
(13/20) Installing musl-dev (1.2.3-r0)
(14/20) Installing libc-dev (0.7.2-r3)
(15/20) Installing g++ (11.2.1_git20220219-r2)
(16/20) Installing make (4.3-r0)
(17/20) Installing fortify-headers (1.1-r1)
(18/20) Installing patch (2.7.6-r7)
(19/20) Installing build-base (0.5-r3)
(20/20) Installing ca-certificates (20211220-r0)
Executing busybox-1.35.0-r14.trigger
Executing ca-certificates-20211220-r0.trigger
OK: 187 MiB in 33 packages
---
Alpine installation is complete
Run /mnt/enter-chroot [-u <user>] [command] to enter the chroot
and /mnt/destroy [--remove] to destroy it.

Nous nous plaçons dans le dossier contenant le système de base :

cd /mnt

Nous supprimons les fichiers ajoutés par le dépôt et qui ne nous seront pas utiles : destroy, enter-chroot et env.sh

rm destroy enter-chroot env.sh

Nous lançons ensuite le chroot :

mount --bind /proc proc
mount --bind /sys sys
mount --bind /dev dev
cp /etc/resolv.conf etc
chroot . /bin/ash -l

Alpine Linux est fourni avec le shell ash, que nous appelons lors de la commande chroot, l’option -l change le prompt.

Nous installons ensuite le paquet suivant :

apk add alpine-base

apk est le gestionnaire de paquets d’Alpine Linux.

Une fois cette installation effectuée, il est possible de lancer le script suivant, permettant de facilement configurer le système :

setup-alpine

La première question posée concernera le hostname, celui-ci étant Ubuntu par défaut, le hostname de notre hôte chroot :

Enter system hostname (fully qualified form, e.g. 'foo.example.org') [ubuntu] alpine

L’étape suivante concernera la configuration réseau, que nous allons sauter en laissant les valeurs par défaut :

* WARNING: mdev is already starting
Available interfaces are: enp0s3.
Enter '?' for help on bridges, bonding and vlans.
Which one do you want to initialize? (or '?' or 'done') [enp0s3]
Ip address for enp0s3? (or 'dhcp', 'none', '?') [192.168.1.80]
Netmask? [255.255.255.0]
Gateway? (or 'none') [192.168.1.1]
Configuration for enp0s3:
type=static
address=192.168.1.80
netmask=255.255.255.0
gateway=192.168.1.1
Do you want to do any manual network configuration? (y/n) [n]
DNS domain name? (e.g 'bar.com')
DNS nameserver(s)? [127.0.0.53]

Adresse à adapter à votre cas de figure.

Ensuite le mot de passe root :

Changing password for root
New password:
Retype password:
passwd: password for root changed by root

Suivi de la sélection du fuseau horaire :

Which timezone are you in? ('?' for list) [UTC] ?

Ci-dessous la liste affichée après entrée de « ? » :

Africa/      Chile/       GB-Eire      Israel       Navajo       US/
America/     Cuba         GMT          Jamaica      PRC          UTC
Antarctica/  EET          GMT+0        Japan        PST8PDT      Universal
Arctic/      EST          GMT-0        Kwajalein    Pacific/     W-SU
Asia/        EST5EDT      GMT0         Libya        Poland       WET
Atlantic/    Egypt        Greenwich    MET          Portugal     Zulu
Australia/   Eire         HST          MST          ROC          posixrules
Brazil/      Etc/         Hongkong     MST7MDT      ROK          right/
CET          Europe/      Iceland      Mexico/      Singapore
CST6CDT      Factory      Indian/      NZ           Turkey
Canada/      GB           Iran         NZ-CHAT      UCT
Which timezone are you in? ('?' for list) [UTC] Europe

La sélection de la zone « Europe » affichera une sous-liste :

What sub-timezone of 'Europe' are you in? ('?' for list) ?
ls: Europe/: No such file or directory
Amsterdam    Busingen     Kiev         Moscow       Saratov      Vatican
Andorra      Chisinau     Kirov        Nicosia      Simferopol   Vienna
Astrakhan    Copenhagen   Lisbon       Oslo         Skopje       Vilnius
Athens       Dublin       Ljubljana    Paris        Sofia        Volgograd
Belfast      Gibraltar    London       Podgorica    Stockholm    Warsaw
Belgrade     Guernsey     Luxembourg   Prague       Tallinn      Zagreb
Berlin       Helsinki     Madrid       Riga         Tirane       Zaporozhye
Bratislava   Isle_of_Man  Malta        Rome         Tiraspol     Zurich
Brussels     Istanbul     Mariehamn    Samara       Ulyanovsk
Bucharest    Jersey       Minsk        San_Marino   Uzhgorod
Budapest     Kaliningrad  Monaco       Sarajevo     Vaduz
What sub-timezone of 'Europe' are you in? ('?' for list) Paris

Étape de configuration en cours :

* Caching service dependencies ...                                       [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/sysfs': No such file or directory
mkdir: can't create directory '/sys/fs/cgroup/unified/devfs': No such file or directory
* Remounting devtmpfs on /dev ...                                        [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/mdev': No such file or directory
* Starting busybox mdev ...
modprobe: can't change directory to '/lib/modules': No such file or direc [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/fsck': No such file or directory
* Checking local filesystems  ...                                        [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/root': No such file or directory
* Remounting filesystems ...                                             [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/localmount': No such file or directory
* Mounting local filesystems ...                                         [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/acpid': No such file or directory
* Starting busybox acpid ...                                             [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/modules': No such file or directory
* Loading modules ...
modprobe: can't change directory to '/lib/modules': No such file or directory
modprobe: can't change directory to '/lib/modules': No such file or direc [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/hwclock': No such file or directory
* Setting system clock using the hardware clock [UTC] ...                [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/hostname': No such file or directory
* Setting hostname ...                                                   [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/syslog': No such file or directory
* Starting busybox syslog ...                                            [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/crond': No such file or directory
* Starting busybox crond ...                                             [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/networking': No such file or directory
* Starting networking ...
*   lo ...                                                               [ ok ]
*   enp0s3 ...
ip: RTNETLINK answers: File exists                                        [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/urandom': No such file or directory
* Saving 4096 bits of creditable seed for next boot
* Caching service dependencies ...                                       [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/syslog': No such file or directory
* Starting busybox syslog ...                                            [ ok ]

Il vous sera ensuite demandé l’éventuel proxy pour accéder à Internet :

HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]

Suivi du client NTP de votre choix (chrony par défaut, positionné à none) :

Which NTP client to run? ('busybox', 'openntpd', 'chrony' or 'none') [chrony] none

Puis le miroir à utiliser :

Available mirrors:
1) dl-cdn.alpinelinux.org
2) uk.alpinelinux.org
3) dl-4.alpinelinux.org
4) dl-5.alpinelinux.org
5) mirror.yandex.ru
6) mirrors.gigenet.com
7) mirror1.hs-esslingen.de
8) mirror.leaseweb.com
9) mirror.fit.cvut.cz
10) alpine.mirror.far.fi
11) alpine.mirror.wearetriple.com
12) mirror.clarkson.edu
13) mirror.aarnet.edu.au
14) mirrors.dotsrc.org
15) ftp.halifax.rwth-aachen.de
16) mirrors.tuna.tsinghua.edu.cn
17) mirrors.ustc.edu.cn
18) mirrors.nju.edu.cn
19) mirror.lzu.edu.cn
20) ftp.acc.umu.se
21) mirror.xtom.com.hk
22) mirror.csclub.uwaterloo.ca
23) alpinelinux.mirror.iweb.com
24) pkg.adfinis.com
25) mirror.ps.kz
26) mirror.rise.ph
27) mirror.operationtulip.com
28) mirrors.ircam.fr
29) alpine.42.fr
30) mirror.math.princeton.edu
31) mirrors.sjtug.sjtu.edu.cn
32) ftp.icm.edu.pl
33) mirror.ungleich.ch
34) mirrors.edge.kernel.org
35) ap.edge.kernel.org
36) eu.edge.kernel.org
37) download.nus.edu.sg
38) alpine.yourlabs.org
39) mirror.pit.teraswitch.com
40) mirror.reenigne.net
41) quantum-mirror.hu
42) tux.rainside.sk
43) alpine.cs.nycu.edu.tw
44) mirror.ihost.md
45) mirror.ette.biz
46) mirror.lagoon.nc
47) alpinelinux.c3sl.ufpr.br
48) foobar.turbo.net.id
49) alpine.ccns.ncku.edu.tw
50) mirror.dst.ca
51) mirror.kumi.systems
52) mirror.sabay.com.kh
53) alpine.northrepo.ca
54) alpine.bardia.tech
55) mirrors.ocf.berkeley.edu
56) mirrors.pardisco.co
57) mirrors.aliyun.com
58) mirror.alwyzon.net
59) mirror1.ku.ac.th
60) mirrors.bfsu.edu.cn
61) ftpmirror2.infania.net
62) repo.iut.ac.ir
63) mirror.fcix.net
64) alpine.sakamoto.pl
65) mirror.2degrees.nz
66) mirror.arvancloud.com
67) mirror.0-1.cloud
68) mirror.kku.ac.th
69) mirror.uepg.br
70) alpine.astra.in.ua
71) mirrors.neusoft.edu.cn
72) ftp.udx.icscoe.jp
73) alpinelinux.mirror.garr.it
74) mirrors.hostico.ro

r) Add random from the above list
f) Detect and add fastest mirror from above list
e) Edit /etc/apk/repositories with text editor

Enter mirror number (1-74) or URL to add (or r/f/e/done) [1]

Suite de la procédure :

Added mirror dl-cdn.alpinelinux.org
Updating repository indexes... done.

Il vous sera également demandé si vous souhaitez créer un utilisateur (en plus de root) :

Setup a user? (enter a lower-case loginname, or 'no') [no]

Puis le choix du serveur SSH :

Which ssh server? ('openssh', 'dropbear' or 'none') [openssh]

Dans l’étape suivante, nous annulerons la procédure qui normalement formate le disque :

Available disks are:
loop0 (2.4 GB  )
loop1 (0.0 GB  )
loop2 (0.1 GB  )
loop3 (0.1 GB  )
loop4 (0.1 GB  )
loop5 (0.2 GB  )
loop6 (0.3 GB  )
loop7 (0.0 GB  )
sr0   (2.5 GB VBOX     CD-ROM          )
loop8 (0.0 GB  )
loop9 (0.0 GB  )
loop10        (0.0 GB  )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] loop10
The following disk is selected:
loop10        (0.0 GB  )
How would you like to use it? ('sys', 'data', 'crypt', 'lvm' or '?' for help) [?] data
WARNING: The following disk(s) will be erased:
loop10        (0.0 GB  )
WARNING: Erase the above disk(s) and continue? (y/n) [n] n

Vu que la procédure d’installation a été interrompue, nous appelons ensuite le script de configuration clavier, normalement appelé par setup-alpine :

setup-keymap

Available keyboard layouts:
af     be     cn     fi     hu     it     lk     mm     pl     sy     uz
al     bg     cz     fo     id     jp     lt     mt     pt     th     vn
am     br     de     fr     ie     ke     lv     my     ro     tj
ara    brai   dk     gb     il     kg     ma     ng     rs     tm
at     by     dz     ge     in     kr     md     nl     ru     tr
az     ca     ee     gh     iq     kz     me     no     se     tw
ba     ch     epo    gr     ir     la     mk     ph     si     ua
bd     cm     es     hr     is     latam  ml     pk     sk     us
Select keyboard layout: [none] fr

Une fois « fr » sélectionné, une seconde option vous sera demandée :

Available variants: fr-afnor fr-azerty fr-bepo fr-bepo_afnor fr-bepo_latin9 fr-bre fr-dvorak fr-geo fr-latin9 fr-latin9_nodeadkeys fr-mac fr-nodeadkeys fr-oci fr-oss fr-oss_latin9 fr-oss_nodeadkeys fr-us fr
Select variant (or 'abort'): fr-azerty

Sortie :

* Caching service dependencies ...                                       [ ok ]
mkdir: can't create directory '/sys/fs/cgroup/unified/loadkmap': No such file or directory
* Setting keymap ...                                                     [ ok ]

Nous installons ensuite nano, celui-ci n’étant pas installé par défaut, contrairement à vi (que vous pouvez utiliser si vous le souhaitez).

apk add nano

Nous modifions ensuite le fichier /etc/fstab, qui devra contenir comme précédemment vu :

/dev/sda2       /       ext4    defaults,rw     0       1
/dev/sda3       none    swap    sw      0       1

Nous continuons par l’installation du noyau :

apk add linux-lts

Sortie :

(1/105) Installing lddtree (1.26-r2)
(2/105) Installing xz-libs (5.2.5-r1)

…

(103/105) Installing linux-firmware-other (20220509-r0)
(104/105) Installing linux-firmware (20220509-r0)
(105/105) Installing linux-lts (5.15.48-r0)
Executing busybox-1.35.0-r14.trigger
Executing kmod-29-r2.trigger
Executing mkinitfs-3.6.1-r2.trigger
==> initramfs: creating /boot/initramfs-lts
OK: 1170 MiB in 161 packages

Nous installons ensuite GRUB :

mkdir /boot/efi
mount /dev/sda1 /boot/efi
apk add grub-efi efibootmgr

Puis nous ajoutons l’entrée suivante dans /etc/default/grub pour que le démarrage fonctionne :

GRUB_CMDLINE_LINUX="modules=ext4"

Et nous lançons :

grub-install

Création du fichier de configuration GRUB :

grub-mkconfig -o /boot/grub/grub.cfg

11-1 - Configuration post-installation

11-1-1 - Configuration réseau

Au redémarrage, pour avoir le réseau, j’ai du remplacer enp0s3 par eth0 dans le fichier /etc/network/interfaces : Alpine Linux utilise l’ancienne nomenclature des cartes réseaux utilisées par le paquet net-tool, dépréciée dans les distributions les plus courantes.

11-1-2 - Activation du swap

Au démarrage, le swap n’était pas actif, voici la commande pour l’activer :

rc-update add swap

C’est effectif après un redémarrage.

rc—update add est la commande d’activation de service d’OpenRC, le remplaçant du démon init utilisé par Alpine Linux.

12 - Conclusion

Au cours de ce tutoriel, nous avons vu comment installer/configurer une distribution Linux à partir d’une autre en montrant la flexibilité du système. Même si cela est possible, il est rare que ce soit utile : il est nettement plus simple d’effectuer une installation à partir d’un média dédié. Finalement, l’exercice est intéressant, voir amusant et permet de progresser dans l’utilisation de Linux.

12-1 - Remerciements

Je remercie Sergiomaster, Philippe dpt35 et LitttleWhite pour leur relecture technique, ainsi qu’Escartefigue pour sa relecture orthographique