Τώρα έφτασε η στιγμή να ετοιμάσουμε τον 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