• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Ubuntu Desktop 12.04 als PXE-Boot anpassen

hambam

Newbie
Hallo zusammen,

ich habe eine Ubuntu Server 12.04 so aufgesetzt, dass dieser als PXE-Boot-Server fungiert.
Nun möchte ich über den Netzwerkboot ein Ubuntu Desktop 12.04 zur Verfügung stellen, was auch schonmal soweit funktioniert.

Aber...
- Obwohl beim Booten eine IP-Adresse etc. erhalten, hat der gestarte Ubuntu Desktop keine Netzwerkeinstellungen und selbst wenn ich diese manuell setze, hat er keine Verbindung.
- Wie kann ich automatisch weitere Programme zur Verfügung stellen (z.B. Virenscanner-Software)?

Muss ich dafür die filesystem.squashfs entpacken und ändern? Für Einstellungsänderungen bezüglich Netzwerkkarte etc. kann ich mir das noch ev. vorstellen, aber bei Softwareinstallationen?

Oder müsste ich ein System mit dem Ubuntu Desktop installieren, alle gewünschten Änderungen und Anpassungen vornehmen und davon dann ein Image erstellen? Wenn ja, wie geht das?
 

spoensche

Moderator
Teammitglied
Zum SquashFS:

Das SquashFS ist ein Read Only Dateisystem. Daher werden deine Änderungen auch nicht gespeichert und du musst es für Änderungen "entpacken", die Änderungen durchführen und wieder "packen".

Warum das System nach dem Start keine IP hat:
Beim Bootvorgang bekommt der Kernel eine IP zugewiesen, damit er das InitramFS o. die Initrd und das Root Dateisystem per Netzwerk laden kann. Danach läuft das normale Prozedere des Systemstarts ab und der Kernel gibt auch die IP wieder ab. Hardware ermitteln und konfigurieren, Dateisystem mounten und das System konfigurieren. Wenn dann keine Konfiguration für die Netzwerkschnittstellen existiert, dann steht auch kein Netzwerk zur Verfügung.

hambam schrieb:
Oder müsste ich ein System mit dem Ubuntu Desktop installieren, alle gewünschten Änderungen und Anpassungen vornehmen und davon dann ein Image erstellen? Wenn ja, wie geht das?

Es gibt mehrere Möglichkeiten. Ich könnte jetzt Vermutungen anstellen, ob du mehrere Client Systeme hast und einen Terminalserver aufsetzen willst, oder nur ein System benötigst, was der Nachwuchs bootet, aber nichts verändern soll, für einen älteren Rechner im Wohnzimmer zwecks Video gucken o. Musik hören etc..
Allerdings wäre dir damit nicht geholfen. Für welchen Anwendungszweck willst du ein System per Netzwerkboot bereitstellen.
 
OP
H

hambam

Newbie
Ich möchte damit ein eigenes Systemrettungssystem im Netzwerk erstellen.
Also Tools wie Virenscanner und Dateimanager sollen installiert sein, vielleicht auch weitere.
Am idealsten wäre natürlich wenn der Server die Virensignaturen schon automatisch aktualisiert haben würde, wenn ein Client über das Netzwerk bootet.
Ich weiß, dass es hier schon einige CD-Images gibt, aber im Grunde möchte ich nicht jedesmal mit einer CD zum PC laufen, um diesen zu scannen oder um die Dateien zu retten, wenn das Betriebssystem versagt.
Ich hab auch schon versucht ein solches Image in das PXE einzubinden, aber hab sie nicht zum Laufen bekommen.
 

spoensche

Moderator
Teammitglied
hambam schrieb:
Ich möchte damit ein eigenes Systemrettungssystem im Netzwerk erstellen.
Also Tools wie Virenscanner und Dateimanager sollen installiert sein, vielleicht auch weitere.
Am idealsten wäre natürlich wenn der Server die Virensignaturen schon automatisch aktualisiert haben würde, wenn ein Client über das Netzwerk bootet.

Der Dateimanager wird dir bei der Datenrettung von einem defekten Dateisystem oder von gelöschten Dateien nicht helfen können, sondern genau das Gegenteil bewirken; die beschädigten Informationen noch unbrauchbarer machen. Tools für die Datenrettung sind z.B. foremost, photorec, SleuthKit und werden alle per Kommandozeile verwendet.

Damit du nicht bei jeder Aktualisierung der Virensignaturen das rootfs enpacken,bearbeiten, verpacken etc. musst, solltest du das rootfs per NFS (NFS-Root, NFS=Network Filesystem) bereitstellen. Du kannst dir dann ein kleines Script schreiben, das die Virensignaturen herunterlädt und an die passende Stelle des NFS-Roots kopiert. Du kannst dann auch gleich die Scanreporte oder wiederhergestellte Daten direkt speichern und dir den weg mit dedm USB-Stick zum Rechner sparen.

hambam schrieb:
....
Ich hab auch schon versucht ein solches Image in das PXE einzubinden, aber hab sie nicht zum Laufen bekommen.

Das ist eigentlich ziemlich simple. Du entpackst die ISO- Datei in dein TFTP-Bootverzeichnis und trägst in der pxelinux.cfg den Pfad zum Kernel (vmlinuz) und zur initrd ein bzw. verwendest die vorhanden aus der isolinux.cfg (Bootmenü für ISO-Images) und passt die Pfade zum Kernel etc. an.

Danach bootet die CD per PXE.

Eine weitere Möglichkeit wäre die ISO direkt von einem Kernel booten zu lassen.
 
OP
H

hambam

Newbie
Mit dem rootfs entpacken, bearbeiten, verpacken etc. hab ich gestern den ganzen Tag gebastelt, auch das eine oder andere installiert bekommen z.b. clamav, aber clamtk wiederum nicht. Keine Ahnung warum.
Eventuell funktionieren nicht alle Installationenroutinen sauber, wenn ich das neue Boot-System als Rootsystem verwende (sudo chroot ${WORK}/new /bin/bash)
Mit dem Ändern der Desktop- Menüeinstellungen werd ich mich auch noch beschäftigen, damit die gewünschten Icons nicht erst gesucht werden müssen.

Ich werd gleich direkt mal probieren, vom entpackten System zu booten, damit wäre dann doch so einiges leichter, vorallem das automatisierte Herunterladen der Viren-Signaturen.
Das System lasse ich eh schon über NFS laden, somit passt das schonmal.

Noch eine Frage hierzu: Müsste ich nicht in dem Ordner mit dem entpackten System auch noch die initrd.lz und vmlinuz finden?
In dem Ordner direkt befinden sich für die zwei Dateien zwei Links, die ins Boot-Verzeichnis zeigen, dort sind aber die Dateien nicht zu finden.
Im NFS-Root:
lrwxrwxrwx 1 root root 37 Aug 18 00:06 initrd.img -> /boot/initrd.img-3.2.0-29-generic-pae
lrwxrwxrwx 1 root root 33 Aug 18 00:06 vmlinuz -> boot/vmlinuz-3.2.0-29-generic-pae

Im Verzeichnis boot:
-rw-r--r-- 1 root root 800453 Jul 27 20:35 abi-3.2.0-29-generic-pae
-rw-r--r-- 1 root root 147379 Jul 27 20:35 config-3.2.0-29-generic-pae
drwxr-xr-x 2 root root 4096 Aug 18 00:06 grub
-rw-r--r-- 1 root root 176764 Nov 27 2011 memtest86+.bin
-rw-r--r-- 1 root root 178944 Nov 27 2011 memtest86+_multiboot.bin
-rw------- 1 root root 2311324 Jul 27 20:35 System.map-3.2.0-29-generic-pae
 

spoensche

Moderator
Teammitglied
hambam schrieb:
Eventuell funktionieren nicht alle Installationenroutinen sauber, wenn ich das neue Boot-System als Rootsystem verwende (sudo chroot ${WORK}/new /bin/bash)

Hast du vor dem wechsel der Rootumgebung auch /dev, /dev/pts, sys und proc in den neuen Root- Verzeichnisbaum gemountet?

hambam schrieb:
Ich werd gleich direkt mal probieren, vom entpackten System zu booten, damit wäre dann doch so einiges leichter, vorallem das automatisierte Herunterladen der Viren-Signaturen.
Das System lasse ich eh schon über NFS laden, somit passt das schonmal.
Für die Verwendung von NFS-Root musst du die entsprechenden Bootparameter setzen, z.B. root=/dev/nfs. Die Angabe des NFS-Roots erfolgt auch über die Bootparameter.

hambam schrieb:
Noch eine Frage hierzu: Müsste ich nicht in dem Ordner mit dem entpackten System auch noch die initrd.lz und vmlinuz finden?
In dem Ordner direkt befinden sich für die zwei Dateien zwei Links, die ins Boot-Verzeichnis zeigen, dort sind aber die Dateien nicht zu finden.
Code:
Im NFS-Root: 
lrwxrwxrwx   1 root       root          37 Aug 18 00:06 initrd.img -> /boot/initrd.img-3.2.0-29-generic-pae
lrwxrwxrwx   1 root       root          33 Aug 18 00:06 vmlinuz -> boot/vmlinuz-3.2.0-29-generic-pae

Im Verzeichnis boot:
-rw-r--r--  1 root root  800453 Jul 27 20:35 abi-3.2.0-29-generic-pae
-rw-r--r--  1 root root  147379 Jul 27 20:35 config-3.2.0-29-generic-pae
drwxr-xr-x  2 root root    4096 Aug 18 00:06 grub
-rw-r--r--  1 root root  176764 Nov 27  2011 memtest86+.bin
-rw-r--r--  1 root root  178944 Nov 27  2011 memtest86+_multiboot.bin
-rw-------  1 root root 2311324 Jul 27 20:35 System.map-3.2.0-29-generic-pae

Sieh dir die beiden Symlinks mal genau an. Bei der inird.img wird der absolute Pfad verwendet, bei vmlinuz jedoch der relative Pfad. Also Obacht geben, bevor sich versehentlich etwas zerschiesst.
 
OP
H

hambam

Newbie
spoensche schrieb:
Hast du vor dem wechsel der Rootumgebung auch /dev, /dev/pts, sys und proc in den neuen Root- Verzeichnisbaum gemountet?
Ja habe ich mit
Code:
sudo mount -t proc -o bind /proc ${WORK}/new/proc
sudo mount -o bind /dev/pts ${WORK}/new/dev/pts

spoensche schrieb:
Für die Verwendung von NFS-Root musst du die entsprechenden Bootparameter setzen, z.B. root=/dev/nfs. Die Angabe des NFS-Roots erfolgt auch über die Bootparameter.
Ist auch erfolgt. So sieht der Eintrag in der tftpboot/pxelinux.cfg/default aus (Noch nicht die entpackte Version)
Code:
DEFAULT vesamenu.c32
MENU TITLE Network boot
LABEL PXE-Boot-Linux
  MENU LABEL Ubuntu-12.04
  KERNEL vmlinuz
  APPEND root=/dev/nfs initrd=initrd.lz boot=casper live-media-path=/casper netboot=nfs nfsroot=10.1.1.14:/nfsroot ip=dhcp rw

spoensche schrieb:
Sieh dir die beiden Symlinks mal genau an. Bei der inird.img wird der absolute Pfad verwendet, bei vmlinuz jedoch der relative Pfad. Also Obacht geben, bevor sich versehentlich etwas zerschiesst.
Die Symlinks hätte ich eh nicht verwendet, sondern den korrekten Pfad angegeben. Nur eben, dass die beiden Dateien gar nicht da sind, auch nicht unter dem Linkziel.
(find ./U -name vmlinuz* z.B. brachte Null Ergebnisse)
 

spoensche

Moderator
Teammitglied
hambam schrieb:
Ja habe ich mit
Code:
sudo mount -t proc -o bind /proc ${WORK}/new/proc
sudo mount -o bind /dev/pts ${WORK}/new/dev/pts

Das stimmt so nicht ganz. Für /proc, /dev/pts und /sys werden keine Bindmounts verwendet.
Code:
mount --bind /dev ${WORK}/new/dev
mount -t devpts /dev/pts ${WORK}/new/dev/pts
mount -t proc ${WORK}/new/proc
mount -t sysfs ${WORK}/new/sys

hambam schrieb:
(find ./U -name vmlinuz* z.B. brachte Null Ergebnisse)

Kann auch keine Ergebnisse liefern, weil * nicht escaped ist und deshalb von der Shell interpretiert wird.
Code:
find . -name vmlinuz\* -type l

Sieh dir mal das Netboot Image von Ubuntu an. Ist zum lernen denke ich ganz praktisch.
http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/current/images/netboot/netboot.tar.gz.
 
Oben