NFS-Root Mini-Howto <author>Andreas Kostyrka, <tt/andreas@ag.or.at/ <date>V8, 8 Αυγούστου 1997 <abstract> Αυτό το mini-HOWTO προσπαθεί να εξηγήσει πώς να στήσουμε έναν Linux workstation (ws) χωρίς δίσκους-δισκέτες (diskless), που κάνει mount τα root filesystems του μέσω του NFS. Κάθε νεώτερη έκδοση αυτού του mini-Howto θα βρίσκεται πάντα στο <tt>ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root</tt> , ή στον πλησιέστερο σε σας mirror του SunSite. </abstract> <toc> <sect> Copyright <p> (c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at , ή andreas@ag.or.at) <p> Εκτός κι αν εκφραστεί διαφορετικά, τα κείμενα Linux HOWTO είναι κατοχυρωμένα από τους αντίστοιχους συγγραφείς τους. Τα κείμενα αυτά επιτρέπεται ν' αναπαραχθούν και να διανεμηθούν ολόκληρα ή κατά μέρη, με οποιοδήποτε μηχανικό ή ηλεκτρονικό μέσον, όσο αυτή εδώ η σημείωση γιά το copyright διατηρείται επάνω σε κάθε αντίγραφο. Η εμπορική διανομή επιτρέπεται και ενθαρρύνεται. Ωστόσο, ο συγγραφέας επιθυμεί να ειδοποιείται γιά οποιαδήποτε τέτοια διανομή. Όλες οι μεταφράσεις, παράγωγες εργασίες, ή συλλογικές εργασίες που περιλαμβάνουν οποιοδήποτε κείμενο Linux HOWTO, πρέπει να καλύπτονται από αυτήν εδώ τη σημείωση περί copyright. Δηλαδή, δεν επιτρέπεται να παράγετε μιά εργασία βασισμένη σ' ένα HOWTO, και να επιβάλλετε επιπρόσθετους περιορισμούς στη διανομή της. Εξαιρέσεις στους παραπάνω όρους μπορούν να επιτραπούν υπό ορισμένες προϋποθέσεις. Παρακαλούμε να έρθετε σ' επαφή με τον συντονιστή των Linux HOWTO, στη διεύθυνση που υπάρχει παρακάτω. Σε συντομία : Επιθυμούμε να προωθήσουμε τις πληροφορίες που περιέχονται στην εργασία αυτή, με όσο το δυνατόν περισσότερα μέσα. Ωστόσο, επίσης επιθυμούμε να κρατήσουμε το copyright των κειμένων HOWTO, και θα θέλαμε να ειδοποιούμαστε γιά οποιαδήποτε σχέδια διανομής των HOWTOs. Εάν έχετε απορίες, παρακαλούμε να έρθετε σ' επαφή με τον Andreas Kostyrka <<tt/mailto:andreas@ag.or.at/>, τον συγγραφέα αυτού εδώ του mini-HOWTO, ή τον Tim Bynum, τον συντονιστή των Linux HOWTO's, στη διεύθυνση <<tt/mailto:linux-howto@sunsite.unc.edu/> μέσω email. <sect1>Ποιοι συνεισέφεραν <p> <itemize> <item> Avery Pennarun <tt/<apenwarr@foxnet.net>/ (πώς να bootάρουμε χωρίς <bf/LILO/) <item> Ofer Maor <tt/<ofer@hadar.co.il>/ (έδωσε ένα καλύτερο mini howto επάνω στο πώς να στήνουμε diskless workstations.) <item> Christian Leutloff <tt/<leutloff@sundancer.tng.oche.de>/ (έδωσε πληροφορίες σχετικές με το netboot.) </itemize> <sect>Γενική θεώρηση <p> Γενικά, υπάρχουν τα παρακάτω προβλήματα γιά έναν ws : <itemize> <item>Πρέπει να βρει τη δική του διεύθυνση IP, και - αν χρειαστεί - τις υπόλοιπες ρυθμίσεις του Ethernet. <item> Πρέπει να γνωρίζει το <em/NFS/-server και το mount path γιά το root filesystem του. </itemize> <p> Η τωρινή υλοποίηση του <em/NFSROOT/ στον πυρήνα του Linux (έκδοση 1.3.7x) επιτρέπει τις ακόλουθες λύσεις : <itemize> <item>Η διεύθυνση IP μπορεί να βρεθεί από το <em/RARP/, ή η πλήρης ρύθμιση του Ethernet μπορεί να περαστεί στον πυρήνα μέσω παραμέτρων (του πυρήνα), από το <bf/LILO/ , ή το <bf/LOADLIN/. <item>Το mounting path του <em/NFS/ μπορεί να περαστεί με παραμέτρους του Εάν δεν γίνει έτσι, ο πυρήνας υποθέτει ότι το <em/RARP/-server είναι επίσης <em/NFS/-server, και χρησιμοποιεί το default compiled μέσα του path. (Η τρέχουσα default τιμή στον πυρήνα είναι η : <tt>/tftpboot/<<em/IP-διεύθυνση του ΗΥ/></tt>.) <item>Οι ρυθμίσεις του client ανευρίσκονται από το <em/BOOTP/. </itemize> Πριν αρχίσετε να στήνετε ένα diskless περιβάλλον, πρέπει ν' αποφασίσετε αν θα bootάρετε με το <bf/LILO/ , ή το <bf/LOADLIN/. Το πλεονέκτημα είναι η ευελιξία, το μειονέκτημα είναι η ταχύτητα. Είναι ταχύτερο να bootάρουμε έναν πυρήνα του Linux χωρίς το <bf/LILO/ , αλλά αυτό μπορεί να μας απασχολήσει, μπορεί και όχι. <sect> Ρυθμίσεις στον server <sect1>Κάνοντας compile στους πυρήνες <p> Πιθανότατα η υποστήριξη του <em/RARP/ μέσα στον πυρήνα του server να είναι μιά καλή ιδέα. Πρέπει να την συμπεριλάβετε, αν είναι να bootάρετε χωρίς παραμέτρους πυρήνα. Από την άλλη πλευρά, δεν πρόκειται να σας βοηθήσει, αν ο client δεν βρίσκεται στο ίδιο υποδίκτυο (subnet) με τον server. <p> Ο πυρήνας γιά τον ws χρειάζεται το ακόλουθο ελάχιστο σύνολο δυνατοτήτων compiled μέσα του : <itemize> <item> Το <em/NFS/-filesystem . (Δεν χρειάζεται να έχει compiled μέσα του την υποστήριξη γιά <em/ext2/ , ένα module είναι αρκετό.) <item> Το &dquot;Root on NFS&dquot; πρέπει να είναι ενεργοποιημένο. <item> Τον Ethernet driver της κάρτας δικτύου του ws. <item> Ανάλογα με τις ανάγκες σας, πιθανόν να πρέπει να περιλάβετε υποστήριξη γιά <em/RARP/ , ή <em/BOOTBP/ γιά το NFS-Root. (Μ' αυτό εννοώ τις ερωτήσεις που κάνουμε μετά την ερώτηση γιά το NFS στο make config.) </itemize> <p> Αν ο ws θα bootάρει χωρίς παραμέτρους του πυρήνα, πρέπει επίσης να θέσετε το root device ως 0:255. Κάντε το αυτό δημιουργώντας ένα ψεύτικο (dummy) αρχείο device, δίνοντας : <tt>mknod /dev/nfsroot b 0 255</tt>. Αφού φτιάξετε αυτό το αρχείο, μπορείτε να θέσετε το root device του image του πυρήνα, με : <tt>rdev <<em/kernel-image/> /dev/nfsroot</tt>. <sect1> Δημιουργία του root filesystem <sect2> Αντιγράφοντας το filesystem <p> <em> Προειδοποίηση : Αν και αυτές εδώ οι οδηγίες πιθανότατα θα δουλέψουν στο δικό σας σύστημα, δεν είναι καθόλου αυτονόητες γιά οποιοδήποτε περιβάλλον. Γιά καλύτερους τρόπους να στήσετε ένα root filesystem γιά τους clients, διαβάστε το NFS-Root-Client mini howto του Ofer Maor <tt/<ofer@hadar.co.il>/. </em> <p> Αφού αποφασίσετε πού θα βάλετε το root tree, δημιουργήστε το με (πχ) : <tt>mkdir -p <<em/directory/></tt> και : <tt>tar cClf / - | tar xpCf <<em/directory/> -</tt>. <p> Αν bootάρετε τον πυρήνα σας χωρίς LILO, τότε το rootdir πρέπει να είναι : <tt>/tftpboot/<<em/IP-address/></tt>. Αν δεν σας αρέσει, μπορείτε να το αλλάξετε από μέσα από το επάνω-επάνω Makefile στα sources του πυρήνα. Ψάξτε γιά μιά γραμμή σαν αυτή : <tt>NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\""</tt> Αν αλλάξετε αυτή την γραμμή, πρέπει να ξανακάνετε compile τον πυρήνα. <p> <sect2> Αλλαγές στο root filesystem <p> Τώρα αφαιρέστε τα άχρηστα αρχεία, και ελέγξτε τα scripts του /etc/rc.d . Μερικά σημαντικά σημεία : <itemize> <item> Ένα, η ρύθμιση του eth0. Ο ws συνήθως έχει ένα ρυθμισμένο (τουλάχιστον μερικώς) eth0. Το να ρυθμίσετε τη διεύθυνση IP του ws επάνω στη διεύθυνση IP του server, δεν είναι κάτι έξυπνο. (Αλλά συνέβη στον συγγραφέα κατά τη διάρκεια μιας από τις πρώιμες προσπάθειές του.) <item> Ένα άλλο σημείο προσοχής, είναι το /etc/fstab του ws. Πρέπει να ρυθμιστεί γιά nfs filesystems. <item> <bf/ΠΡΟΕΙΔΟΠΟΙΗΣΗ/ : Μην συγχέετε τα root filesystems του server και του ws. (Είχα ήδη ρίξει ένα rc.inet1 πάνω στον server, και απορούσα γιατί ο server δεν δούλευε.) </itemize> <sect2> Κάνοντας export το filesystem <p> Κάντε export το root dir προς τον ws. Διαβάστε την εντολή : <tt/exports(5)/. Πιθανότατα θα πρέπει να επανεκκινήσετε το nfsd/mountd μετά απ' αυτή την αλλαγή. Με το RedHat αυτό γίνεται εύκολα, δίνοντας : <tt>/etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start </tt>. <sect2> Ρύθμιση του RARP <p> Ρυθμίστε το <em/RARP/ κάπου επάνω στο δίκτυο. Αν bootάρετε χωρίς παράμετρο nfsroot, ο server του <em/RARP/ πρέπει να είναι και ο server του <em/NFS/ . (Συνήθως είναι.) Γιά να το επιτύχετε αυτό, πρέπει να τρέξετε έναν πυρήνα με υποστήριξη <em/RARP/ . <p> Γιά να το κάνετε, δώστε (και εγκαταστήστε το κάπου μέσα στο <tt>/etc/rc.d</tt> του server!) : <p> <tt>/sbin/rarp -s <<em/ip-addr/> <<em/hardware-addr/></tt> <p> όπου : <descrip> <tag/ip-addr/ είναι η διεύθυνση IP του ws, και <tag/hardware-addr/ είναι η διεύθυνση Ethernet της κάρτας δικτύου του ws. </descrip> <p> παράδειγμα : <tt>/sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12</tt> <p> Μπορείτε επίσης να χρησιμοποιήσετε ένα συμβολικό όνομα αντί της διεύθυνσης IP, όσο ο server είναι ικανός να βρίσκει τη διεύθυνση αυτή. (Με ψάξιμο στο /etc/hosts , ή στο <em/DNS/ .) <sect2> Ρύθμιση του BOOTP <p> Γιά τη ρύθμιση του <em/BOOTP/ πρέπει να διορθώσετε το <tt>/etc/bootptab</tt>. Παρακαλώ, συμβουλευτείτε τις man σελίδες <em>bootpd(8)</em> και <em>bootptab(5)</em> . <sect2> Βρίσκοντας τις hardware διευθύνσεις των καρτών <p> Δεν ξέρω ποια είναι η hardware διεύθυνση! Πώς την βρίσκω; <itemize> <item> Bootάρετε τη δισκέτα που φτιάξατε, και περιμένετε τη γραμμή διαγνωστικών, όπου αναγνωρίζεται η κάρτα δικτύου. Συνήθως περιέχει 6 δεκαεξαδικά bytes, και αυτή (πρέπει να) είναι η hardware διεύθυνση της κάρτας. <item> Bootάρετε τον ws με κάποιο άλλο λειτουργικό, που περιλαμβάνει δυνατότητα TCP/IP . Τότε κάντε ping στον ws από τον server. Ψάξτε στην cache του ARP, δίνοντας : <tt>/sbin/arp -a</tt> </itemize> <sect> Bootάροντας τον workstation <p> <sect1> Χρησιμοποιώντας μιά boot eprom <p> Μιά που προσωπικά δεν έχω ακόμη χρησιμοποιήσει ένα τέτοιο θηρίο, μπορώ να σας δώσω μονάχα τις ακόλουθες υποδείξεις (χάρη στον Christian Leutloff <tt/<leutloff@sundancer.tng.oche.de>/) : <itemize> <item> Δεν μπορείτε να χρησιμοποιήσετε &dquot;συνηθισμένες&dquot; bootroms. <item> Υπάρχει ένα πρόγραμμα <tt/netboot/ , από τον Gero Kuhlmann, που φτιάχνει bootroms γιά Linux, και δίνει περισσότερες πληροφορίες. Το <tt/netboot/ είναι διαθέσιμο από τον πλησιέστερο mirror του Linux, ή σαν πρόγραμμα μέσα στη distribution του Debian (<tt/netboot-0.4/). <item> Διαβάστε προσεκτικά την τεκμηρίωση της boot eprom σας. <item> Πιθανότατα πρέπει να ενεργοποιήσετε το tftpd στον server, αλλά αυτό εξαρτάται από τον τρόπο, με τον οποίο η boot eprom σας φορτώνει τον πυρήνα. <item> <it>Κάθε πληροφορία γιά πωλητές boot eproms γιά το Linux, όπως τις περιγράψαμε παραπάνω, είναι ευπρόσδεκτη - καθώς δεν έχει ο καθένας πρόσβαση σε eprom programmer :( (ειδικά στην Ευρώπη, όπου ζω). Τις πληροφορίες θα τις περιλάβω εδώ μετά.</it> </itemize> <sect1> Χρησιμοποιώντας μιά δισκέτα σκέτου πυρήνα <p> Αν έχετε κάνει export το root filesystem με το σωστό όνομα γιά την default ονομασία, και ο <em/NFS/ server σας είναι ταυτόχρονα και <em/RARP/ server (που σημαίνει ότι οι ΗΥ βρίσκονται στο ίδιο υποδίκτυο), τότε μπορείτε απλά να bootάρετε τον πυρήνα με <tt/cat/ing σε μιά δισκέτα. (Πρέπει να θέσετε το root device του πυρήνα ως 0:255.) Αυτό προϋποθέτει ότι το root directory στον server είναι <tt>/tftpboot/</tt><it>IP-Address</it> (αυτή η τιμή μπορεί ν' αλλάξει, όταν κάνουμε compile τον πυρήνα). <sect1> Χρησιμοποιώντας έναν bootloader & το <em/RARP/ <p> Δώστε στον πυρήνα όλες τις απαραίτητες παραμέτρους κατά την εκκίνηση, και προσθέστε : <tt>nfsroot=<<em/server-ip-addr/>:<<em>/path/to/mount</em>></tt> , όπου : <em/server-ip-addr/ είναι η διεύθυνση IP του NFS-server σας, και <em>/path/to/mount</em> είναι το path προς το root directory. Υποδείξεις : <itemize> <item> Όταν χρησιμοποιείτε το <bf/LILO/ , σκεφθείτε να χρησιμοποιήσετε την ιδιότητα &dquot;<tt/lock/&dquot; : Απλά πληκτρολογήστε μιά φορά όλες τις σωστές παραμέτρους, και προσθέστε &dquot;<tt/lock/&dquot; . Την επόμενη φορά που θα bootάρετε, αφήστε το LILO να φτάσει σε timeout. <item> Όταν φτιάχνετε μιά δισκέτα γιά έναν συγκεκριμένο ws, μπορείτε επίσης να χρησιμοποιήσετε την ιδιότητα <tt/append=/ στο <tt/lilo.conf/ . </itemize> <sect1> Χρησιμοποιώντας έναν bootloader χωρίς το <em/RARP/ <p> Μαζί με το <tt/nfsroot/ , δώστε ένα όρισμα πυρήνα στη γραμμή εντολών : <tt>nfsaddrs=<<em/wst-IP/>:<<em/srv-IP/>:<<em/gw-IP/>:<<em/netm-IP/>:<<em/hostname/></tt> . Ο πυρήνας θα ρυθμίσει το <tt/eth0/ με τις δεδομένες παραμέτρους : <descrip> <tag/wst-IP/ Διεύθυνση IP του ΗΥ <tag/srv-IP/ Διεύθυνση IP του NFS-server <tag/gw-IP/ gateway <tag/netm-IP/ netmask <tag/hostname/ όνομα υπολογιστή </descrip> <sect> Γνωστά προβλήματα <p> <sect1> Το /sbin/init δεν ξεκινάει. <p> Ένα πολύ συνηθισμένο πρόβλημα με το /sbin/init είναι ότι (τουλάχιστον) μερικές από τις πρόσφατες distributions έχουν το /sbin/init linked δυναμικά. Συνεπώς, πρέπει να δώσετε σωστή ρύθμιση /lib γιά τον client. Κάτι εύκολο που μπορούμε να δοκιμάσουμε, είναι ν' αντικαταστήσουμε το /sbin/init (του client) με ένα στατικά linked πρόγραμμα &dquot;Hello World&dquot;. Μ' αυτόν τον τρόπο θα ξέρετε αν πρόκειται γιά κάτι πιο θεμελιώδες από απλά ένα πρόβλημα με το δυναμικό linking. <sect1> Προβλήματα με το /dev . <p> Αν κατά την εκκίνηση παίρνετε κάποια μπερδεμένα μηνύματα γιά τα ttys, τότε θα έπρεπε να τρέξετε ένα MAKEDEV από τον client στο /dev directory. Υπάρχουν φήμες ότι αυτό δεν δουλεύει με κάποια ΛΣ που χρησιμοποιούν 64-bit αριθμούς dev. Αν σας τύχει κάτι τέτοιο, παρακαλώ στείλτε μου e-mail γιά ποιό ΛΣ πρόκειται. Μιά πιθανή λύση είναι να φτιάξετε νωρίς στη διαδικασία εκκίνησης ένα μικρό /dev ramdisc, και να επανεγκαθιστάτε τα device nodes κάθε φορά. <sect> Άλλα θέματα <p> <itemize> <item> Υπάρχει ένα BOOTP πρόγραμμα : <tt>ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz</tt> <p> Με τον initrd (που περιέχεται στο Linux 2.0), θα μπορούσαμε να το κάνουμε να δουλέψει αρκετά όμορφα. Στην πραγματικότητα, ο initrd είναι πάντα μιά προχωρημένη λύση γιά πιο λεπτομερείς ρυθμίσεις. <item> Γιά εκκινήσεις βασισμένες μονάχα στο bootpd, αυτό πιθανότατα δεν χρειάζεται, μιά που το Linux 2.0 περιέχει επίσης και την δυνατότητα να χρησιμοποιούμε το BOOTP αντί του RARP. (Ακριβέστερα, μπορούμε να κάνουμε compile και τα δύο στον πυρήνα, και κερδίζει όποιο αποκρίνεται ταχύτερα.) <item> Στο directory της τεκμηρίωσης του source του kernel, υπάρχει ένα αρχείο που περιέχει τεκμηρίωση γιά το NFS-Root. <item> Υπάρχει κι ένα patch που τριγυρνάει, που μας επιτρέπει να κάνουμε swapping επάνω στο NFS. Μου το στείλανε (κατά τη διάρκεια μιας περιόδου, όπου είχα πολλή δουλειά), αλλά κατάφερα να χάσω το e-mail. :( <p> Πιθανότατα θα το βρείτε στο http://www.linuxhq.com/ , στο τμήμα με τα &dquot;ανεπίσημα&dquot; patches. <item> Το public PGP κλειδί μου μπορείτε να το βρείτε κάνοντας finger ση διεύθυνση andreas@ag.or.at . Το αποτύπωμα είναι : F1 F7 43 D5 07 C4 6C 87 BF 6B 33 A2 2C EE 5A F9. </itemize> </article>