L'objectif est d'utiliser une distribution Void Linux non proposée en standard sur [un VPS Contabo](https://contabo.com/?show=vps) en réalisant une installation via CHROOT. Cet article a été écrit sur la base de [la procédure du wiki](https://wiki.voidlinux.org/Installation_via_chroot) et de [cet article du blog mitchriedstra.com](https://mitchriedstra.com/2018/12/void-on-digital-ocean) en adaptant à mes besoins et en mettant à jour certaines opérations obsolètes. ## Procédure d'installation Chaque hébergeur propose un mode de secours (souvent nommé *rescue* dans l'interface d'administration du serveur) pour reprendre la main sur un serveur en cas de souci. Cela consiste à démarrer un système minimal à partir duquel on pourra monter les partitions du disque principal pour essayer de réparer les choses. C'est cette porte de secours qui va nous servir à réaliser une installation manuelle de Void. Au préalable j'ai réalisé une première installation standard avec une distribution supportée : Debian 10. Ainsi j'ai pu noter le paramètrage réseau configuré par Contabo sur le VPS : adresse IP, masque réseau, adresse de la passerelle, serveurs DNS. Ensuite j'ai redémarré en mode secours. ### Partitionnement et installation de l'image Le partitionnement simple défini par Debian me suffit, je n'ai pas besoin de LVM ni de chiffrement. root@sysresccd /void % fdisk -l Disk /dev/loop0: 469.9 MiB, 492683264 bytes, 962272 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sda: 400 GiB, 429496729600 bytes, 838860800 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x54d070ad Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 1953791 1951744 953M 83 Linux /dev/sda2 1953792 838858751 836904960 399.1G 83 Linux On reformate les deux partitions en EXT4 avec la commande *mkfs.ext4* : - sda1 qui contient */boot* - sda2 qui contient */* Ensuite on monte la partition */* dans laquelle on télécharge et décompresse l'image ROOTFS de Void Linux. mkdir /void mount /dev/sda2 /void cd /void wget https://a-hel-fi.m.voidlinux.org/live/current/void-x86_64-ROOTFS-20191109.tar.xz tar xJf void-x86_64-ROOTFS-20191109.tar.xz rm -f void-x86_64-ROOTFS-20191109.tar.xz ### Chrootage et installation du système de base On se chroote en quelques commandes : mount -t proc none proc mount -o bind /sys sys mount -o bind /dev dev chroot /void /bin/bash export PS1="(CHROOT) # "" Le système cible a sa configuration IP mais plus sa configuration DNS ; on rémédie à cela en configurant le DNS Google. echo nameserver 8.8.8.8 > /etc/resolv.conf On peut aussi éditer */etc/hostname* pour personnaliser le nom local de la machine avant d'installer le système de base de Void. echo repository=https://a-hel-fi.m.voidlinux.org/current/ >/etc/xbps.d/00-repository-main.conf xbps-install -Syu base-system curl wget grub gptfdisk lzop lzip xz libressl dracut sudo On génère le fichier */etc/fstab* cat /proc/mounts | grep -E '(xfs|ext4)' >> /etc/fstab On vérifie quand même le contenu ;-) (CHROOT) # cat /etc/fstab # # See fstab(5). # # tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0 /dev/sda2 / ext4 rw,relatime,data=ordered 0 0 ### Noyau et amorçage avec Grub C'est le bon moment pour monter la partition */boot* mount /dev/sda1 /boot On installe le kernel LTS puis on configure le boot xbps-install -S linux-lts grub-install --target=i386-pc /dev/sda grub-mkconfig -o /boot/grub/grub.cfg > Ne pas oublier de fixer un mot de passe pour le compte *root* avec la commande *passwd* ### Finalisation de l'installation A cette étape, on a un serveur fonctionnel mais on ne pourra pas prendre la main si on redémarre. Il faut terminer la configuration réseau et configurer l'accès par SSH. Sur Void, une configuration réseau statique se configure en éditant */etc/rc.local* # Static IP configuration via iproute ip link set dev eth0 up ip -4 addr add 62.xxx.xxx.xxx/xxx dev eth0 ip -4 route add default via 62.xxx.xxx.xxx dev eth0 On installe la configuration DNS préconisée par le fournisseur dans */etc/resolv.conf* search invalid nameserver 213.xxx.xxx.xxx Enfin on configure l'accès distant par SSH. Normalement, sshd a été installé avec le système de base, on n'a qu'à mettre le service en démarrage automatique : ln -sv /etc/sv/sshd/ /etc/runit/runsvdir/default/ Et on autorise la connexion du compte *root* par mot de passe en éditant */etc/ssh/sshd_config* permitRootLogin PasswordAuthentication yes On renforcera la configuration SSH plus tard et on installera les outils de sécurité habituels (shorewall, fail2ban). Là, on peut tenter un redémarrage et vérifier qu'on peut accéder au serveur. Si ce n'est pas le cas, c'est qu'une étape a grandement foiré. On relance le serveur en mode *rescue*, on chroote et on analyse les logs pour essayer de comprendre ce qui a échoué. Mais il aussi possible que l'échec soit survenu avant le démarrage du serveur et un accès type KVM proposé par certains hébergeurs peut aider à comprendre. Chez Contabo, c'est un accès VNC qui m'a mis le nez sur mon Grub incorrectement installé le premier coup. ![Grub cassé](/images/2020/broken-grub.png) Bonne Void, une distribution qui mérite d'être connue !