traduit de UbuntuOnCluster par Zed
Cette page à pour but de présenter l'installation d'Ubuntu sur un groupe important de machines( cluster). Il faudra installer une première machine manuellement (le serveur d'installation), et toutes les autres machines seront installées lorsqu'elles démarreront. Nous utiliserons Ubuntu Dapper. Le programme d'installation par défaut (debian-installer) fonctionne très bien. Ce n'est pas la peine d'utiliser Kickstart ou FAI
Prérequis pour le serveur:
Premièrement, il vous faut connaitre l'adresse MAC de toutes vos machines, ceci afin qu'elles récupèrent toujours la même adresse IP et nom d'hôte.
Procédez maintenant à l'installation de dhcp3-server et tftpd-hpa
Une fois les deux paquets installés, éditez le fichier /etc/dhcp3/dhcpd.conf, un exemple est disponible http://kaarsemaker.net/files/ubuntu-cluster; les commentaires sont assez clair.
Le démarrage par PXE demande à ce que l'image .iso soit montée localement, je l'ai donc monté sous /var/lib/tftpboot/ubuntu/
mkdir /var/lib/tftpboot/ubuntu echo '/data/ubuntu-5.04-install-i386.iso /var/lib/tftpboot/ubuntu/ auto defaults,loop 0 0' >> /etc/fstab mount -a
La prochaine étape est de configurer le PXE. J'ai donc créé deux fichiers: un pour l'installation et un second pour le démarrage local (cad: démarrer le système localement). Créez un dossier /var/lib/tftpboot/pxelinux.cfg et mettez y les fichiers suivants: default localboot
Comme vous pouvez le voir l'action par défaut est l'installation. Il est possible de passer quelques options ici (la ligne kernel). Pour récupérer de la place pour les options (la place est limitée), créez des liens symboliques vers les fichiers suivants:
cd /var/lib/tftpboot ln -s ubuntu/install/netboot/ubuntu-installer/i386/initrd.gz ubuntu/install/netboot/ubuntu-installer/i386/linux ubuntu/install/netboot/pxelinux.0 ubuntu/install/netboot/ubuntu-installer/
Vous pouvez voir dans la configuration que nous utilisons ces liens
Pour les machines en cluster, nis et nfs sont habituellement utilisées pour partager les informations sur les utilisateurs et des parties du système de fichiers. Il faudra donc installer les deux paquets suivants sur le serveur : nis nfs-kernel-server
.
Note: le paquet nis (pas nis en lui-même) est un buggé, il essayera de lancer ypbind même si on ne lui demande pas. Il ignore également le preseed, plus loin nous créerons une nouvelle version du package, pour l'instant il faut juste laisser ypbind partir en time out.
Lorsque l'installation de nis demande un domaine, prenez un nom de votre choix. Dès que ypbind est mort, arrêtez nis avec la commande suivante :
invoke-rc.d nis stop
Il faut maintenant éditer /etc/default/nis et activer le serveur nis (exemple). Il vous faudra également initialiser la base nis avec :
/usr/lib/yp/ypinit -m
Vous pouvez maintenant démarrer le service nis :
invoke-rc.d nis start
Pour le NFS, il faut éditer /etc/exports pour exporter les parties du système de fichiers utiles. Sur mon cluster, j'ai exporté /home et /data, voici un exemple de fichier de configuration pour NFS
# /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). /home 192.168.0.0/255.255.0.0(rw,async) /data 192.168.0.0/255.255.0.0(rw,async)}}}
Redémarrez le serveurs NFS
invoke-rc.d nfs-kernel-server restart
L'installation depuis un miroir local et en utilisant un proxy httpd pour le reste augmente de manière significative la vitesse des installations. Comme apt-proxy ne fonctionne pas trop bien, nous allons utiliser squid. Pour la récupération apres l'installation il faut également php, on l'a donc installé. (Un script CGI aurait très bien fait l'affaire, c'est une histoire de gout)
Il vous faut donc les paquets suivants : apache2 libapache2-mod-php4 squid
Mon cluster a seulement une IP publique, donc seul le maitre est connecté à Internet. Les autres noeuds sont simplement connectés au maitre (et via le NAT ils peuvent accéder à Internet). Comme je ne veux pas faire office de proxy public, J'ai configuré squid pour qu'il écoute seulement sur eth1 (l'interface interne). On peut faire pareil avec apache en éditant le fichier /etc/apache2/ports.conf.
invoke-rc.d apache2 stop echo 'Listen 192.168.0.1:80' > /etc/apache2/ports.conf echo 'Listen 127.0.0.1:80' >> /etc/apache2/ports.conf invoke-rc.d apache start
Il faut également éditer la configuration de squid. Un exemple est accessible.
Faites un lien symbolique de l'iso vers apache pour la servir.
ln -s /var/lib/tftpboot/ubuntu/ubuntu /var/www/ubuntu
Tout est maintenant configuré sur le serveur, nous pouvons maintenant passer à la configuration des clients. Tftpboot va lancer l'installeur Ubuntu. L'installeur pose des questions, mais les réponses peuvent être "enregistrées" dans un fichier appelé preseed.
Un fichier preseed qui répond avec la valeur par défaut a toutes les questions et qui installe ubuntu-base et openssh-server est disponible ici.
Ce que l'on peut changer: langue, les paquets à installer (qui sont des chaines aptitude), le premier utilisateur ainsi que le partitionnement. Configurez ceci à votre convenance, puis enregistrez le à la racine d'apache.
L'installeur redémarre après l'installation classique, ce qui signifie qu'il sera relancé. Bien sur nous ne voulons pas ça, c'est pourquoi il est nécessaire de créer un système d'enregistrement. Comme vous pouvez le voir dans le fichier pressed, la ligne preseed/late-command correspond à
wget http://192.168.0.1/register.php
Ceci ne fait rien sur le client, mais le script PHP créé un fichier de boot PXE pour cette machine, qui force le démarrage depuis le disque dur local. Si vous désirez réinstaller une machine, il vous suffit de supprimer le fichier de boot PXE associé, et l'installation se relancera.
Pour que ceci fonctionne, l'utilisateur www-data
doit pouvoir écrire dans /var/lib/tftpboot/pxelinux.cfg
chown :www-data /var/lib/tftpboot/pxelinux.cfg chmod g+w $_
Voici le contenu du script register.php à enregistrer dans
/var/www/register.php
<?php function _dechex($x) { return sprintf("%02s",dechex($x)); } $host = strtoupper(implode('',array_map(_dechex,explode('.',$_SERVER['REMOTE_ADDR'])))); copy("/var/lib/tftpboot/pxelinux.cfg/localboot", "/var/lib/tftpboot/pxelinux.cfg/$host"); ?>
Le script exécuté après l'installation (appelé postinstall) peut être utilisé pour tout faire. Je l'ai utilisé pour installer un nis correct et faire une bonne configuration, et quelques trucs en raport avec le démarrage.
Pour créer un paquet NIS correct, voici comment faire (depuis breezy ce n'est plus nécessaire: le paquet a été corrigé).
mkdir nispackage cd nispackage apt-get source nis cd nis-3.12/debian
postinst
db_input
)if [ "$RET
ajouter une ligne contenant RET=domaine
ou domaine est le domaine NIS que vous avez choisi).db_text
) Tapez ensuite les commandes suivantes:
cd .. apt-get build-dep nis dpkg-buildpackage
Copiez le .deb (qui se trouve dans le dossier nispackage) a un endroit ou les clients peuvent y accéder (soit par wget ou via un montage nfs)
Le script post-install doit être placé dans /var/www Le mien ressemble à:
#!/bin/bash # Etape 1: Montage initial mkdir /data mount -t nfs 192.168.0.1:/data /data -o rw,soft,bg,rsize=32768,wsize=32768,tcp,timeo=600,intr # Etape 2: Installation et configuration du NIS aptitude -y install portmap libslp1 dpkg -i /data/nis_3.12-3_i386.deb cp /data/nsswitch.conf /etc/nsswitch.conf echo '+::::::' >> /etc/passwd echo '+::::::::' >> /etc/shadow echo '+:::' >> /etc/group # Réparer le démarrage (nis avec une erreur nfs ) DIR=`pwd` cd /etc/rc2.d ln -s ../init.d/mountnfs.sh S20mountnfs.sh cd $DIR # Etape 2: Montage correct umount /data echo 'enterprise:/home /home nfs rw,soft,bg,rsize=32768,wsize=32768,tcp,timeo=600,intr' >> /etc/fstab echo 'enterprise:/data /data nfs rw,soft,bg,rsize=32768,wsize=32768,tcp,timeo=600,intr' >> /etc/fstab mount -a # Etape 3: Corriger le sources.list et faire un update cp /data/sources.list /etc/apt/sources.list aptitude update aptitude -y upgrade # Etape 4: Installer d'autres paquets utiles et supprimer le log d'instalaltion qui contient le mot de passe en clair aptitude -y install linux-686-smp manpages-dev rm /var/log/installer/debconf-seed rm /var/log/installer/cdebconf/questions.dat # Etape 5: Activer les crontab utiles echo '0 * * * * root test -x /data/upgrade && /data/upgrade' >> /etc/crontab # Etape 6: Redémarrer, nous avons mis un nouveau kernel reboot
Téléchargements: nsswitch.conf sources.list avec miroir local le script post-install