Einrichten einer NFS Bootumgebung
Um Softwaredevolpment durchführen zu können ohne jedesmal ein Image flashen zu müssen oder um ein System wegen unbekannter Netzwerkeinstellungen wieder richten zu können kann man die Möglichkeit des Kernels ab r586 nutzen das Filesystem per NFS zu laden. Dazu muss man in seiner Netzwerkumgebung mindestens einen DHCP Server mit statischer Adressvergabe und Übergabe es root Paths betreiben sowie einen NFS Server der das Filesystem zur Verfügung stellt.
prinzipieller Ablauf
- Das NAS ist über den WAN Port mit dem Netzwerk verbunden was den DHCP und NFS Server bereitstellt. WAN Port ist immer die einzelne Netzwerkbuchse in der Nähe von der Spannunsgversorgung. Der Umschalter muss entsprechend des Typs der Verbindung umgeschaltet werden. Das NAS muss einen Link aufbauen über die WAN Buchse. Zur Kontrolle schaut auf die enstprechenden LED auf der Vorderseite.
- Wenn das NAS gestartet wird versucht der Kernel per DHCP Anfrage einen DHCP Server zu kontaktieren und von diesem eine IP zu erhalten.
- Nach erfolgreicher Adressvergabe durch den DHCP Server versucht der Kernel als nächstes einen NFS Server nach einer Freigabe abzufragen.
- Das freigegebene Verzeichniss vom Server wird als / (root) in das Filesystem eingebunden.
- Der Bootvorgang wird gemäß den Einträgen in /etc/init.d/ fortgesetzt.
Vorbereitungen
DHCP Server
Damit der DHCP Server die notwendigen Daten bereit stellen kann sind diverse Einstellungen nötig. Im folgenden wird die für den DHCP Server 3.x.x von ISC beschrieben. Um den DHCP Server nutzen zu können muss dieser eventuell nachinstalliert werden. Bei Debian basierenden Systemen ist dies recht einfach. Zunächst wie üblich die source Liste aktualisieren per aptitude update. Danach das Paket dhcp3-server per aptitude install dhcp3-server installieren.
Nun können wir die nötigen Einträge in der /etc/dhcp/dhcpd.conf einstellen. Damit der DHCP Server eine statische IP an unser NAS vergeben kann muss dieser die MAC Adresse des NAS Gerätes wissen um die IP dann dieser Anfrage zuordnen zu können. Wer die Möglichkeit einer COM Schnittstelle am NAS hat findet diese MAC Adresse im Bootlog. Dort sucht Ihr nach der Angabe die in der Zeile eth0 ... steht.
8139too Fast Ethernet driver 0.9.26 eth0: RealTek RTL8139 at 0xa8022000, 00:f1:40:a8:f9:40, IRQ 26 <<-- hier findet man die MAC Adresse eth1: RealTek RTL8139 at 0xa8022400, 00:b0:81:57:b8:81, IRQ 28
Wer Zugang per Telnet oder SSH auf sein NAS hat bekommt über die Shell ebenfalls die MAC heraus.
root@sa200:~# ifconfig eth0 |grep HWaddr | cut -f11 -d" " 00:F1:40:A8:F9:40
Auf einem PC kann man per ARP Befehl ebenfalls die MAC Adresse erfahren. Dazu das Nas auf der entsprechenden IP (die von eth0) anpingen und mittels arp die MAC abfragen.
root@hpcentrino:/etc/dhcp3# ping [IP_NAS] -c2 | arp -n |grep [IP_NAS] | cut -b 33-50 00:f1:40:a8:f9:40
Die nun bekannte MAC Adresse tragen wir in die dhcpd.conf für unsere spezielle Config als seperater Eintrag als host ein. Im folgenden gelten folgende IPs: Der DHCP Server hat IP 192.168.136.199 Der Host sa200 (unser NAS) mit der MAC 00:f1:40:a8:f9:40 soll die 192.168.136.200 erhalten.
#
# Sample configuration file for ISC dhcpd for Debian
#
# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
#
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
authorative;
# option definitions common to all supported networks...
option domain-name "local.lan";
option domain-name-servers 192.168.136.1;
option routers 192.168.136.1;
default-lease-time 600;
max-lease-time 7200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
# wir deklarieren eine Bereich in dem der DHCP Server Adressen vergeben soll,
# die Angabe einer Range ist optional
subnet 192.168.136.0 netmask 255.255.255.0 {
range 192.168.136.51 192.168.136.60;
# hier der noetige Eintrag fuer unser NAS
# wie soll der host genannt werden?
host sa200 {
# die MAC adresse
hardware ethernet 00:F1:40:A8:F9:40;
#welche IP Adresse soll vergeben werden ? --> diese wird dann in der /etc/exports noch benoetigt
fixed-address 192.168.136.200;
# noch einmal der host Name wie er an einen eventuellen DNS Server übergeben werde koennte
option host-name "sa200";
# wo findet der Kernel sein root filesystem?
option root-path "/home/carsten/openmct/trunk/openmct/output/nfs";
# optionale Angabe ueber weitere Server fuer diesen host wie z.B. TFTP, NFS etc --> muss gesetzt sein! in der Regel die selbe IP wie der DHCP Server <--
# benutzt Ihr einen anderen Server fuer die NFS Freigabe so tragt dessen IP hier ein
next-server 192.168.136.199;
#optionale Angabe der nis domain
option nis-domain "local";
}
}
Wenn Euer PC mehrer NICs hat dann sagt Ihr dem DHCP Server noch auf welchem Interface er DHCP Anfragen beantworten soll. Im Beispiel ist es nur auf eth0. Eingestellt wird dies in der /etc/default/dhcp3-server
# Defaults for dhcp initscript # sourced by /etc/init.d/dhcp # installed at /etc/default/dhcp3-server by the maintainer scripts # # This is a POSIX shell fragment # # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="eth0"
NFS Server
Der Part mit dem NFS Server ist relativ einfach. Wir tragen nun das Verzeichniss was wir im DHCP Server als root-path angegeben haben in die /etc/export ein. Natürlich als User root. Danach starten wir den NFS Server neu. Damit das Usermapping richtig funktioniert müsst Ihr noch Eure Gruppen ID und Eure User ID heraus suchen. Die geht einfach mit dem Befehl id. Dort sucht Ihr nach den Einträgen uid und gid. Im folgenden ist die Ausgabe gekürzt.
carsten@hpcentrino:~$ id |grep uid uid=1000(carsten) gid=1000(carsten) ...
Nun können wir die /etc/exports bearbeiten. Für die Daten hier aus der Anleitung sieht das dann so aus.
Wir wollen /home/carsten/openmct/trunk/openmct/output/nfs
an die Adresse
192.168.136.200
mit den Optionen
Lese/Schreibzugriffe syncron, kein Unterverzeichniss Check, lesend und schreibend, mappe alle Anfragen auf user nobody, mappe wiederum alle nobody Anfragen auf uid=1000 und gid=1000 (dies ist aus Sicherheitsgründen so, auf dem NAS läuft schlieslich alles user root!)
/home/carsten/openmct/trunk/openmct/output/nfs 192.168.137.200/255.255.255.0(sync,no_subtree_check,rw,all_squash,anonuid=1000,anongid=1000)
Kontrolle
Wenn Ihr alles passend eingetragen habt und die Dienste neu gestartet habt solltet Ihr im Log entsprechende Anfragen des NAS sehen. Kontrollieren lässt sich dies z.B. mit tail -f /var/log/syslog.
Wenn Ihr folgende Zeilen auftauchen seht dann klappt der NFS Boot.
Jan 2 11:11:11 hpcentrino kernel: [ 6568.134544] eth0: link down Jan 2 11:11:13 hpcentrino kernel: [ 6570.298745] eth0: link up, 10Mbps, half-duplex, lpa 0x0000 Jan 2 11:11:18 hpcentrino dhcpd: DHCPDISCOVER from 00:f1:40:a8:f9:40 via eth0 Jan 2 11:11:18 hpcentrino dhcpd: DHCPOFFER on 192.168.136.200 to 00:f1:40:a8:f9:40 via eth0 Jan 2 11:11:18 hpcentrino dhcpd: DHCPREQUEST for 192.168.136.200 (192.168.136.199) from 00:f1:40:a8:f9:40 via eth0 Jan 2 11:11:18 hpcentrino dhcpd: DHCPACK on 192.168.136.200 to 00:f1:40:a8:f9:40 via eth0 Jan 2 11:11:23 hpcentrino mountd[6250]: authenticated mount request from 192.168.136.200:800 for /home/carsten/openmct/trunk/openmct/output/nfs (/home/carsten/openmct/trunk/openmct/output/nfs)
