Notes d’installation de rancherOS sur une VM VC1S de scaleway.

Après plusieurs essais d’installation en passant par le boot ipxe je me suis souvenu qu’on pouvait booter dans un mode rescue et qu’on avait accès au disque de la VM. On peut donc faire l’installation du système “à la main”.

En cherchant un peu avec les bons mots clefs je suis tombé sur un script qui m’a bien aidé !

Le système rescue est basé sur ubuntu, on peut donc facilement installer git et grub et en profiter pour positionner quelques variables :

apt-get -qq update
apt-get install git grub2
export VERSION=$(wget -q -O - https://releases.rancher.com/os/releases.yml | grep current | cut -d: -f3)
export DEVICE="/dev/vda"

On récupère la dernière version de rancherOS et le noyau et l’initrd.

git clone --branch "${VERSION}" https://github.com/rancher/os.git rancheros
ln -fs ../../build.conf rancheros/scripts/installer/build.conf
ln -fs `pwd`/rancheros/scripts/installer /scripts
mkdir dist
wget -q -P dist "https://github.com/rancher/os/releases/download/${VERSION}/initrd"
wget -q -P dist "https://github.com/rancher/os/releases/download/${VERSION}/vmlinuz"

On commente partprobe qui n’aime pas trop notre disque et on crée le fichier cloud-config.yml. Enfin on lance la copie du système sur le disque.

sed -i 's/^partprobe/#partprobe/' rancheros/scripts/installer/set-disk-partitions
cat > cloud-config.yml <<EOF
#cloud-config

ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1......afqG90JfSJO1 ma_clef_ssh
EOF
rancheros/scripts/installer/set-disk-partitions "${DEVICE}"
rancheros/scripts/installer/lay-down-os -c cloud-config.yml -d "${DEVICE}" -i dist -t generic

On active la redirection de la console sur le port série et on redémarre.

mount /dev/vda1 /tmp/new_img/
sed -i 's/console=tty0/console=ttyS0,115200/' /tmp/new_img/boot/grub/grub.cfg
umount /tmp/new_img
reboot

Au boot il faut interrompre le démarrage avec CTRL+B pour entrer dans le menu ipxe. On le quitte immédiatement pour démarrer sur le disque local.

Au démarrage il faut signaler que le serveur a bien démarré. D’habitude cela se fait avec curl mais comme il n’est pas présent dans la console par défaut de rancheros (basée sur busybox) on va le faire avec telnet et le script suivant :

#!/bin/sh
echo "PATCH /state HTTP/1.1"
echo "Host: 169.254.42.42"
echo "Content-Type: application/json"
echo "Content-Length: 26"
echo
echo '{"state_detail": "booted"}'
echo
sleep 2
sh script_start.sh | telnet 169.254.42.42 80

On doit pouvoir en faire une image docker qui est lancée à chaque démarrage…

On peut aussi utiliser une option (non|peu) documentée de la commande scw :

scw _patch rancher1 state_detail=booted

Dès que la machine a démarré on peut lancer la commande pour éviter que le serveur ne soit arrêté.