You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
blog/posts/2020/2020-04-05-chroot-void.md

5.7 KiB

L'objectif est d'utiliser une distribution Void Linux non proposée en standard sur un VPS Contabo en réalisant une installation via CHROOT.

Cet article a été écrit sur la base de la procédure du wiki et de cet article du blog mitchriedstra.com 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).
#
# <file system>	<dir>	<type>	<options>		<dump>	<pass>
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é

Bonne Void, une distribution qui mérite d'être connue !