Next Previous Contents

3. Προετοιμάζοντας τον server

Τώρα έφτασε η στιγμή να ετοιμάσουμε τον server να εξυπηρετήσει diskless clients.

3.1 Χτίζοντας έναν πυρήνα.

Το πρώτο πράγμα που πρέπει να κάνουμε, είναι να χτίσουμε έναν πυρήνα με τα αναγκαία πράγματα για υποστήριξη "root over nfs". Κάντε τα ακόλουθα βήματα :

  1. Αφού θα χρησιμοποιήσουμε το RedΗat 5.2 με πυρήνα 2.2, πρέπει να βεβαιωθούμε ότι το RedHat 5.2 μας είναι έτοιμο για τον πυρήνα 2.2 . Η RedHat διαθέτει ένα εξαιρετικό HowTo επάνω σ' αυτό το θέμα.
  2. Προσωπικά, χρησιμοποίησα τον ίδιο πυρήνα και για τον server και για τους ws's, για ν' αποφύγω ασυμφωνίες των modules (module conflicts), αφού server και ws's μοιράζονται τα ίδια /lib/modules . Εάν αυτό δεν είναι δυνατόν στο δικό σας δίκτυο, απομιμηθείτε διαφορετικές εκδόσεις του πυρήνα, αλλάζοντας τον αριθμό έκδοσης στο επάνω-επάνω makefile του πυρήνα σας. Οι διαφορετικοί αριθμοί εκδόσεων θα μηδενίσουν το ενδεχόμενο ύπαρξης conflicts.
  3. Εκτός από τα συνηθισμένα, ο πυρήνας πρέπει να έχει τα εξής :
  4. Το source πρόγραμμα του πυρήνα χρειάζεται διόρθωση, για ν' αλλάξουμε το εξ ορισμού "root-over-nfs" mount σε /tftpboot/<ip>/root , αντί του /tftpboot/<ip>. Αυτό γίνεται για να πάρουμε ένα "καθαρό" δέντρο από directories στο /tftpboot , με ένα ανά dir ανά ws, που θα περιέχει τόσο το root για τον ws (ένα link προς το πραγματικό root του server), όσο και κάθε directory, που χρειάζεται ειδικά για τον ws..
  5. Τώρα κάνουμε ένα συνηθισμένο compile στον πυρήνα (βλέπε το "Kernel ΗowΤo").
  6. Εάν ακόμη δεν έχετε ένα /dev/nfsroot , φτιάξτε το δίνοντας :
    mknod /dev/nfsroot b 0 255.
  7. Αφού κάνετε compile στον πυρήνα, βάλτε το root στο nfsroot, δίνοντας :
    rdev <path-to-zImage>/zImage /dev/nfsroot
  8. Πριν bootάρετε με το devfs, πρέπει να κάνετε λίγες αλλαγές στο /etc/conf.modules : Βάλτε τα περιεχόμενα του conf.modules στο μέρος του devfs που αναφέρεται σ' αυτό.
  9. Αφού αυτός ο νέος πυρήνας είναι φτιαγμένος για αυτόματη ρύθμιση των ip's, κατά την εκκίνηση θα προσπαθήσει να ρυθμίσει και το ip του server. Πράγμα το οποίο, φυσικά, θα αποτύχει, μιά που ο server δίνει τα ip's. Για ν' αποφύγετε τα μεγάλα timeouts, προσθέστε : append="ip=off" στο μέρος του /etc/lilo.conf για το Linux.
  10. Τρέξτε το lilo και ξεκινήστε τον νέο πυρήνα.
  11. Εξ αιτίας του devfs, θα έχετε χάσει όλα τα symlinks επάνω στον server. Με το RedHat, αυτά είναι συνήθως τα /dev/mouse και /dev/cdrom. Ξαναφτιάξτε αυτά τα δύο. Επίσης, αν χρησιμοποιείτε ειδικές ownerships, κάντε chown προς τα κατάλληλα αρχεία στο /dev. Τώρα, σώστε τις ρυθμίσεις του /dev (στο /etc/sysconfig, αφού μπορεί να εξαρτώνται από τους ws's) :

3.2 Φτιάχνοντας και γεμίζοντάς το /tftpboot, δημιουργώντας symlinks για το /tmp, κλπ.

Το επόμενο βήμα είναι να φτιάξουμε και να γεμίσουμε το /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 :

  1. To source του script ρυθμίσεων των ws's πρέπει να το βάλουμε επάνω-επάνω στο rc.sysinit, συνεπώς βάλτε τις εξής γραμμές αμέσως μετά τον ορισμό του PATH :
    #Gia root over nfs workstations.
    /etc/rc.d/rc.ws
      
    

  2. Απλοποιείστε το /etc/rc.d/rc3.ws στο ελάχιστο δυνατόν. Μπορεί να σας φανεί χρήσιμο να φτιάξετε κάτι σαν : rc.local.ws , αλλά αυτό το αφήνω σε σας. Το δίκτυο και το nfs-fs είναι ήδη ρυθμισμένα. Το script έχει ήδη σβήσει ή ανανεώσει τα παρακάτω :

3.3 Κάνουμε export τα κατάλληλα file systems και ρυθμίζουμε το bootp

Φυσικά, ο server πρέπει να κάνει export στα κατάλληλα filesystems, και να δώσει τις διευθύνσεις ip στους clients.

Κάνουμε export τα κατάλληλα file systems

Πρέπει να κάνουμε 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 .

Ρυθμίζοντας το bootp

  1. Αν το bootp δεν είναι ήδη εγκατεστημένο, εγκαταστήστε το. Περιέχεται στο RedHat.
  2. Διορθώστε το /etc/inetd.conf και βγάλτε το σχόλιο από τη γραμμή που αρχίζει με το bootps. Αν θέλετε να χρησιμοποιήσετε EPROM εκκίνησης, βγάλτε το σχόλιο μπροστά από από τη γραμμή που μιλάει για το tftp.
  3. Επανεκκινήστε τον inetd, δίνοντας :
    /etc/rc.d/init.d/inetd restart

Next Previous Contents