Woher RootFS (Netzwerkboot)

  • Hallo ihr lieben!!


    Ich möchte mir einen Thinclient bauen, der meinen Beamer via VGA Signal über xine mit Bild versorgt, natürlich möchte ich diesen via Netzwerk booten.


    Den Kernel hab ich schon zusammen und der Bootet auch, leider ist mir noch nicht ganz klar woher ich das Rootfilesystem für den Client bekomme.
    Also nicht wie ich es am Client einbinde (Das ist mir klar), sondern Woher bekomme ich es?
    Debian installieren und die Dateien via Copy auf die NFS Freigabe kopieren oder gibts ne möglichkeit Debian direkt auf NFS zu installieren?


    Beim Kopieren befürchte ich dass es Dateien gibt die sich net kopieren lassen (z.B. /dev) ist das unbegründet?



    Gruß

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Ich habe die Daten des laufenden Client Systems per NFS auf den Server kopiert. Du kannst
    vorher alle unnötigen Prozesse stoppen und Module entladen. Probleme mit /dev hatte ich
    keine. Siehe auch hier.

  • Ich hab das mit meiner SuSE so gemacht:
    1. System normal auf platte installieren (wichtig: mit Kernelsourcen)
    2. Kernel entsprechend anpassen (DHCP bei boot, RootNFS etc.) Kernel kompilieren und Module backen.
    3. init S um in Singleusermode zu wechseln
    4. cd / ; tar cvzf /tmp/system.tgz --exclude=/tmp --exclude=/proc ---exclude=/sys *
    5. Das tar-Archiv auf den NFS-Server packen und dort mit tar xvzfp system.tgz auspacken.
    6. nfsroot/etc/fstab anpassen
    7. (ganz wichtig) Im initscript das initialisieren der Netzwerkkarten abschalten. Ich hab dazu im netzwerkscript, welches die Interfaces initialisiert an oberster Stelle ein exit 0 eingebaut. Sonst reinitialisiert der init Prozess das Netzwerkinterface und verliert dabei mal eben nebenbei sein root-FS...


    [edit] hatte bei punkt 4 das sternchen vergessen. Kann übrigens sein, dass bei den excludes die führenden / weggelassen werden müssen. Einfach ausprobieren und schauen, ob /tmp etc. ausgelassen werden. So werden auf jeden Fall alle Symlinks und /dev nodes richtig mitkopiert. (Ist ja auch der Sinn eines Tape Archives ;)


    [und noch ein edit] - das Schöne an dieser Methode ist, dass du auch direkt ein Backup von deinem Client-System hast...

  • Zitat

    Original von xnalpf
    7. (ganz wichtig) Im initscript das initialisieren der Netzwerkkarten abschalten. Ich hab dazu im netzwerkscript, welches die Interfaces initialisiert an oberster Stelle ein exit 0 eingebaut. Sonst reinitialisiert der init Prozess das Netzwerkinterface und verliert dabei mal eben nebenbei sein root-FS...


    Warum sollte das denn passieren? Das Netzwerkinterface bekommt bei mir per DHCP die
    (gleiche) IP zugewiesen. Warum sollte das root-FS weg sein?

  • Kann natürlich sein, dass dies SuSE-Spezifisch ist. SuSE macht im init-script einen kompletten Interface reset inklusive releasen der IP und laden des Moduls. In diesem Moment verliert das System den Kontakt zum NFS-Server bevor das Script zum Starten des Interfaces geladen werden kann. Und das war's dann. Wie gesagt. Kann SuSE-spezifisch sein, ist mir aber glaube ich mit LinVDR über NFS auch so passiert. Andere Alternative ist natürlich, das Netzwerkinterface im System gar nicht erst einzurichten. Dann wird es nur beim booten per DHCP einmalig im Kernel-Level konfiguriert und bleibt danach von den init-scripten unangetastet.

  • DAs hilft schonmal, dachte zwar jemand kennt einen einfacheren Weg aber naja..... so gehts auch :]


    Aber da währe nochwas: Und zwar würde ich den Kernel am liebsten mit initrd nutzen, ich weis es ist unüblich wenn man den kernel schon anpasst kann mann ihn auch so bauen das alles was zum booten benötigt wird drinn ist aber ich würde ihn auch für andere Rechner nutzen und da sich meine HW ständig ändert weis ich net wie lange ich das Board hier habe :D und ich will net immer neu bauen.


    Ich habe jetzt also den Debian Kernel mit der original Konfiguration (habe nur NFS Support fest und NFS_ROOT und ip autoconf mit einkompiliert) erstellt und würde diesen gerne via PXE booten.
    Wie muss/kann ich die initrd erstellen (mit welchen Optionen) und wohin muss sie bzw. was muss ich in der default datei von pxelinux angeben damit das alles klappt?


    Danke im Vorraus
    Thilo

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Du brauchst keine initrd. Die initrd macht nur sinn um Kernelmodule zu laden, die für das mounten und booten des rootfs notwendig sind. Das ist aber definitiv schon im Kernel drin - nämlich der Netzwerkkartentreiber und die BootDHCP Konfiguration. Danch ist dein rootnfs gemountet und du kannst die Kernelmodule für jede x-beliebige Hardware über deine init-scripte laden. Eine initrd macht da wirklich keinen Sinn.

  • xnalpf
    Das hatte ich mir kurz nach meinem Post selbst zusammengereimt ;) ist ja auch so, sobald das rootfs da ist und ich auf /lib/modules zugreifen kann, kann ich die sachen von da aus laden.....
    Weis auch garnet wieso ich auf den blöden gedanken mit der initrd gekommen binn?!?!?


    Hätte mir die Frage auch mit einem Folgepost beantwortet, hatte aber nach meinem letzten Post Gestern Computerverbot ;)


    free-x
    debootstrap? Kenn ich noch net aber ich werd gleich mal Googeln ;)


    Gruß

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Wohin sollte ich eigentlich die System.map kopieren?


    Danke
    Gruß

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Zitat

    Original von Soulreaver
    xnalpf
    Das hatte ich mir kurz nach meinem Post selbst zusammengereimt ;) ist ja auch so, sobald das rootfs da ist und ich auf /lib/modules zugreifen kann, kann ich die sachen von da aus laden.....
    Weis auch garnet wieso ich auf den blöden gedanken mit der initrd gekommen binn?!?!?


    Hätte mir die Frage auch mit einem Folgepost beantwortet, hatte aber nach meinem letzten Post Gestern Computerverbot ;)
    Gruß


    Ach ja Computerverbot. Ich glaub ich lass mir von meiner Frau heute auch mal wieder Computerverbot erteilen. Das ist fast wie rausgespült werden.


    System.map liegt bei mir in /boot Da wo es immer liegt (bei SuSE)

  • Zitat

    Das ist fast wie rausgespült werden.


    Was meinst du damit?


    Zitat

    System.map liegt bei mir in /boot Da wo es immer liegt (bei SuSE)


    Das ist bei Debian auch so, aber beim Netzboot habe ich kein "/boot".....


    Verdammt, mein Kernel will via Netzerk das Rootfs einfach net einhängen!
    Ich hab den Treiber der Netzwerkkarte, rootfs via NFS und die IP autoconf fest einkompiliert aber er meckert immer "Unable to mount Root fs"....
    Ich teste das ganze mit einem testweise installiertem LTSP sobald ich in der dhcpd.conf meinen Kernel gegen den ausm LTSP tausche läuft alles.


    Code
    label linux
      kernel bzImage
      append rw root=/dev/ram0 nfsroot=192.168.1.1:/opt/ltsp/i386,rw


    ich hab auch schon root=/dev/nfs versucht aber damit meldet er "Cannot open root device "nfs" or unknown-block(2,0)"
    Macht auch nach meinem Verständniss keinen Sinn.


    Ach ja, wenn ich append ganz weglasse (er bekommt ja sein Verzeichniss via DHCP) gehts auch net :(


    Kann mir jemand helfen?


    MfG

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Ich habe bei meiner Konfiguration eine feste IP-Adresse vergeben:



    Code
    LABEL desktop
    KERNEL vmlinuz-2.6.16.9
    APPEND root=/dev/nfs nfsroot=192.168.0.1:/nfsroot/01,rsize=8192,wsize=8192,nfsvers=3 ip=192.168.0.4:192.168.0.1:192.168.0.2:255.255.255.0:


    .1 ist der nfs / tftp-Server
    .4 der Client
    .2 der DSL-Router


    ip=bootp sollte eigentlich auch funktionieren; Siehe /usr/src/linux/Documentation/nfsroot.txt


    Taucht denn im Logfile vom Server irgendwas auf? Ein Versuch, das nfs-Verzeichnis zu mounten?


    /boot kann man ja anlegen, um die System.map dort zu lagern. Muss es ja anderweitig nicht nutzen ;)


    Das via DHCP übermittelte Verzeichnis ist nur dafür da, über tftp den Kernel (und evtl. initrd) zu laden - mit NFS hat das nichts am Hut.

  • mithrandir
    Leider taucht im Log des Servers nichts auf
    Der DHCP kennt eine Option "option root-path" mit der das rootverzeichniss übermittelt werden kann.


    Könnte es daran liegen, dass ich die Debian Kernelwuellen nehme?
    Sollte ich die Quellen von kernel.org nehmen??


    Gruß

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Ob der Linux NFS-Root-Code diese Option auswertet, wage ich mal zu bezweifeln. Bin zumindest nicht drübergestoßen, als ich mein System aufgesetzt habe.


    Die Kernel-Option " [*] Root file system on NFS" ist gesetzt? Ich denke zwar nicht, dass die Debian-Kernelquellen schuld sind, aber der Vanilla-Kernel wäre einen Versuch wert.

  • Zitat

    Original von Soulreaver


    Was meinst du damit?


    N Witz aus Men in black II


    Zitat

    Das ist bei Debian auch so, aber beim Netzboot habe ich kein "/boot".....


    Verdammt, mein Kernel will via Netzerk das Rootfs einfach net einhängen!
    Ich hab den Treiber der Netzwerkkarte, rootfs via NFS und die IP autoconf fest einkompiliert aber er meckert immer "Unable to mount Root fs"....
    Ich teste das ganze mit einem testweise installiertem LTSP sobald ich in der dhcpd.conf meinen Kernel gegen den ausm LTSP tausche läuft alles.


    Code
    label linux
      kernel bzImage
      append rw root=/dev/ram0 nfsroot=192.168.1.1:/opt/ltsp/i386,rw


    Das sieht aber schwer nach lilo.conf aus. Da hat das rein gar nix zu suchen. Das muss in die pxelinux.conf! (Wenn du per PXE bootest, was du bestimmt machst)
    [edit] Siehe auch hier



    Also mal Schritt für Schriit:


    1. Datei /etc/dchpd.conf hat dies hier:


    Code
    host tv {
      hardware ethernet 00:02:b3:1c:c0:b1;
      fixed-address 10.5.10.202;
      filename "pxelinux.0";
            }


    2. es gibt ein Verzeichnis /tftpboot und darin ein Unterverzeichnis pxelinux.cfg sowie die Datei pxelinux.0 (aus dem pxelinux bootpaket) in dem Unterverzeichnis /tftpboot/pxelinux.conf gibt es passend zur (o.g.) MAC Adresse eine datei namens 01-00-02-b3-1c-c0-b1 und die sieht so aus:


    Code
    DEFAULT suse.10
    IPAPPEND 1
    APPEND vga=0x311 nfsroot=10.5.10.129:/BigVol/nfsroot/wohnzimmer noapic noapm 
    TIMEOUT 40


    3. Der Kernel, welcher in der DEFAULT direktive angegeben ist liegt ebenfalls in /tftpboot



    So ists bei mir konfiguriert und funktioniert mit drei clients hervorragend.

  • mithrandir
    Er wertet die Option devinitiv aus, wie gesagt die Kernel ausm LTSP booten hervorragend ;)
    Es funktionieren mit diesem Kernel beide Varianten (NFSRoot angabe in der pxelinux.cfg/default und via option root-path in dhcpd.conf)



    Jetzt wo du es sagst.... da hab ich was auffer Leitung gestanden :D


    Zitat

    Das sieht aber schwer nach lilo.conf aus. Da hat das rein gar nix zu suchen. Das muss in die pxelinux.conf! (Wenn du per PXE bootest, was du bestimmt machst)


    nee is net lilo ist die default aus pxelinux.cfg, also schon das richtige.


    Werde mal Vanilla versuchen.


    Danke Gruß

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Ich habs!!!!


    mithrandir hat mit seiner config nicht unrecht ;) ich dachte, wenn die Kiste sich den Kernel reinzieht ist alles in Butter und das Netzwerk konfiguriert.
    Dem ist aber nicht so!
    Die Karte hat zwar eine IP, und kann sich den Kernel via tftp holen, leider übernimmt der Kernel diese nicht.


    Wenn ich aber

    Zitat


    prompt 0
    label linux
    KERNEL bzImage
    APPEND root=/dev/nfs ip=dhcp


    angebe holt er sich die IP nochmals vom DHCP.
    (Die Angaben zum Rootfs usw holt er sich auch vom dhcp)


    So weit, so gut!


    Leider bleibt das System (mit debootstrap erstellt) kurz nach dem Eingang in Runnlevel 2 stehen.
    Er stratet syslogd und klogd, inetd lässt er weg (keine Dienste)
    und dann bleibt er bei "Starting periodic command scheduler...." stehen ;(
    (wenn ich in dem Runlevel alle Dienste nach inetd rausnehme beilbt er dort schon stehen) und nach einiger Zeit kommt:

    Code
    INIT: Id "2" respawning to fast: disabled for 5 minutes
    INIT: Id "3" respawning to fast: disabled for 5 minutes
    INIT: Id "4" respawning to fast: disabled for 5 minutes
    INIT: Id "1" respawning to fast: disabled for 5 minutes
    INIT: Id "5" respawning to fast: disabled for 5 minutes
    INIT: Id "6" respawning to fast: disabled for 5 minutes


    Wenn ich das richtig sehe kann er die Konsolen nicht starten, aber wieso?


    Hoffe es weis jemand Rat!


    Danke im vorraus


    MfG

    Server: Intel DQ67OWB3 - Core I5-2400 - 16GB RAM - 3x Samsung HD103UJ, 1x Hitachi HDS72202, 1x OCZ-ONX 64GB, 1x Seagate ST2000VX002-1AH1, 1x Seagate ST2000DL003-9VT1 - 1x DC-310e - 2x DigitalDevices CineS2


    Server Software: XUbuntu 11.10, 3.0.0-16-generic - VDR-1.7.23


    Clients: 1x ASRock ION330HT mit Ubuntu 11.10, VDR-1.7.23, Steht zum Verkauf ([VERKAUFE] ASRock ION 330HT)

  • Tja, ich hoffe, du kriegst für dieses Problem ne Lösung präsentiert. Das gleiche Problem hatte ich auch schon mal. Das war dann aber schon der dritte NFS-Boot Client und die anderen liefen schon ganz wunderbar. Daher war ich mir ganz sicher, dass es nicht am Server und/oder Kernel bzw NFS-OS liegen kann. Ich hab dann das Board getauscht (nicht die NIC, nur das Board) und plötzlich lief alles. Meldung an der Konsole war zwar, da SuSE 10.0, etwas anders (no more processes in this runlevel system halted) läuft aber aufs gleiche hinaus. Der init-Prozess kann die Konsolen nicht initialisieren. Komisch ist halt, dass es vom Mainboard abhängt was eigentlich nix mit den Konsolen zu tun haben sollte.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!