Il faut prévoir le nécessaire pour supporter root sur nfs. Voici les étapes :
mknod /dev/nfsroot b 0 255
rdev <path-to-zImage>/zImage /dev/nfsroot
/etc/rc.d/rc.devfs save /etc/sysconfig
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
# pour les stations montant root par NFS /etc/rc.d/rc.ws
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.
/etc/rc.d/init.d/inetd restart