Netzwerk-Boot
-
- Interessierter
- Beiträge: 66
- Registriert: Montag 2. Januar 2006, 11:42
Netzwerk-Boot
Hallo!
Bei meiner DBox ist leider der Flash kaputt gegangen, deswegen muss ich die Box vom Netz booten. Aus verschiedenen Gründen würde ich gerne erreichen, dass die Box das NFS-Root-Verzeichnis von einem anderen Server holt als der DHCP/BOOTP-Server. Leider scheint u-boot die "Server-Name"-Option vom DHCP komplett zu ignorieren (benutzt u-boot eigentlich DHCP oder BOOTP?), wäre das überhaupt die richtige Option?
Laut Konsole-Log versucht die Box immer den Kernel (per TFTP) und das NFS-Root von der IP-Adresse zu laden, auf der der DHCP (von ISC) läuft. Ich verwende als DHCP-Server ein Gentoo-System, das Booten funktioniert einwandfrei, wenn das NFS-Root auf dem DHCP liegt. Von mir aus kann er den Kernel auch vom DHCP-Rechner kriegen, ich möchte den nur danach ausschalten können (deswegen soll das Root-FS woanders sein).
Kann ich irgendwie die Kernel-Optionen direkt beeinflussen? Das wäre vermutlich noch am besten (wg. spezieller Mount-Optionen fürs NFS...).
Grüße und Danke schon mal allen
Martin
Bei meiner DBox ist leider der Flash kaputt gegangen, deswegen muss ich die Box vom Netz booten. Aus verschiedenen Gründen würde ich gerne erreichen, dass die Box das NFS-Root-Verzeichnis von einem anderen Server holt als der DHCP/BOOTP-Server. Leider scheint u-boot die "Server-Name"-Option vom DHCP komplett zu ignorieren (benutzt u-boot eigentlich DHCP oder BOOTP?), wäre das überhaupt die richtige Option?
Laut Konsole-Log versucht die Box immer den Kernel (per TFTP) und das NFS-Root von der IP-Adresse zu laden, auf der der DHCP (von ISC) läuft. Ich verwende als DHCP-Server ein Gentoo-System, das Booten funktioniert einwandfrei, wenn das NFS-Root auf dem DHCP liegt. Von mir aus kann er den Kernel auch vom DHCP-Rechner kriegen, ich möchte den nur danach ausschalten können (deswegen soll das Root-FS woanders sein).
Kann ich irgendwie die Kernel-Optionen direkt beeinflussen? Das wäre vermutlich noch am besten (wg. spezieller Mount-Optionen fürs NFS...).
Grüße und Danke schon mal allen
Martin
-
- Developer
- Beiträge: 457
- Registriert: Sonntag 23. März 2003, 00:39
hi,
evtl. ist dafür next-server in der dhcp-config zuständig. Das wurde mir hier http://forum.tuxbox-cvs.sourceforge.net ... nextserver
mal zum Verhängnis
ciao,
ChakaZulu
evtl. ist dafür next-server in der dhcp-config zuständig. Das wurde mir hier http://forum.tuxbox-cvs.sourceforge.net ... nextserver
mal zum Verhängnis
ciao,
ChakaZulu
-
- Interessierter
- Beiträge: 66
- Registriert: Montag 2. Januar 2006, 11:42
Danke, das werde ich heute abend mal probieren. Kann man denn irgendwie die Kernel-Kommandozeile beeinflussen? Muss ich dazu u-boot neu compilieren (gibts da eigentlich ein gutes Howto für)? Ich müsste nämlich noch die Portnummern vom NFS angeben, weil leider der portmap auf dem NFS-Server nicht erreichbar ist (Firewall dazwischen sperrrt Port 111, und da hab ich keinen Einfluss drauf...).
Grüße
M@rtin
Grüße
M@rtin
-
- Senior Member
- Beiträge: 1339
- Registriert: Donnerstag 24. April 2003, 12:12
Ja, das geht. In der u-boot.config (das ist ein Symlink, der beim ersten Durchlauf des CDK gesetzt wird, falls er noch nicht existiert, aber später nicht mehr angerührt wird, so daß man hier auch eigene Configs hinzufügen kann) im Verzeichnis "boot/u-boot-config" wird die Kernel Kommandozeile innerhalb des CONFIG_BOOTCOMMAND-Defines als "bootargs"-Umgebungsvariable definiert.
Für eine Änderung muß u-boot allerdings neu gebaut werden.
Daß er den Root auf dem DHCP-Server erwartet, will liegt daran, daß in der Config: "nfsroot=$(serverip):$(rootpath)" steht und die Umgebungsvariable "serverip" beim u-boot eben die IP des DHCP-Servers enthält. Warum das mal so angelegt wurde weiß ich nicht.
Laß einfach das "$(serverip):" weg und gib in der dhcp.conf dann den gewünschten Server als IP an, dann kann man den root auch auf einem anderen Rechner anlegen.
Also in der u-boot.config:
und in der dhcp.conf dann (als Beispiel):
Für eine Änderung muß u-boot allerdings neu gebaut werden.
Daß er den Root auf dem DHCP-Server erwartet, will liegt daran, daß in der Config: "nfsroot=$(serverip):$(rootpath)" steht und die Umgebungsvariable "serverip" beim u-boot eben die IP des DHCP-Servers enthält. Warum das mal so angelegt wurde weiß ich nicht.
Laß einfach das "$(serverip):" weg und gib in der dhcp.conf dann den gewünschten Server als IP an, dann kann man den root auch auf einem anderen Rechner anlegen.
Also in der u-boot.config:
Code: Alles auswählen
"nfsroot=$(rootpath)"
Code: Alles auswählen
"option root-path "192.168.1.10:/home/tuxbox/cdkroot"
-
- Interessierter
- Beiträge: 66
- Registriert: Montag 2. Januar 2006, 11:42
-
- Developer
- Beiträge: 2183
- Registriert: Mittwoch 10. Dezember 2003, 07:59
uboot selber ist gut dokumentiert (http://www.denx.de/wiki/view/DULG/UBoot)
Das cdk selber ist eigentlich auch straight forward, einfach im tuxbox-cvs/cdk/doc und tuxbox-cvs/cdk/Makefile{.am} anfangen
Wichtig sind die configure optionen, damit du das richtige uboot baust (sprich fürs Flash)
Houdini
Das cdk selber ist eigentlich auch straight forward, einfach im tuxbox-cvs/cdk/doc und tuxbox-cvs/cdk/Makefile{.am} anfangen
Wichtig sind die configure optionen, damit du das richtige uboot baust (sprich fürs Flash)
Houdini
-
- Developer
- Beiträge: 1475
- Registriert: Dienstag 4. Februar 2003, 22:02
nextserver beschreibt den TFTP-Server, nicht den NFS-Server.
Irgendwie muss es eine vernünftige Lösung geben (also so dass u-boot den NFS-rootserver dynamisch, != DHCP-server, setzt). Z.B. hat der man-seite für dhcpd.conf(5) ein Beispiel
Irgendwie muss es eine vernünftige Lösung geben (also so dass u-boot den NFS-rootserver dynamisch, != DHCP-server, setzt). Z.B. hat der man-seite für dhcpd.conf(5) ein Beispiel
Code: Alles auswählen
subclass "allocation-class-2" 1:08:00:2b:a1:11:31 {
option root-path "samsara:/var/diskless/alphapc";
filename "/tftpboot/netbsd.alphapc-diskless";
}
-
- Interessierter
- Beiträge: 66
- Registriert: Montag 2. Januar 2006, 11:42
Theoretisch sollte es das, zumindest meine u-boot-Version lässt sich aber nicht davon beeindrucken...Barf hat geschrieben:nextserver beschreibt den TFTP-Server, nicht den NFS-Server.
das habe ich auch schon (als erstes) probiert, dann versucht er als Rootpath "dhcpserver:samsara:/var/diskless/alphapc" zu mounten, und das geht natürlich schief...Barf hat geschrieben:Code: Alles auswählen
subclass "allocation-class-2" 1:08:00:2b:a1:11:31 { option root-path "samsara:/var/diskless/alphapc"; filename "/tftpboot/netbsd.alphapc-diskless"; }
Ich denke, ich versuche mir erstmal einen u-boot selbst zu bauen (er kompiliert immernoch am CDK... ich sollte ihn mal die nacht durchlaufen lassen ), vielleicht kann ich mir dann den DHCP sogar sparen (mit einer statischen IP-Konfiguration)?
Ich will doch gar nicht fürs Flash bauen... Ich krieg das aber schon hin!Houdini hat geschrieben:Wichtig sind die configure optionen, damit du das richtige uboot baust (sprich fürs Flash)
-
- Interessierter
- Beiträge: 66
- Registriert: Montag 2. Januar 2006, 11:42
-
- Developer
- Beiträge: 2183
- Registriert: Mittwoch 10. Dezember 2003, 07:59
-
- Interessierter
- Beiträge: 66
- Registriert: Montag 2. Januar 2006, 11:42
Code: Alles auswählen
mhier@pegasus cdk $ make .deps/u-boot
make: `.deps/u-boot' is up to date.
EDIT:
Code: Alles auswählen
mhier@pegasus tuxbox $ cd boot/u-boot-config/
mhier@pegasus u-boot-config $ touch u-boot.config
mhier@pegasus tuxbox $ cd ../../cdk/
mhier@pegasus cdk $ make .deps/u-boot
make: `.deps/u-boot' is up to date.
-
- Developer
- Beiträge: 2183
- Registriert: Mittwoch 10. Dezember 2003, 07:59
-
- Senior Member
- Beiträge: 1339
- Registriert: Donnerstag 24. April 2003, 12:12
Code: Alles auswählen
rm .deps/u-boot && make u-boot
-
- Interessierter
- Beiträge: 66
- Registriert: Montag 2. Januar 2006, 11:42
-
- Developer
- Beiträge: 1475
- Registriert: Dienstag 4. Februar 2003, 22:02
Kehren wir zu Ursprungsproblem zurück: Das u-boot nimmt an, dass der NFS-Server = TFTP/DHCP-Server ist. Dies ist ein Ärgerlichkeit, die durchaus ein Fix verdient. Hier hat schon Npq folgende Lösung (korrekterweise) vorgeschalgen:
Da also die Änderung keine Nachteile hat, schlage ich vor, sie zu committen. Falls niemand protestiert mache ich es.
Frage ist natürlich, falls etwas Altes (z.B. vorhandene dhcpd.conf-Setups) kaputtgehen. Dazu in File ...linux-2,4,32/Documentation/nfsroot.txt:Npq hat geschrieben:Laß einfach das "$(serverip):" weg und gib in der dhcp.conf dann den gewünschten Server als IP an, dann kann man den root auch auf einem anderen Rechner anlegen.
Also in der u-boot.config:und in der dhcp.conf dann (als Beispiel):Code: Alles auswählen
"nfsroot=$(rootpath)"
Code: Alles auswählen
"option root-path "192.168.1.10:/home/tuxbox/cdkroot"
Also: rootpaths ohne Doppelpunkte werden also wie früher funktionieren. Einzige "Catch" ist dass der server mit IP-Adress angegeben sein muss. (also nicht Name, Name resolution ist ausgeschaltet. Das "samsara"-Beispiel wird also nicht funktionieren.)nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
If the `nfsroot' parameter is NOT given on the command line, the default
"/tftpboot/%s" will be used.
<server-ip> Specifies the IP address of the NFS server. If this field
is not given, the default address as determined by the
`ip' variable (see below) is used. One use of this
parameter is for example to allow using different servers
for RARP and NFS. Usually you can leave this blank.
Da also die Änderung keine Nachteile hat, schlage ich vor, sie zu committen. Falls niemand protestiert mache ich es.
-
- Tuxboxer
- Beiträge: 5001
- Registriert: Montag 11. November 2002, 15:26
Re: Netzwerk-Boot
hi,
Ich wuensche mir auch eine Moeglichkeit eine Yadd/beliebige/spezielle (besser entpackte?) Images von einem NFS-Server zu booten. So wie ich jetzt ein NFS-Aufnahmeverzeichnis auf der DBox angeben kann, wuerde ich gerne ein Boot-Verzeichnis angeben koennen...das waere super...zB. jedes NAS-Device/PC mit Windows/Linux _nur_ mit NFS-Server wuerde funktionieren...ist wahrscheinlich viel zu einfach gedacht und sicher kein Standard. Was passiert beim booten mit einem normalen geflashten hochkomprimierten Image? Wird doch komplett in's Ram entpackt, oder?
cu,
peter
sorry, habe den Thread eben erst entdeckt und weiss nicht so genau ob es das ist was Du moechtest: Ich benutze auch nicht den NFS-Server des Bootmanager..allerdings um eine Yadd zu booten. Es reicht bei mir '/yadd/yaddroot' als 'yaddroot' mit einem SFU-NFS-Server zu exportieren....den Bootmanager kann ich nach dem booten beenden. sorry, wenn das eine Loesung ist die nicht zum Problem passt.mhier hat geschrieben:Bei meiner DBox ist leider der Flash kaputt gegangen, deswegen muss ich die Box vom Netz booten. Aus verschiedenen Gründen würde ich gerne erreichen, dass die Box das NFS-Root-Verzeichnis von einem anderen Server holt als der DHCP/BOOTP-Server.
Ich wuensche mir auch eine Moeglichkeit eine Yadd/beliebige/spezielle (besser entpackte?) Images von einem NFS-Server zu booten. So wie ich jetzt ein NFS-Aufnahmeverzeichnis auf der DBox angeben kann, wuerde ich gerne ein Boot-Verzeichnis angeben koennen...das waere super...zB. jedes NAS-Device/PC mit Windows/Linux _nur_ mit NFS-Server wuerde funktionieren...ist wahrscheinlich viel zu einfach gedacht und sicher kein Standard. Was passiert beim booten mit einem normalen geflashten hochkomprimierten Image? Wird doch komplett in's Ram entpackt, oder?
cu,
peter
-
- Erleuchteter
- Beiträge: 553
- Registriert: Freitag 27. Februar 2004, 14:30
Das Kernelloading des durch newmake erzeugten 'u-boot' sieht ja wie folgt aus:Barf hat geschrieben:nextserver beschreibt den TFTP-Server, nicht den NFS-Server.
Irgendwie muss es eine vernünftige Lösung geben (also so dass u-boot den NFS-rootserver dynamisch, != DHCP-server, setzt). Z.B. hat der man-seite für dhcpd.conf(5) ein Beispiel
Code: Alles auswählen
subclass "allocation-class-2" 1:08:00:2b:a1:11:31 { option root-path "samsara:/var/diskless/alphapc"; filename "/tftpboot/netbsd.alphapc-diskless"; }
Code: Alles auswählen
bootcmd=dhcp; tftp "$(bootfile)"; protect off 10020000 107fffff; setenv
bootargs root=/dev/nfs rw nfsroot=$(rootpath)
ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off
console=$(console); bootm
und '$(bootfile)' mit "kernel-cdk" auffüllen zu lassen.
Die 'dhcpd.conf' sollte also in etwa so aussehen:
Code: Alles auswählen
...
subnet 192.168.0.0 netmask 255.255.255.0 {
host dbox {
fixed-address 192.168.0.2;
hardware ethernet 00:50:9c:xx:xx:xx;
allow bootp;
next-server dhcp-server-ip; # ohne next-server Eintrag geht es nicht !
if exists vendor-class-identifier {
filename "kernel-cdk";
option root-path "nfsserver-ip:/das/ist/yaddroot";
} else {
filename "u-boot";
}
}
}
...
Zuerst vom br-bootlader per bootp (daran läßt sich nix ändern).
Mit obiger Konfiguration wird dann erst 'u-boot' per tftp angeboten,
weil in diesem Fall kein 'vendor-class-identifier' present ist.
Wenn dann das 'u-boot' geladen ist kommt von ihm die nächste
dhcp-Anfrage, aber nun wird 'kernel-cdk' per tftp angeboten und
außerdem korrekt '$(rootpath)' für die commandline des Kernels
gesetzt, weil u-boot selbst offenbar 'vendor-class-identifier' liefert
und (dhcp eine Fallunterscheidung durchführen kann).
Das sollte reichen einen anderen nfs-Server zu spezifizieren und
mit 'next-server' kann man evtl. sogar noch einen anderen tftp-server
auswählen (was aber in der Regel) nicht so dringend benötigt wird.
So jedenfalls hab ich's mit einer meiner Boxen hinbekommen.
Ihr könnt's ja mal ausprobieren ...
- GMo -
-
- Erleuchteter
- Beiträge: 553
- Registriert: Freitag 27. Februar 2004, 14:30
Hi,
hab noch festgestellt, daß der Parameter "next-server" unbedingt
in dhcpd.conf drin stehen muß, sonst funktioniert das ganze nicht.
Hab mein letztes Posting dahingehen angepasst und
eingefügt -> Für "dhcp-server-ip" hab ich halt eben die IP meines dhcp-Servers
(der auch tftp-Server ist) eingetragen. Ob da was anderes geht,
weiß ich nicht ...
- GMO -
hab noch festgestellt, daß der Parameter "next-server" unbedingt
in dhcpd.conf drin stehen muß, sonst funktioniert das ganze nicht.
Hab mein letztes Posting dahingehen angepasst und
Code: Alles auswählen
...
next-server dhcp-server-ip;
....
(der auch tftp-Server ist) eingetragen. Ob da was anderes geht,
weiß ich nicht ...
- GMO -
-
- Developer
- Beiträge: 1475
- Registriert: Dienstag 4. Februar 2003, 22:02
Ein Paar Bemerkungen dazu:
Die Änderungen in u-boot sind in HEAD, nicht in newmake.
Das Thema next-server war früher hier http://forum.tuxbox.org/forum/viewtopic.php?t=38668 und http://forum.tuxbox.org/forum/viewtopic.php?t=27288 diskutiert worden. Frühere Versionen des dhcp-servers von ISC brauchte es nicht (besser ausgedrückt: als default war next-server das gleiche als DHCP-Server). Die Benutzung eines ComputerNAME statt IP ist möglich.
Die information steht auch in einem guide von mir. Sollte nur aktualisieren bzgl. NFS-Server...
Jemand sollte ..cdk/doc/README.u-boot-via-net in CVS aktualisieren ...
Die Änderungen in u-boot sind in HEAD, nicht in newmake.
Das Thema next-server war früher hier http://forum.tuxbox.org/forum/viewtopic.php?t=38668 und http://forum.tuxbox.org/forum/viewtopic.php?t=27288 diskutiert worden. Frühere Versionen des dhcp-servers von ISC brauchte es nicht (besser ausgedrückt: als default war next-server das gleiche als DHCP-Server). Die Benutzung eines ComputerNAME statt IP ist möglich.
Die information steht auch in einem guide von mir. Sollte nur aktualisieren bzgl. NFS-Server...
Jemand sollte ..cdk/doc/README.u-boot-via-net in CVS aktualisieren ...