HowTo Easyvdr RC1 vom USB-Stick booten!
(Oder auch andere ähnliche Systeme)
Ich habe als Testsystem EasyvdrRC1 auf einen USB-Stick gezogen!
Das hier sollte eigentlich auch mit anderen Distries 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 und bindet seine Gräte ein und bootet anschließend
von im Bios eingestelltem 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 wie alle sehr flexibel.
Da Grub geladen wurde und Grub in der Einstellung (/boot/grub/menu.lst)
mitgeteilt wurde in form von Parametern von wo er booten soll geht es weiter.
Der Kernel (/boot/vmlinuz..)wird geladen und Grub übergibt den weiteren Bootablauf
dem Kernel!
Der Kernel besteht aus zwei Teilen.Einmal dem Kernel selbst in seiner kompakten Form und
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 das die Module (Treiber) für USB fest im Kernel einkopiliert sind.
Da Linux sonst das Rootverzeichniß / nicht einbinden kann.
IDE Geräte werden standartmäßt in den Kernel einkopiliert.
Also müssen wir das Nachholen da sonst der Kernel nicht den USB-device
ansprechen kann. Wen das bootmedium eingebunden ist wird von der inittab weiter das System
gebootet
Grub ist jetzt nicht mehr fürs booten zuständig!
Also zuerst!
Wir kompilieren die USB-Module fest in den Kernel ein!
Meinen Kernel kan man jetzt hier downloaden
Easyvdr bringt alles mit was wir dazu brauchen Kernel Sourcen usw..
Es gibt eigentlich imer eine .config datei im /boot Verzeichniß
Das ist die original Konfigurationsdatei die bei dem Basissytem benutzt wurden.
Diese kopieren wir als root nach /usr/src/linux (Kernel Sourcen)
cp /boot/config* /usr/src/linux
nun teilen wir den sourcen mit das wir die alte (orig) config nehmen.
cd /usr/src/linux
make oldconfig
auf zur Konfiguration!
make menuconfig
Es öffnet sich ein menu und wir makieren
Device Drivers---->USB Suport---->
Hier versehen wir die Module (M) für USB-Medium´s mit (*)Damit werden die Module fest in den Kernel einkompliert!
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 3x exit
und
Do you wish to save your new kernel configuration? YES!
fast geschafft!
Nun wieder auf der Console
make dep
make clean
make bzImage
Nun dauert es eine weile!Je nach CPU!Ich bin Einkaufen gegangen!
So wir haben jetzt nur den Kernel kopiliert nicht die module dafür hatten wir noch was machen müssen aber das Brauchen wir nicht da die Module die selben währen 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!
Nun zum FileSystem
Da ich Easyvdr auf ein 2 Gigabyt Stick installieren will muß ich Easyvdr ein bischen beschneiden!
Easyvdr hat 2,3Gigabyt und ich kann wen ich /usr/src nicht mit auf dem USB-Stick kopiere 500 MB sparen!
Also erstelle ich erstmal einen Ordner(usbboot) in dem ich alles reinkopiere was ich brauche und lösche in diesen später
/usbboot/usr/src dann habe wir es auf 1.7 Gig..;)
also
mkdir /usbboot
nun das vorhandene Filesystem ins /usbboot
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
#nun legen wir symlinks so an wie es später richtig ist!
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 /
in
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
wen man noch die eigentliche Festplatte zum bearbeiten mit 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 hier auf die eigentliche Festplatte zugreifen!
mit F2 speichern und das ist dann auch schon mal erledigt!
Nun löschen wir noch die Soucen damit wir alles auf einen 2 gigabyte Stick kriegen.
rm -r /usbboot/usr/src/*
Jetzt kommt auch schon der UDB-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,c,d heißen)
Wir löschen mit delete das vorhandene und erstellen ein neues.
Von mir aus über den gesammten Stick!(sda1)
Setzen noch ein bootflack und bestimmen den type!default (83).
Danach..
write mit YES bestätigen und quit.
Nun haben wir eine Partitionstabelle geschrieben!
Den Stick einmal rausziehen und wieder einstecken!
jetzt 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 rein stecken!
df -h
Ich sehe jetzt das bei mir sda1 nach /mnt/usb1 gemountet wurde!
Bei anderen Systemen muß man selber mounten!(/mount /dev/sda1 mnt/usw...)
aber zurück..
cp -af /usbboot/* /mnt/usb1/
Das dauert jetzt ein wenig!
Jetzt kommt Grub an die Reihe da wir bis jetzt stupf von der Festplatte kopiert haben.Haben wir auch deren Einstellung von Grub übernommen!
Also noch Grub bescheitsagen das wen er von sda bootet auch sda hd0 ist!
echo '(hd0) /dev/sda' > /mnt/usb1/boot/grub/device.map
Jetzt noch Grub in den MBR der USB Platte installieren
grub-install --root-directory=/mnt/usb1 /dev/sda
jetzt 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/vmlinuz-2.6.22.5-usb root=/dev/sda1 ro pci=routeirq vga=788 rootdelay=10 #<-Das rootdelay ist wichtig!
savedefault
....
Der Kernel braucht ungefair je nach System 5 sekunden um die USB Module voll zu laden dafür ist das rootdelay!
Man kann auch auf 7 zurückgehen ja nach lLeistung des System´s
zum Schluß kopieren wir den Kernel noch auf die USB platte mit
cp /usr/src/linux/arch/i386/boot/bzImage /mnt/usb1/boot/vmlinuz-2.6.22.5-usb
fertig!
Viel spaß!
Nur für Leute die vom Bios nicht von USB booten können!
Sollte man ein älteres Mainboard besitzen das das Booten vom USB nicht unterstützt!
Kann man auch den zweiten Eintrag in /boot/grub/menu.lst auf der Festplatte (hda,d,c,d) so ändern das dieser dann vom USB bootet!
Dazu muß der Kernel auf der Festplatte platziert werden!und natürlich 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 aber ein Feedback währe schon!
die config von lilo liegt in /etc/lilo.conf und müßte 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ß ich raten!
Achtung!Achtung!Achtung!Achtung!Achtung!Achtung!Achtung!Achtung!Achtung!
Ich hoffe er schreibt nun auf sda und nicht auf hda!!!!!sonst bootet der VDR nicht mehr!
Wartet in diesem lilo Fall auf Feedback!
Über modifikations Tipps würde ich mich freuen!
Zur Zeit greift der VDR alle 5-7 sekunden auf mein USB zu!
Wen man die ramdisk im Menu auf 256 erhöht wird /tmp automatisch in die ramdisk verschoben!