Les HOWTO Linux...
Page suivante - Page précédente - Table des matières
3. Préparation du serveur
3.1 Compiler un noyau
Il faut prévoir le nécessaire pour supporter root sur nfs. Voici les étapes :
- Comme nous utilisons une RedHat 5.2 avec le noyau 2.2, il faut s'assurer que notre distribution est prête pour ce noyau. RedHat fournit un excellent HowTo à ce sujet.
- J'utilise le même noyau pour le serveur et les stations pour éviter les conflits vu qu'ils partagent le même répertoire /lib/modules. Si ce n'est pas possible dans votre situation, produisez différentes versions en éditant le numéro de version au début du Makefile. Ces numéros différents devraient éviter les confilts.
- En plus des options habituelles, le noyau devrait supporter :
- ext2 compilé dans le noyau (pour le serveur, ou bien pour les deux)
- NFS et root-over-NFS compilé (pour le client ou pour les deux) ; pour avoir l'option root-over-NFS, il faut activer ip-autoconfig dans les options réseau. Nous utiliserons bootp comme méthode de configuration.
- networkcard compilé (pour le client ou les deux)
- devfs compilé (requis pour le client, également intéressant pour le serveur)
- tout ce que vous utilisez normalement, les modules pour tous les périphériques présents sur le serveur et les stations.
- Il faut éditer ensuite les sources du noyau pour
changer le montage root-over-NFS par défaut :
/tftpboot/<ip>/root au lieu de /tftpboot/<ip>,
de façon à avoir une arborescence propre sous /tftpboot
avec un répertoire par station contenant son répertoire racine
(un lien vers la racine du serveur en fait) et ses répertoires spécifiques.
- En 2.0, c'est une ligne de DEFINE dans "include/linux/nfs_fs.h" appelée "NFS_ROOT"
- En 2.2, c'est un DEFINE dans "fs/nfs/nfsroot.c"
- Il reste à compiler le noyau comme d'habitude (cf Kernel-HowTo).
- Si vous n'avez pas encore de noeud /dev/nfsroot, créez-le :
mknod /dev/nfsroot b 0 255
- Après avoir compilé le noyau, changez la racine en tapant :
rdev <path-to-zImage>/zImage /dev/nfsroot
- Avant de booter avec devfs, vous devez modifier conf.modules : ajoutez le contenu du fichier conf.modules de la documentation de devfs au conf.modules du système.
- Ce nouveau noyau est compilé avec la configuration automatique de l'adresse IP, mais cela va échouer lors du boot du serveur puisque c'est lui-même qui donne les adresses IP. Pour éviter une trop longue attente, ajouter : append="ip=off" à la section linux de /etc/lilo.conf.
- relancez lilo et bootez sur le nouveau noyau.
- avec devfs, sur le serveur, vous allez perdre tous les liens
qui existaient. Sur RedHat, c'est
le plus souvent /dev/mouse et /dev/cdrom. Recréez-les.
Remettez également vos propriétés personnalisées si vous avez
l'habitude d'avoir des particularités sur certaines entrées
de /dev. Ensuite enregistrez ce paramétrage de /dev (sous /etc/sysconfig
puisque c'est dépendant du type de machine) ainsi :
- Copiez le fichier rc.devfs de la documentation devfs des sources du noyau vers /etc/rc.d/rc.devfs et rendez-le exécutable
- Sauvegardez les paramétrages :
/etc/rc.d/rc.devfs save /etc/sysconfig
3.2 Création et remplissage de /tftpboot, création des liens vers /tmp etc.
La partie automagique
Tout cela est pris en charge par le script ci-dessous. Si on veut le faire manuellement, il suffit de suivre le script pas a pas.
Ce script effectue des actions un peu osées telles que supprimer /tmp, arrêter temporairement syslog, démonter /proc. Donc assurez-vous d'abord que personne n'utilise la machine pendant ce temps, et que X ne tourne pas. Il n'est pas nécessaire de changer de niveau d'exécution, si vous êtes sûr d'être le seul connecté et sur une console en mode texte.
Déni : ce script a été testé mais s'il provoque un plantage du serveur, vous êtes seul responsable. Je ne prends aucune responsabilité quoi qu'il arrive. Je répète que ce HowTo est fait pour des administrateurs expérimentés. De plus ce script est fait pour être lancé une fois et une seule. Le lancer une seconde fois endommagera /etc/fstab, /etc/X11/XF86Config, /etc/X11/X et /etc/conf.modules.
Ceci dit, copiez-collez ce script et rendez le exécutable, puis exécutez-le.
#!/bin/sh SERVER_NAME=`hostname -s` ### echo creating /etc/rc.d/rc.ws #this basicly just echos the entire script ;) echo "#root on nfs stuff SERVER=$SERVER_NAME # on a besoin de proc pour mtab, route, etc. mount -t proc /proc /proc IP=\`ifconfig eth0|grep inet|cut --field 2 -d ':'|cut --field 1 -d ' '\` # si le premier montage echoue, c'est qu'on est probablement # sur le serveur, ou bien que quelque chose ne va pas. # donc on ne fait la suite que si le premier montage est reussi mount \$SERVER:/tftpboot/\$IP/sysconfig /etc/sysconfig -o nolock && { # autres montages mount \$SERVER:/home /home -o nolock mount \$SERVER:/ /\$SERVER -o ro,nolock # creation de /var echo Creating /var ... mke2fs -q -i 1024 /dev/ram1 1024 mount /dev/ram1 /var -o defaults,rw cp -a /tftpboot/var / # configuration reseau . /etc/sysconfig/network HOSTNAME=\`cat /etc/hosts|grep \$IP|cut --field 2\` route add default gw \$GATEWAY ifup lo } # restauration des périphériques installés /etc/rc.d/rc.devfs restore /etc/sysconfig umount /proc" > /etc/rc.d/rc.ws ### echo splitting runlevel 3 for the client and server mv /etc/rc.d/rc3.d /etc/rc.d/rc3.server cp -a /etc/rc.d/rc3.server /etc/rc.d/rc3.ws rm /etc/rc.d/rc3.ws/*network rm /etc/rc.d/rc3.ws/*nfs rm /etc/rc.d/rc3.ws/*nfsfs rm /etc/rc.d/rc3.ws/S99local ln -s /etc/sysconfig/rc.local /etc/rc.d/rc3.ws/S99local ln -s /etc/rc.d/rc3.server /etc/sysconfig/rc3.d ln -s /etc/sysconfig/rc3.d /etc/rc.d/rc3.d ### echo making tmp a link to /var/tmp rm -fR /tmp ln -s var/tmp /tmp ### echo moving various files around and create symlinks for them echo mtab /etc/rc.d/init.d/syslog stop umount /proc touch /proc/mounts mount /proc /etc/rc.d/init.d/syslog start rm /etc/mtab ln -s /proc/mounts /etc/mtab echo fstab mv /etc/fstab /etc/sysconfig ln -s sysconfig/fstab /etc/fstab echo X-config files mkdir /etc/sysconfig/X11 mv /etc/X11/X /etc/sysconfig/X11 ln -s ../sysconfig/X11/X /etc/X11/X mv /etc/X11/XF86Config /etc/sysconfig/X11 ln -s ../sysconfig/X11/XF86Config /etc/X11/XF86Config echo conf.modules mv /etc/conf.modules /etc/sysconfig ln -s sysconfig/conf.modules /etc/conf.modules echo isapnp.conf mv /etc/isapnp.conf /etc/sysconfig ln -s sysconfig/isapnp.conf /etc/isapnp.conf ### echo creating a template dir for the ws directories echo /tftpboot/template mkdir /home/tftpboot ln -s home/tftpboot /tftpboot mkdir /tftpboot/template mkdir /$SERVER_NAME echo root ln -s / /tftpboot/template/root echo sysconfig cp -a /etc/sysconfig /tftpboot/template/sysconfig rm -fR /tftpboot/template/sysconfig/network-scripts ln -s /$SERVER_NAME/etc/sysconfig/network-scripts \ /tftpboot/template/sysconfig/network-scripts echo NETWORKING=yes > /tftpboot/template/sysconfig/network echo `grep "GATEWAY=" /etc/sysconfig/network` >> /tftpboot/template/sysconfig/network echo "/dev/nfsroot / nfs defaults 1 1" > /tftpboot/template/sysconfig/fstab echo "none /proc proc defaults 0 0" >> /tftpboot/template/sysconfig/fstab echo "#!/bin/sh" > /tftpboot/template/sysconfig/rc.local chmod 755 /tftpboot/template/sysconfig/rc.local rm /tftpboot/template/sysconfig/rc3.d ln -s /etc/rc.d/rc3.ws /tftpboot/template/sysconfig/rc3.d rm /tftpboot/template/sysconfig/isapnp.conf echo var cp -a /var /tftpboot/var rm -fR /tftpboot/var/lib ln -s /$SERVER_NAME/var/lib /tftpboot/var/lib rm -fR /tftpboot/var/catman ln -s /$SERVER_NAME/var/catman /tftpboot/var/catman rm -fR /tftpboot/var/log/httpd rm -f /tftpboot/var/log/samba/* for i in `find /tftpboot/var/log -type f`; do cat /dev/null > $i; done rm `find /tftpboot/var/lock -type f` rm `find /tftpboot/var/run -type f` echo /sbin/fsck.nfs echo "#!/bin/sh exit 0" > /sbin/fsck.nfs chmod 755 /sbin/fsck.nfs echo all done
Ajustements manuels
- Le script de configuration des stations
doit être exécuté au tout début de rc.sysinit,
donc il faut ajouter les lignes suivantes après avoir défini le PATH :
# pour les stations montant root par NFS /etc/rc.d/rc.ws
- Réduisez /etc/rc.d/rc3.ws à un minimum.
Il peut être utile de créer un rc.local.ws, à vous de voir.
Réseau et nfs sont déja configurés. Voici d'ailleurs la liste
de ce qui a déjà été enlevé/mis à jour par le script :
- réseau
- système de fichiers NFS
- NFS
- rc.local
3.3 Export des systèmes de fichiers appropriés et configuration de bootp
Export des systèmes de fichiers
Par exemple ici à l'Université, j'ajouterai ceci à /etc/exports :
/ *.st.hhs.nl(ro,no_root_squash) /home *.st.hhs.nl(rw,no_root_squash)
Remplacez les noms de domaine par les vôtres et relancez NFS :
/etc/rc.d/init.d/nfs restart
Pour les utilisateurs de knfsd : il n'est pas possible d'avoir plusieurs exports d'une partition avec des permissions différentes. De même, knfsd ne permet pas de changer de partition (par exemple si un client monte /, et /usr est sur une autre partition, le client n'aura pas accès à /usr). Ainsi, si vous utilisez knfsd, il faudra qu'au moins /home soit sur une partition différente ; le script de préparation du serveur a mis /tftpboot sous /home : il ne nécessite pas une partition supplémentaire. Si vous voulez accéder à d'autres partitions depuis vos clients, exportez les séparément et ajoutez les lignes de montage correspondantes dans /etc/rc.d/rc.ws.
Configurer bootp
- Si bootp n'est pas encore installé, c'est le moment de le faire. Il est inclus dans la RedHat.
- Editez /etc/inetd.conf et supprimez le commentaire sur la ligne commençant par bootp ; si vous utilisez une bootprom, enlevez également le commentaire pour tftp.
- Redémarrez inetd :
/etc/rc.d/init.d/inetd restart
Page suivante - Page précédente - Table des matières