0.5 USB-Installation

Aus easyVDR-Wiki
Zur Navigation springen Zur Suche springen
Easyvdr04.jpg

Einleitung

Dies ist ein How-To um easyVDR 0.5 RC1 von USB-Stick oder USB-Platte zu booten!

Update - Dauser Script

Im Forum gibt es mittlerweile ein Script von Dauser das beim Setup unterstützt:

Allgemeines

Ich habe als Testsystem easyVDR 0.5 RC1 auf einen USB-Stick gezogen!

Das hier sollte eigentlich auch mit anderen Distris funktionieren! Achtung! easyVDR 0.4.x benutzt lilo als Bootloader. Siehe dazu weiter unten!

Erstmal ein wenig Theorie...

Wir starten den Rechner!

Das Bios wird geladen, bindet seine Geräte ein und bootet anschließend vom im Bios eingestellten Medium (CD, HD, USB, LAN, ...) soweit es bootfähig ist.
Nun wird auf dem Bootmedium nach einen Bootloader gesucht.

Da gibt es einige: Syslinux, Isolinux, Lilo, Grub, usw.

Ich will hier Grub nehmen, weil es weit verbreitet ist und vor Allem sehr flexibel.
Grub wird mit den Einstellungen in der Datei /boot/grub/menu.lst geladen. In dieser wird auch mitgeteilt, von wo Grub booten soll. Der Kernel (/boot/vmlinuz..) wird geladen und Grub überlässt den weiteren Bootablauf dem Kernel.

Der Kernel besteht aus zwei Teilen: Zum Einen dem Kernel selbst in seiner kompakten Form und zum Anderen aus einzenden Modulen, die auf einem Medium (HD,USB,Netzwerk...) liegen (/lib/modules/). Das erspart beim Booten viel Zeit! Die anderen Module für Scanner, Drucker, Modems, usw... werden nur nach Bedarf vom Bootmedium geladen. Es ist wichtig, dass die Treiber für USB fest im Kernel einkompiliert sind und nicht als nachladbare Module vorliegen, da Linux sonst das Rootverzeichnis "/" nicht einbinden kann.

Treiber für IDE Geräte werden standartmäßig in den Kernel einkompiliert. Also müssen wir das nachholen, da sonst der Kernel nicht das USB-Device ansprechen kann. Wenn das Bootmedium eingebunden ist, wird von der inittab weiter das System gebootet. Grub ist jetzt nicht mehr fürs Booten zuständig!

Also zuerst!

Kernel kompilieren

Wir kompilieren also die USB-Module fest in den Kernel ein!
easyVDR bringt alles mit, was wir dazu brauchen: Kernel Sourcen usw.
Es gibt eigentlich immer eine .config Datei im /boot Verzeichnis. Das ist die original Konfigurationsdatei, die bei dem Basissystem benutzt wurde. Diese kopieren wir als User "root" nach /usr/src/linux (Kernel Sourcen)

cp /boot/config* /usr/src/linux

nun teilen wir den Sourcen mit, dass wir die alte (orig) config nehmen.

cd /usr/src/linux
make oldconfig

auf zur Konfiguration!

make menuconfig 

Es öffnet sich ein Menu und wir wählen

Device Drivers---->USB Suport---->

Hier versehen wir die Module (M) für USB-Medium mit (*). Damit werden die USB-Treiber fest in den Kernel hineinkompiliert!

Ich habe

EHCI (2.0) support
OHCI support
USB Mass Storage support

und, ich bin mir nicht ganz sicher,

USB Human Interface Device (full HID) support

Schadet jedenfalls nicht!. Jetzt 3 mal exit und

Do you wish to save your new kernel configuration? YES!

fast geschafft! Nun wieder auf der Konsole

make dep
make clean
make bzImage

Das dauert eine Weile, je nach CPU! Ich bin Einkaufen gegangen! Bis jetzt haben wir nur den Kernel kompiliert aber noch nicht die Module. Dafür hätten wir noch was machen müssen. Aber das brauchen wir nicht, da die Module die selben wären, die wir ja schon haben! Also weiter.

Der neue Kernel liegt unter

/usr/src/linux/ach/i386/boot 

und heißt

bzImage

Das war die Vorarbeit!

Filesystem vorbereiten

Da ich easyVDR auf einem 2-GB-Stick installieren will, muss ich easyVDR ein bisschen beschneiden! easyVDR hat 2,3 GB und ich kann, wenn ich /usr/src nicht mit auf den USB-Stick kopiere, 500 MB sparen. Also erstelle ich erstmal einen Ordner (usbboot), in den ich alles reinkopiere, was ich brauche und lösche in diesem später /usbboot/usr/src. Danach haben wir 1,7 GB. Also erst den Order erstellen mit:

mkdir /usbboot

Nun das vorhandene Filesystem in /usbboot kopieren:

cp -af /boot /usbboot
cp -af /bin /usbboot
cp -af /data /usbboot
cp -af /dev /usbboot
cp -af /etc /usbboot
cp -af /home /usbboot
cp -af /lib /usbboot
cp -af /opt /usbboot
cp -af /root /usbboot
cp -af /sbin /usbboot
cp -af /srv /usbboot
cp -af /tftpboot /usbboot
cp -af /usr /usbboot
cp -af /var /usbboot
cp -rs /mnt /usbboot
mkdir /usbboot/proc
mkdir /usbboot/ramdisk
mkdir /usbboot/media #<-- die Aufnahmen wollen wir ja auch von HD sehen!
mkdir /usbboot/devfs
mkdir /usbboot/sysfs
mkdir /usbboot/sys

Dann legen wir Symlinks so an, wie es später richtig sein wird:

ln -s /media/video0 /usbboot/video0
ln -s /ramdisk /usbboot/tmp

Nun bearbeiten wir die fstab Tabelle USB gerecht

mcedit /usbboot/etc/fstab

und ändern eigentlich nur das

hda3           /                     ext3          defaults,errors=remount-ro 0 1

in

/dev/sda1      /                     ext3          defaults,errors=remount-ro 0 1

Wenn man noch die eigentliche Festplatte auch mounten möchte, trägt man hier noch die Verzweigung von

/dev/hda3      /mnt/hda3             ext3          defaults,errors=remount-ro 0 1

ein. Nach dem Booten vom USB-Stick kann man dann auf die eigentliche Festplatte zugreifen! Mit F2 speichern und das ist dann auch schon mal erledigt!

Nun löschen wir noch die Sourcen, damit wir alles auf einen 2-GB-Stick kriegen.

rm -r /usbboot/usr/src/*

Jetzt kommt auch schon der USB-Stick zum Einsatz!

Wir stecken ihn ein und erstellen ein neues Filesystem!

ACHTUNG! ES WERDEN ALLE DATEN AUF DEM USB-STICK GELÖSCHT!!!!

cfdisk /dev/sda #(kann auch sdb, sdc, sdd heißen)

Wir löschen mit delete die vorhandene Partitionstabelle und erstellen eine neue. Dabei kann sda1 von mir aus den gesamten Stick einnehmen.

Wir setzen noch ein Bootflag und bestimmen den Typ der Partition: default (83).

Danach write mit YES bestätigen und quit.

Nun haben wir die Partitionstabelle geschrieben!

Den Stick einmal rausziehen und wieder einstecken! Jetzt folgt das Formatieren.

Da easyVDR automatisch mountet, noch einmal vor dem Formatieren unmounten!

umount /dev/sda

Nun formatieren:

mkfs.ext3 /dev/sda1

Jetzt kann /usbboot rüberkopiert werden! Wir kontrollieren, wohin der Stick gemountet wurde!

Gegebenfalls den Stick noch einmal raus- und reinstecken.

df -h

Ich sehe jetzt, dass bei mir sda1 nach /mnt/usb1 gemountet wurde. Bei anderen Systemen muss man selber mounten! (/mount /dev/sda1 mnt/usw...)

Aber zurück...

cp -af /usbboot/* /mnt/usb1/

Das dauert jetzt ein wenig!

Bootloader einrichten

Jetzt kommt Grub an die Reihe. Da wir bis jetzt nur von der Festplatte kopiert haben, haben wir auch deren Einstellung von Grub übernommen!

Also noch Grub Bescheid sagen, dass wenn es von sda bootet, auch sda hd0 ist!

echo '(hd0) /dev/sda' > /mnt/usb1/boot/grub/device.map

Jetzt noch Grub in den MBR des USB-Sticks installieren:

grub-install --root-directory=/mnt/usb1 /dev/sda

Danach editieren wir noch die /menu.lst zum Beispiel so:

...
title           USB Debian GNU/Linux, kernel 2.6.22.5
root            (hd0,0) #<---Das ist sda1! sda2 währe 0,1! sdb1 währe 1,0 usw..
kernel          /boot/vmlinuz2.6.22.5-usb root=/dev/sda1 ro pci=routeirq vga=788 rootdelay=10 
savedefault
....

Das rootdelay ist wichtig!

Der Kernel braucht je nach System etwa 5 Sekunden, um die USB-Module voll zu laden. Dafür ist das rootdelay! Man kann auch auf 7 s gehen, je nach Leistung des Systems.

Zum Schluss kopieren wir den Kernel noch auf den USB-Stick mit

cp /usr/src/linux/arch/i386/boot/bzImage /mnt/usb1/boot/vmlinuz-2.6.22.5-usb

fertig!

Viel Spaß!

Nur für Rechner, bei denen das BIOS Booten von USB nicht unterstützt!

Sollte man ein älteres Mainboard besitzen, das das Booten von USB nicht unterstützt, kann man auch den zweiten Eintrag in

/boot/grub/menu.lst 

auf der Festplatte (hda,b,c,d) so ändern, dass dieses dann von USB bootet!

Dazu muss der Kernel auf der Festplatte platziert werden!

Und natürlich muss auch in der menu.lst auf der Festplatte ausgewählt werden! Dann wird erst von der Festplatte der Kernel geladen und dann auf USB gewechselt.

Easyvdr 0.4.x

Ich habe es mit dem Bootloader Lilo noch nicht probiert. Ein Feedback wäre schon schön!

Die config von Lilo liegt in /etc/lilo.conf und müßte dann so aussehen:

root=/dev/sda1
image=/boot/vmlinuz-2.6.22.5-usb
label=USB-Boot

danach

lilo 

aurufen!

  • oder
lilo /dev/sda 
  • sorry!! hier mußte ich raten!
  • Beten
  • Ich hoffe, er schreibt beim Ausführen von Lilo nun auf sda und nicht auf hda!!!!
  • sonst bootet der VDR nicht mehr!

Download des Kernels

Ich habe den hier erwähnten Kernel mit fest einkompilierten USB-Treibern hier zum Herunterladen abgelegt!

God shave se Queen

Danke an Dauser, der den Inhalt hierfür erarbeitet hat!