Comme mon travail en tant qu’administrateur système dans une société Web me fait rencontrer de nouveaux problèmes chaques jours, je me suis dit qu'il fallait que le monde profite de mes solutions :).

 

NSCD et Upstart

Bonjour à tous!

Petit tuto aujourd’hui, plus précisément un complément de plus à l’utilisation d’un système nfsrooté.

Pour ceux qui auraient suivi le tuto sur l’installation du Linux en NFSroot, vous aurez peut être remarqué l’incapacité du système à démarrer des logiciels tels que Thunderbird, Skype etc…. Et bien c’est que ces système ont besoin d’une couche de cache que le NFSroot ne peux pas leur donner en natif (pour ceux qui auraient d’ailleurs lancé des débugs consoles sur ces applications, ont pu constater que leurs logs les gratifiaient d’un magique “SegFault”).

Ici on va voir comment y remédier.

Tout d’abord, il faut installer notre couche de cache, et pour cela, on va faire appel au paquet “nscd” (ou “Name Service Cache Daemon”).

Comme d’hab quand on installe une application, ont passe par apt-get :

~# sudo apt-get install nscd

Une fois l’installation terminé, on reboot tranquille, on se dit “Tout vas bien, pas d’erreur”, on clic que notre application Thunderbird et là… rien. Rien ne se lance.

PAS DE PANIQUE

Avant de me jeter des cailloux pointus à la gueule, dites vous bien que je me suis cassé le cul à plusieurs reprises (et je remercie encore “Ô mon Maitre” Yann pour me secourir dans des moments difficiles) en cherchant la source de l’erreur.
Après avoir longuement suspecter le script de démarrage de faire de la merde, j’ai ensuite compris finalement (via des echo tassés dans des fichiers) que le script n’était même pas appelé au démarrage du système.

En fait, depuis la 11.04 (voir même la 10.10 - 10.04 je crois), on ne passe plus par les runlevel de Système V pour démarrer des démons sous Linux, mais on utilise un nouveau système nommé UpStart. Ce dernier en fait prend la mains sur pas mal d’élément du démarrage, ce qui peux laisser perplexe quand on ne le sait pas.

Seulement, NSCD n’est pas fait pour démarrer par upstart, ce qui fait que ce dernier lui roule dessus au démarrage sans que NSCD puisse moufter sa sauce. Par conséquent il faut créer des scripts custom dans le répertoire de gestion d’upstart (comme on aurai pu faire avant dans les runlevels) afin de lui dire “Hey connard! T’es gentils, tu laisses les autres jouer!”.

voici donc le script a placer dans /etc/init/nscd.conf (Oui, le fichier n’existe pas, il faut le créer).

description	"name service cache daemon"

start on local-filesystems
stop on runlevel [06]

#expect fork
pre-start script
    mkdir -p /var/run/nscd
end script

exec /usr/sbin/nscd -f /etc/nscd.conf

Merci d’ailleurs à spidernik84 du forum Linuxquestions.org pour avoir trouvé ce script plus ou moins miraculeux.

Une fois ce script posé et enregistré, vous pouvez redémarrer votre linux et là, tadaaaa, Thunderbird se lance! Magique!

Reste cependant un dernier problème à résoudre : Cette solution est plus ou moins bonne car elle est faite main. Le délire c’est qu’il est possible qu’une mise a jour fasse sauter tout ça (upstart, nscd, ubuntu lui même). Si le problème ce représente, vous saurez cependant quoi faire!

NB : J’ai utilisé cette solution avec le paquet “unscd” mais techniquement tout devrait fonctionner correctement quand même avec la version nscd originale. Notez que pour “unscd” d’ailleurs, le fichier de conf est le même (et s’appelle aussi “nscd.conf”), puisque les binaires et les fichiers .conf de unscd se nomment nscd tout court. Donc le script est interchangeable.

NFSroot depuis virtualBox via boot.iso

Bonjour à tous et bienvenu pour le tuto de la semaine!

Il faut le prendre en complément du tutoriel sur l’installation en NFSroot, par conséquent, je ne reviendrai pas sur la partie installation et configuration du serveur (sauf à un moment précis mais la modification est à la fois mineure et essentiel donc restez attentif).

Ok, nous y voila.

Donc la méthode est la suivante :
On va commencer par créer une image .iso qui va en fait servir d’alternative au boot grub, car ce dernier est non seulement invivable à installer seul sur une VM, mais de plus pause d’important problèmes au lancement du NFS (avalanche d’erreurs, montage partiel, erreur “need a path” et j’en passe).

J’espère que vous n’avez pas oublié la partie de changement du /etc/initramfs-tools/initramfs.conf dans le premier tuto, car c’est impératif. Si ce n’est pas le cas, retournez sur l’ancien et recréez la initrd.img correctement.

Etape 1 : Création de l’image boot.iso

En fait basiquement, on va réutiliser les fichiers vmlinuz et inird.img préconfigurés du NFS pour créer une image correctement configuré. Pour ce faire, il faut donc créer un dossier à la racine (pour plus de rapidité et ne pas péter un câble avec les chemins d’accès) qui sera donc /iso.

A l’intérieur il faut créer un dossier “linux” pour se retrouver donc avec l’architecture suivante :

/iso
   |
   linux

Ensuite, on va placer nos deux images vmlinuz et initrd.img dans le dossier linux. Ce sont les images que l’on avait utilisé dans le tuto précédent pour grub (ils étaient à l’époque stocké dans /boot/LAN du disque sur le poste client)
On va juste changer le nom de l’initrd :

mv initrd.img initrd

On va maintenant créer le fichier qui va servir de configuration à l’image iso :

cd /iso
touch isolinux.cfg
vi isolinux.cfg

Collez y ça (arrangé à votre sauce) :

default linux
 
label linux
  kernel /linux/vmlinuz
  append initrd=/linux/initrd root=/dev/nfs ip=dhcp(ou les paramètres IP de votre réseau local) nfsroot=(adresse_de_votre_serveur):(chemin_d’accès_vers_votre_racine_nfsroot),rw,nolock

Ça vous rappelle des choses? C’est normal! On dirait le lanceur de Grub2 dans l’autre tuto. C’est pas pour rien hein? Sauf que lui en fait il va lancer les éléments pour que le .iso soit correcte.

Donc une fois ça fait, on va aller fouiner dans notre ubuntu embarqué sur le serveur pour aller y télécharger isolinux.bin.

scp (nom_d’utilisateur_ssh)@(adresse_du_serveur):/(chemin_d’accès_vers_votre_racine_nfsroot)/usr/lib/syslinux/isolinux.bin /iso/

voila, on y est presque, maintenant on va créer l’image boot.iso (notez, il faut être dans /iso (faites un cd /iso pour être sur):

mkisofs -R -V “NFS Boot” -o ../boot.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .

Voila, maintenant que votre boot.iso fait pour le nfs est créé, on va configurer VirtualBox pour démarrer la machine.

Etape 2 : Configuration de VirtualBox

NB : Désolé pour les fans de VirtualBox OSE, mais il n’y a que la VirtualBox 4.1.4 qui permet la connexion par pont, et donc de permettre à la machine de démarrer avec les bonnes informations réseau. D’ailleurs, sous linux, il est possible que VirtualBox provoques de petites erreurs au démarrage, et demande l’emploi de certaines commandes setup. Faites les, c’est simplement certains modules de VirtualBox qui doivent être réinitialisés à chaque démarrage. C’est un bug connu.

Donc, lancez VirtualBox et créez une nouvelle machine, basé sous Linux Ubuntu. Donnez lui un peu de mémoire (minimum 512Mo, et encore, vous allez galérer. L’optimal c’est 1Go dédié de toute façon, et c’est d’autant plus valable pour une VM). Ensuite dans l’onglet réseau, sélectionnez “Accès par pont” et l’interface de votre carte réseau correcte (par défaut : eth0).

Ensuite allez dans “Stockage” et montez votre image boot.iso dans le lecteur CD.
Tien, maintenant essayez de booter. On pourrait se dire “Boarf, le serveur est configuré pour partager avec toutes les IP de mon domaine réseau (souvenez vous du 192.168.1.* qui couvre tout le domaine), il devrait se monter correctement”.
Miracle, votre noyau se monte correctement, les procédures se lancent, et là BAM!
Oh? Etrange! nfs-premount : acces denied error.
Patatra, je vois d’ici vos rêves et vos espoirs disparaître dans vos yeux, et la vie devenir plus sombre à chaque loop de “acces denied”.

PAS DE PANIQUE

Il y a des gens comme moi pour se prendre la tête avec ce genre de souci, et vous apporter la solution sur un plateau!
En fait, je n’ai pas tout a fait compris pourquoi, mais même dans le cas ou l’IP donné par le DHCP, accompagné de son masque et de sa passerelle, ne possède quand même pas les accès vers le serveur nfs.

Pour corriger ce problème, il faut vous rendre sur votre serveur, dans le fichier /etc/exports.
A l’époque, on avait marqué ça :

/srv/ubuntu IpdesClients(pour moi c’est 192.168.1.* pour couvrir toute la plage IP)(rw,no_root_squash,async,subtree_check)

Et bien il faut rajouter la ligne suivante :

/srv/ubuntu IPdelaVM/IDdumasque(24 pour 255.255.255.0, sinon faite la conversion)(rw,no_root_squash,async,subtree_check)

relancez votre serveur nfs

sudo service nfs-kernel-server reload

Et maintenant, sur votre PC client, relancez votre machine.

Tadaaaaaaaa! Ca marche. Cependant, pour les 11.04 et ulterieures, Unity nécessitant une accélération matérielle, il chargera l’ancienne interface gnome par défaut. Je n’ai pas réussis à stabiliser ça, mais bon, ça ne rentrait pas dans le cadre de ma demande.

D’ailleurs, l’installation de ce genre de chose tien plus du bricolage qu’autre chose, ce ne sont pas des machines très fiables, par conséquent, je conseil tout de même le Dual Boot de l’ancien tuto (a moins que ce soit pour une utilisation ponctuelle).

Voila, j’espère que ce tuto aura servi.
A plus les gens :).