0.5 USB-Installation
Inhaltsverzeichnis
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!