CV

Introduction

J’écris cet article parce que j’aime une distribution légère et rapide dont le concept est de rester la plus simple possible : Archlinux

Or Gandi ne propose pas d’image système Archlinux.
La demande a été faite comme l’indique le lien précédent, et cela correspond à un besoin retrouvé ici aussi.

J’aime bien aussi Gandi (je n’ai pas d’autres expriences de serveurs virtuels) parce que :
 ça marche bien ;
 ça répond aux questions.
 c’est dans mon budget

Donc depuis quelques années, le serveur tournait sur une debian et mes services dans un chroot Archlinux. Lors des rares reboot du serveur, je devais effectuer quelques manipulations à la main pour lancer les services dans le chroot.

Ça commençait à m’ennuyer alors j’ai repris les choses en main pour booter sur Archlinux. En effet, j’avais déjà fait quelques tentatives mais infructueuses... Je ne connaissais pas assez Xen, Gandi & Cie sans doute.

La suite de ce document explique comment j’y suis arrivé, et les quelques points auxquels il faut faire bien attention pour que ça marche !

Chez Gandi

On achète des ressources (CPU, RAM, disques et interfaces réseau + adresse IP) et on crée des serveurs en fonction des ressources disponibles. Pour cette installation, j’ai acheté une part avec engagement annuel, et une autre part sans engagement qui sert juste à l’installation. Une fois que ça marche, on détruit l’ancien serveur. On libère les ressources. On relâche la part : l’installation coûte un ou deux euros. Il serait peut-être possible d’utiliser le disque de données du même serveur, mais j’ai rencontré des soucis en faisant ce genre de manipulations.

Installation

L’idée est de suivre le tutoriel « Installation par chroot » puis de faire quelques réglages pour booter dessus.

La première étape est de créer un serveur avec une des distributions proposées par Gandi. J’ai choisi la Debien 6 64 bits car je souhaite installer une Archlinux 64 bits.
Le principe doit rester valable pour une architecture i686.

Lors de la création du serveur, deux paquets « Gandi » sont installés qui nous seront utiles :
 /var/cache/apt/archives/gandi-hosting-vm_1.0.0-r7135_all.deb
 /var/cache/apt/archives/gandi-hosting-agent_1.1-r6503_all.deb

Il faudra extraire ces archives Debian, avec la commande ar qui doit se trouver dans le paquet binutils de mémoire (apt-get install binutils).

Allons-y !

Depuis ce serveur, qui fonctionne tout bien par défaut, je me connecte en ssh pour installer un Archlinux minimal.

Il faut l’image minimale d’Archlinux comme indiqué dans le tutoriel

# ARCH_MINI="$HOME/tmp_arch" # où on met notre système
# ARCHI=$(uname -m) # l'architecture, dans mon cas c'est x86_64
# mkdir "$ARCH_MINI"
# cd "$ARCH_MINI"
# curl -O http://mir.archlinux.fr/~tuxce/chroot/archlinux.chroot.$ARCHI.tgz
#  tar zxf archlinux.chroot.$ARCHI.tgz

Là, j’ai l’impression que cela installe deux ou trois fichiers qui donneront lieu à des soucis lors de la mise à jour avec pacman. Il faudra forcer la mise à jour avec l’option -Sf de pacman. De mémoire, il s’agissait de quelques librairies...

On continue : accès réseau depuis le chroot et montage

#  cp /etc/resolv.conf "$ARCH_MINI/etc/"
#  mount -B /proc "$ARCH_MINI/proc"
#  mount -B /dev "$ARCH_MINI/dev"
#  mount -B /sys "$ARCH_MINI/sys"
#  mount -B /dev/pts "$ARCH_MINI/dev/pts"

Là, j’ai monté explicitement /dev/pts car j’ai rencontré des soucis si je me contentais de /dev... Je n’ai pas trop bien compris...

Les points à vérifier dans l’environnement Archlinux sont :
 le /etc/fstab pour avoir les points de montage, j’ai repris ceux de la debian :

/dev/xvda2    swap              swap    defaults 0 0
/dev/xvda1    /                 ext4    rw,noatime,errors=remount-ro  0    1
devpts        /dev/pts          devpts  defaults      0 0
none          /proc             proc    rw,nosuid,noexec  0    0
tmpfs                /tmp        tmpfs        nodev,nosuid        0        0


 les modules correspondant au noyau choisi chez Gandi dans les options du disque système du serveur

# cd "$ARCH_MINI"
# wget http://mirrors.gandi.net/kernel/3.2.30-xenU-7157-x86_64-modules.tar.gz
# cd usr # {{ important car /lib est un lien vers /usr/lib dans Archlinux actuellement}}
# tar xf ../3.2.30-xenU-7157-x86_64-modules.tar.gz

Rentrons dans Archlinux !

# chroot "$ARCH_MINI"

Ça devrait aller, vérifier :
 connectivité et résolution de nom fonctionnelle avec un ping,
 ls -l /lib devrait bien être un lien vers /usr/lib
 ls -l /lib/modules devrait contenir le dossier des modules correspondant au noyau que vous utiliserez

Ressortez d’Archlinux pour installer les paquets debian gandi-hosting-vm et gandi-hosting-agent.

# exit
# cd "/tmp"
# ar x /var/cache/apt/archives/gandi-hosting-vm_1.0.0-r7135_all.deb
# tar xf data.tar.gz -C "$ARCH_MINI"
# ar x /var/cache/apt/archives/gandi-hosting-agent_1.1-r6503_all.deb
# tar xf data.tar.gz -C "$ARCH_MINI"

Retournons dans Archlinux et installons deux trucs utilisés par les scripts Gandi pour gérer l’adresse IP et les disques notamment, et le serveur ssh bien utile.

# chroot "$ARCH_MINI"
# pacman  -Sy base
# pacman  -S python2  dhclient --needed
#  pacman -S openssh --needed

Là, je me souviens avoir du bricoler avec pacman. J’ai du forcer l’installation de base car il y avait une ou deux librairies déjà présentes dans le système de fichier. Et puis les signatures de paquets. Donc j’ai utilisé ces commandes :

#  pacman-key --init
#  pacman-db-upgrade
#  pacman-key --populate archlinux

Enfin, les dernières touches

 Gandi cherche à lancer /sbin/dhclient pour obtenir la configuration réseau. Or sous Archlinux c’est dans /usr/sbin/. Sinon, dhcpcd n’a pas fonctionné même manuellement depuis la console Gandi.
 J’ai précisé python2 dans un scipt de gestion des disques, sinon avec Python3 il y a des erreurs de syntaxe et cela ne marche pas.

# ln -s /usr/sbin/dhclient /sbin/
# vi /etc/gandi/manage_data_disk.py # et remplacer /usr/bin/python par /usr/bin/python2 sur la première ligne

Ensuite depuis l’interface de Gandi, j’ai créé un nouveau serveur (en achetant une part sans engagement) , je l’ai stoppé, j’ai démonté son disque système pour le remonter sur le premier serveur.

Depuis le premier serveur, j’ai démonté le disque système du second (en notant le device auquel il était attaché : /dev/xvdb je crois), j’ai reformaté en ext4 (il est automatiquement remonté), puis tout remplacé par l’image Archlinux créée avec un « cp -a "$ARCH_MINI" /srv/DEUX ». Je redémonte le disque.

Depuis l’interface Gandi, je démonte (bien qu’il devrait y être) le disque système pour le rattacher au second serveur.

Enfin, le test : Je démarre et « Oh joie ! Ça marche ».

Voilà, le deuxième serveur boot sr Archlinux et je suis content comme tout.
Toutes les fonctionnalités de Gandi ne sont peut être pas prises en charge.
J’ai testé l’ajout de mémoire, l’ajout d’un disque, l’agrandissement d’un disque.

Les soucis

Si vous rencontrez un soucis, pensez à activer la console Gandi.

Sinon normalement, à ce jour, /sbin/init est un lien vers ../usr/lib/systemd/systemd. Donc les logs sont consultables avec journalctl : j’utilise souvent journalctl -b par exemple.

Une bêtise que j’ai faite à plusieurs reprise est de changer la version du noyau dans l’interface de Gandi et d’oublier de mettre à jour les modules (ce n’était pas automatique, cela semble l’être mais je n’ai pas testé et j’ai un peu peur qu’il écrase le lien sybolique /lib par un répertoire...).

Conclusion

Une fois le nouveau serveur fonctionnel, on peut récupérer des ressources (style interface ou disque de données s’il s’agit d’une migration) du premier serveur puis le détruire et relâcher les ressources afin de pouvoir relâcher une part... ou bien garder les deux parts pour le serveur Archlinux : l’ajout de RAM, de disque et de débit réseau devraient fonctionner.

Donc Archlinux chez Gandi c’est possible, mais peut être que cela ne fonctionnera plus un jour. J’avais un serveur chez Gandi depuis très longtemps et qui marchait pas mal quand un jour je me suis aperçu que je ne pouvais pas allouer de mémoire dans le swap pour une obscure raison. Bon, je n’aime pas trop Debian que je connais de moins en moins, je ne suis pas l’actualité des changements d’infrastructure dez Gandi au jour le jour, etc... alors il n’y a rien d’étonnant à ce que je rencontre un soucis... Après deux ou trois manip, le support m’a gentillement conseillé de recréer un serveur tout neuf, et ensuite de récupérer l’ancienne IP avant de détruire le vieux. Et ça a tout de suite encore mieux marché ;-)

Exemples

Ce site tourne chez Gandi sous Archlinux avec :
 nginx-spdy
 mariadb
 php
 spip
avec celui de mon village.
Sur un autre serveur avec Archlinux, le site de mon emplyeur.


Bruno (bruno+archlinux à ahennezel.info)