Τώρα έφτασε η στιγμή να ετοιμάσουμε τον server να εξυπηρετήσει diskless clients.
Το πρώτο πράγμα που πρέπει να κάνουμε, είναι να χτίσουμε έναν πυρήνα με τα αναγκαία πράγματα για υποστήριξη "root over nfs". Κάντε τα ακόλουθα βήματα :
mknod /dev/nfsroot b 0 255.
rdev <path-to-zImage>/zImage /dev/nfsroot
/etc/rc.d/rc.devfs save /etc/sysconfig
Το επόμενο βήμα είναι να φτιάξουμε και να γεμίσουμε το /tftpboot
Αυτό το χειρίζεται ολόκληρο ένα μεγάλο script, μιά που το να συμπεριλάβω μιά μεγάλη λίστα εντολών σ' αυτό το howto μου φάνηκε εντελώς άχρηστο. Αν θέλετε να εφαρμόσετε αυτό εδώ το εγχειρίδιο, απλά διαβάστε το script και πληκτρολογήστε ό,τι βλέπετε! ;)
Αυτό το script ρυθμίζει "βρώμικα" κάποια πράγματα, πχ nukάρει το /tmp, κάνει προσωρινό kill στο syslog, κάνει umount στο /proc. Συνεπώς, βεβαιωθείτε ότι (α) κανένας άλλος δεν χρησιμοποιεί τον Η/Υ κατά τη διάρκεια αυτής της διαδικασίας, και ότι (β) δεν τρέχουνε τα X-Windows. Αρκεί το να βεβαιωθείτε ότι είσαστε το μόνο άτομο που έκανε login σε περιβάλλον κονσόλας, δεν χρειάζεται ν' αλλάξετε τα runlevels.
ΑΠΟΚΗΡΥΞΗ : Αυτό το script είναι δοκιμασμένο, αλλά αν ωστόσο κάνει μπάχαλο τον server σας, δεν θα σας βοηθήσω. Δεν μπορώ να πάρω οποιαδήποτε ευθύνη. Πρέπει να επαναλάβω ότι αυτό το HowTo προορίζεται μόνο για έμπειρους Linux SysAdmins. Επίσης, αυτό το script σχεδιάστηκε για να χρησιμοποιηθεί μόνο μία φορά, και εννοώ ΜΙΑ φορά. Αν το τρέξετε δύο φορές, θα nukάρει τα : /etc/fstab, /etc/X11/XF86Config, /etc/X11/X και /etc/conf.modules.
Τώρα, αφού είπαμε τα παραπάνω, απλά κάντε cut/paste το script, κάντε το εκτελέσιμο, εκτελέστε το, και προσευχηθείτε στον Άγιο Πιγκουίνο να δουλέψει! ;)
#!/bin/sh SERVER_NAME=`hostname -s` ### echo ftiaxnoume to /etc/rc.d/rc.ws #auto edw apla kanei echo s' olo to script ;) echo "# gia to root on nfs SERVER=$SERVER_NAME #xreiazomaste to proc gia to mtab, route klp mount -t proc /proc /proc IP=\`ifconfig eth0|grep inet|cut --field 2 -d ':'|cut --field 1 -d ' '\` #an apotuxei to prwto mount, pi8anotata o server, h toulaxiston kati allo #den pane kala, ara kanoume monaxa ta upoloipa, an to prwto mount petuxei mount \$SERVER:/tftpboot/\$IP/sysconfig /etc/sysconfig -o nolock && { #other mounts mount \$SERVER:/home /home -o nolock mount \$SERVER:/ /\$SERVER -o ro,nolock #/var echo Ftiaxnoume to /var ... mke2fs -q -i 1024 /dev/ram1 1024 mount /dev/ram1 /var -o defaults,rw cp -a /tftpboot/var / #network stuff . /etc/sysconfig/network HOSTNAME=\`cat /etc/hosts|grep \$IP|cut --field 2\` route add default gw \$GATEWAY ifup lo } #restore devfs settings /etc/rc.d/rc.devfs restore /etc/sysconfig umount /proc" > /etc/rc.d/rc.ws ### echo xwrizoume to runlevel 3 gia ton client kai gia ton 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 kanoume to tmp link gia to /var/tmp rm -fR /tmp ln -s var/tmp /tmp ### echo metakinoume diafora arxeia kai ftiaxnoume symlinks gi auta 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 arxeia ry8misewn twn X 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 ftiaxnoume ena protupo dir gia ta directories twn wss 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 ola teleiwmena
Τώρα πρέπει να κάνουμε μερικές ρυθμίσεις με το χέρι στον server :
#Gia root over nfs workstations. /etc/rc.d/rc.ws
Φυσικά, ο server πρέπει να κάνει export στα κατάλληλα filesystems, και να δώσει τις διευθύνσεις ip στους clients.
Πρέπει να κάνουμε export μερικά dir's για τους ws's, επομένως για το εργαστήριο εδώ στο πανεπιστήμιο έκανα τις ακόλουθες προσθήκες στο /etc/exports :
/ *.st.hhs.nl(ro,no_root_squash) /home *.st.hhs.nl(rw,no_root_squash)
Φυσικά, χρησιμοποιείστε το κατάλληλο domain ;) και επανεκκινήστε το nfs, δίνοντας :
/etc/rc.d/init.d/nfs restart
Σημείωση για χρήστες knfsd : Το knfsd δεν επιτρέπει να έχουμε πολλαπλά exports επάνω σε μία partition με διαφορετικές άδειες. Επίσης, το knfsd δεν επιτρέπει τα clients να υπερβούν τα όρια των partitions. Πχ, αν ένα client κάνει mount στο / , και το /usr είναι σε διαφορετική partition, τότε δεν θα δει το /usr. Έτσι, αν χρησιμοποιείτε το knfsd, επάνω σε διαφορετική partition θα έπρεπε να βρίσκεται τουλάχιστον το /home . Το script προετοιμασίας του server ήδη βάζει το /tftpboot στο /home , άρα αυτό δεν χρειάζεται να μπει σε ξεχωριστή partition. Εάν υπάρχουν κι άλλες partitions, στις οποίες οι clients πρέπει να έχουν πρόσβαση, κάντε ξεχωριστό export γι' αυτές, και προσθέστε εντολές mount στο /etc/rc.d/rc.ws .
/etc/rc.d/init.d/inetd restart