Ubuntu VM zum Erstellen einer Firmware aus dem SVN
Aus open7x0.org
Für die VDR-NG Firmware werden einige Kernel-Module aus der original Siemens-Firware benötig, die nicht unter der GPL stehen und die nicht frei von anderen als Siemens verteilt werden dürfen. Das hat zur Folge, das keine fertigen Firmware-Images verteilt werden können. Wie an anderer Stelle beschrieben muss jeder seine Firmware selbst erstellen.
Für Windows und neuerdings auch Linux gibt es das Tool fw-builder, das aus einer vorkompelierten aber unvollständigen VDR-NG Firmware und einer original Siemens-Firmware ein installierbares Firmware-Image erstellt. Diese Vorgehensweise hat allerdings den Nachteil, dass sie nicht "up-to-date" ist und nicht individuell ausgewählt werden kann, welche Komponenten die Firmware enthalten soll. Dazu muss die SVN-Version der Toolchain ausgecheckt und übersetzt werden. Das funktioniert zur Zeit nur unter Linux (und *BSD), Windows und MacOSX User bleiben aussen vor.
Mit Produkten wie VMWare, Xen oder VirtualBox läßt sich aber ein virtuelles Linux paralell und gleichzeitig zum eigentlichen Betriebssystem betreiben, mit welchem die Firmware dann übersetzt und angepasst werden kann.
Dieser Artikel beschreibt die Vorgehensweise am Beispiel eines zum download bereitgestellten virtuellen Ubuntu-Linux.
Inhaltsverzeichnis |
Vorraussetzungen
Vorraussetzungen für dieses How-To sind
- ein aktuelles Windows, Linux oder MacOSX auf Basis eines Intel oder AMD Prozessors
- Eines der folgenden VMWare Produkte:
- Workstation ab Version 6
- Player ab Version 2
- Server ab Version 2 (Version 1 geht aber auch, siehe unten im Text)
- Fusion (alle Versionen)
- 196MB freier Hauptspeicher
- ab 3GB Festplattenplatz (die virtuelle Festplatte wächst dynamisch)
- DHCP-Server und zB einen DSL-Router (für den Internetzugang)
- Einen ssh-Client wie putty
- Sehr, sehr viel Zeit (da die Zeit die das bauen braucht auch auf moderenen Rechner in Stunden gemessen wird!)
- Dieses How-To richtet sich auch an Linux-Neulinge, aber grundlegende Kenntnisse über die Konfiguration einer VDR-NG Firmware wird vorausgesetzt.
Im folgenden wird (zB bei Screenshots) von einem Windows-XP-System ausgegangen, auf dem der VMWare Player installiert ist und verwendet wird. Als ssh-Client kommt beispielhaft putty zum Einsatz, Zielplattform ist eine M740AV, Zielnetzwerk ist 192.168.1.0/24. Das hier geschriebene ist aber recht einfach auf andere Situationen übertragbar.
Download und starten der VM(ware)
Die VM (virtuelle Maschine) kann unter [1] (ca. 250MB) geladen werden. Es handelt sich um ein (unter Windows) selbst entpackendes RAR-Archiv. Es kann alternativ auch mit WinRAR oder unrar entpackt werden. Bei der virtuellen Maschine handelt es sich um ein sehr spartanisch ausgerüstetes Ubuntu 7.10, das seine Zwecke aber voll und ganz erfüllt.
Zum starten der VM im VMWare Player auf die Schaltfläche Open klicken und dann in den Ordner wechseln, in den das RAR-Archiv entpackt wurde. Dort befindet sich eine Datei Ubuntu.vmx (die Dateiendung wird nicht auf jedem System angezeigt), die ausgewählt werden muss. Anschliessend auf Öffnen klicken und die VM wird gestartet - Ubuntu bootet.
Benutzer der VMWARE Server Version 1.0.x werden sich an dieser Stelle mit einer Fehlermeldung konfrontiert sehen, dass die Konfiguration mit einer neueren VMWARE Version erstellt wurde. Das ist aber kein Problem, da sich die virtualHW.version im Ubuntu.vmx File einfach der Eintrag virtualHW.version = "6" auf virtualHW.version = "4" ändern. Eine ähnliche Änderung muss man auch in der Datei Ubuntu4open7x0.org.vmdk machen: dort muss ddb.virtualHWVersion = "6" auf ddb.virtualHWVersion = "4" geändert werden. Anschliessend startet das VM Image auch unter VMSERVER 1.0 (getestet mit 1.0.4).
Eine weitere Falle lauert bei der Abfrage, ob eine neue Konfiguration genommen oder die alte gehalten werden soll (VMWARE bemerkt, daß die VM jetzt aus einem anderen Verzeichnis gestartet wurde). Sinnvollerweise sagt man hier jetzt Keep, da sonst die Netwerkkarte eine neue MAC Adresse bekommt, was unter Ubuntu zu Problemen führt: Die alte MAC Adresse wird in /etc/udev/rules.d/70-persistent-net.rules gespeichert und die angeblich neue Karte bekommt dann die eth1 zugewiesen. Als Folge läßt sich die Maschine nicht über das Netz erreichen, da die Konfiguration für eth0 und eth1 nicht passen. Hat man einen solchen Fall (z.B. weil man das sonst sinnvolle Create gewählt hatte), muß die neue Ethernetadresse aus dem Ubuntu.vmx File ausgelesen (Eintrag ethernet0.generatedAddress) und im eth0 Eintrag in /etc/udev/rules.d/70-persistent-net.rules korrigiert werden. Nach einem Neustart sollte die ip-Adresse auch für eth0 wieder zugewiesen sein und die Maschine im Netz erreichbar sein.
Anmerkung: Die Probleme können umgangen werden, indem die VMWARE-Tools installiert werden. Dazu im Menü "Virtuelle Maschine" "VMware-Tools installieren" aktivieren. Bisher passiert noch nichts, da wir auf der Konsole arbeiten. Also aktivieren wir die Tools-Installation manuell via "sudo mount /dev/cdrom /media/cdrom"
Dann entpacken wir die Tools in unser home-Verzeichnis: "cd" (Hiermit wechseln wir in unser home-Verzeichnis, hier /home/m740) "tar -xvzf /media/cdrom/VMwareTools-7.9.3.tar.gz"
Nach dem entpacken ins Verzeichnis "vmware-tools-distrib" wechseln mit "cd vmware-tools-distrib" "./vmware-install.pl" schließlich installiert die Tools.
Jetzt sollte nach einem Neustart der VM die Netzwerkkarte wieder zur Verfügung stehen!
Das Ubuntu konfiguriert seine Netzwerkkarte automatisch - sofern wie in den Vorraussetzungen gefordert ein DHCP-Server vorhanden ist (ein solcher ist in sehr vielen DSL-Routern eingebaut). Um die vergebene IP-Adresse zu erfahren muss auf das Player Fenster (dort wo weißer Text auf schwarzer Fläche zu sehen ist) geklickt werden. Der Mauszeiger verschwindet anschliessend.
Bitte einmal auf die Return/Enter-Taste drücken. Es erscheint das login. Hier muss m740 eingegeben werden und Return/Enter gedrückt werden, Passwort ist ebenfalls m740. Wenn keine Tippfehler aufgetreten sind, hinter das $ jetzt ifconfig eingeben und Enter drücken. Bei der darauf folgenden Ausgabe im Block eth0 nach dem Text inet addr: suchen und die nach dem Doppelpunkt stehende IP-Adresse (z.B. 192.168.1.107) notieren. Diese wird im Verlauf dieses Artikels benötigt. Der Screenshot links zeigt den Player mit der Ausgabe von ifconfig. Das rote Kästchen zeigt an, wo die IP-Adresse zu finden ist.
Durch gleichzeitiges drücken der linken Alt und Strg-Taste gibt es dann den Mauszeiger zurück.
Download und starten der VM(VirtualBox)
Als Alternative bietet sich das VirtulBox Image (VDI=VirtualBox Disk Image) die benötigte Software [2] dort downloaden und installieren.
Das Image für VirtualBox downloaden [3] (ca. 90MB) das Packet (rar) mit z.B. Winrar extrahieren.
Nun VirtualBox starten und mit dem Button "Neu" das erstellen der VM einleiten, nun den Namen eurer VM Wählen als BS-typ gebt ihr "Linux 2.6".
Jetzt koennt ihr einstellen wieviel Speicher (RAM) der VM zur Verfügung gestellt werden soll, bitte eurem System anpassen, 50% vom Gesamtspeicher sollten keine Probleme machen.
Im folgenden Dialog wird die Festplatte erfragt, hier wählt ihr "Existiernd.." in diesem Fenster wählt ihr "Hinzufügen" und gebt die VDI-Datei an die ihr zuvor extrahiert habt.
Das einrichten kann nun abgeschlossen werden.
Jetzt habt ihr eine "Neue" VM um den Zugriff ueber das Netzwerk auf die VM zu ermöglichen braucht es eine kleine Änderung:
Button "Ändern" dann den Reiter Netzwerk markieren, und im rechten Teil des Fensters "Angeschlossen an:" auf "Hostinterface" umstellen, im unteren Teil findet sich ein leeres Fenster "Hostinterfaces" rechts den grünen + Button klicken.
Der Name des Interfaces braucht nicht geändert werden, die Intsallation der Treiber bestätige und mit OK die Änderungen
übernehmen.
Jetzt geht ihr in eurem Windows in die Netzwerkeinstellungen, dort findet sich jetzt auch ein Interface mit dem Namen "VirtualBox Hostinterface 1" dieses Interface mit Strg+links (Maus) markieren und das Standart Interface eures PCs ebenfalls mit Strg+links (Maus) markieren, beide Karten sollten nun blau markiert sein. Dann die rechte Maustaste klicken und "Verbindungen überbrücken" wählen.
Diese schritte sind zwingend notwendig damit eure VM eine IP Adresse aus eurem Netz mittels DHCP bekommt.
Jetzt koennt ihr einfach "Start" klicken.
Benutzer und Passwort sind m7x0
Um die Firmware bauen zu koennen braucht es einige Packete um diese zu installieren
sudo ./installpkg
Nun koennt ihr noch fix die Toolchain auschecken und findet sich dann im Verzeichnis Firmware wieder:
./toolchain
Mit putty an der VM anmelden
Ab hier wird ein ssh-Client wie putty benötigt, denn die VM enthält (aus Platz und Resourcengründen) keine speicherfressende GUI sondern nur eine schlanke Kommandozeile. Diese reicht, wie im weiteren Verlauf zu sehen sein wird, völlig aus. Der Umweg über putty ist nicht unbedingt nötig, aber wegen einfacherem Copy&Paste und der Möglichkeit, das Fenster zu maximieren, sehr zu empfehlen. Mehr zu putty auf der Seite putty verwenden.
Bitte den ssh-Client starten und als Hostname (or IP-Adress) die unter 2 notierte IP-Adresse (im Beispiel 192.168.1.107) eingeben und auf Open klicken. Das jetzt erscheinende Fenster kann gerne und sollte auch maximiert werden.
Wie schon vorher bitte mit dem Benutzernamen m7x0 und dem Passwort m7x0 anmelden. Anschliessend bitte durch Eingabe von
cd firmware
in das Arbeitsverzeichnis wechseln. Dieses ist per Samba freigegeben, so dass auch von Windows-PCs problemlos auf dieses Verzeichnis zugegriffen werden kann.
Firmwareerstellung vorbereiten
Mit
svn co svn://open7x0.org/uclibc_build_env/branches/experimental
wird, in diesem Fall der experimentelle, Quellcode aus dem SVN geladen und im Verzeichnis experimental gespeichert. Im SVN sind verschiedene Version zu finden, zur Zeit branches/experimental und branches/testing. Im ersteren sind immer die neusten Änderungen zu finden, allerdings ist dafür die Gefahr am höchsten, dass nicht alles wie gewünscht (oder überhaupt) funktioniert.
.config anpassen
Die Firmware wird zweistufig konfiguriert. Im ersten Schritt wird mit Hilfe der Datei .config festgelegt, welche Komponenten überhaupt in die Firmware aufgenommen werden. Ab hier muss das putty-Fenster maximiert sein. Bitte eingeben
cd experimental cp configs/default-config .config nano --nowrap .config
Diese Befehle bewirken, dass in das Verzeichnis experimental gewechselt wird (wer testing aus dem SVN geladen hat, muss natürlich nach testing wechseln), die Beispielkonfiguration default-config aus dem Verzeichnis configs als .config gespeichert wird und anschliessend in dem Texteditor nano geöffnet wird. Das --nowrap bewirkt, dass der automatische Zeilenumbruch ausgeschaltet wird.
In nano kann mit den Pfeiltasten navigiert werden. Die .config besteht aus mehreren Zeilen in der Form CONFIG_XYZ =. XYZ bezeichnet dabei die Funktion, die konfiguriert werden soll. Zeilen die mit einem # beginnen haben keine Auswirkungen. Eine genaue Beschreibung dieser Datei gibt es unter .config - uclibc toolchain config file (zur Zeit noch unvollständig, wird nach und nach erweitert), viele Optionen erklären sich aber von selbst.
Ein Beispiel: die Zeile CONFIG_BOOTMENU = y bedeutet, dass das bootmenu in die Firmware eingebaut wird, wogegen mit CONFIG_BOOTMENU = n oder # CONFIG_BOOTMENU = y das Gegenteil erreicht wird - kein bootmenu.
Unbedingt angepasst werden muss die Zeile
CONFIG_M7X0_TYPE = m740
Für eine m740 stimmt sie schon, wer eine Firmware für eine M750S erstellen will muss die Zeile ändern in
CONFIG_M7X0_TYPE = m750s
Einfach, oder?
Nehmen wir doch einfach noch ein paar weitere Einstellungen vor.
- Es soll nicht nur ein Firmware-Image im OFI-Format, sondern auch im WSW-Format erstellt werden. Dazu muss die Zeile
# CONFIG_GENERATE_WSW-IMG is not set
geändert werden in
CONFIG_GENERATE_WSW-IMG = y
- Es sind keine Wavebox-Altlasten mehr vorhanden? Dann wird auch der cridplayer nicht mehr benötigt. Dazu werden die Zeilen CONFIG_VDR-PLUGINS-LIBS und CONFIG_VDR-PLUGINS verändert. Dort stehen, durch Leerzeichen getrennt, alle Plugins udrin, die in die Firmware integriert werden. Ohne cridplayer sehen die Zeilen dann so aus:
CONFIG_VDR-PLUGINS = testing/epgsearch testing/filebrowser testing/streamdev testing/hdspace testing/blink CONFIG_VDR-PLUGINS-LIBS = epgsearch filebrowser streamdev-server epgsearchonly conflictcheckonly quickepgsearch blink hdspace
Jetzt sollte auch klar werden, warum dass putty-Fenster maximiert sein sollte.
- Konsolenjunkies (und die es werden wollen) aktivieren dann noch die Bash:
CONFIG_ZLIB = y CONFIG_READLINE = y CONFIG_NCURSES = y CONFIG_BASH = y
Achtung: die Bash ist, was die benötigten Resourcen angeht, ein Monster!
An dieser Stelle eine wichtige Warnung: Änderungen an der falschen Stelle von .config können im schlimmsten Fall bedeuten, dass nach dem einspielen der Firmware die Box nicht mehr startet.
Die .config wird unter nano mit der Tastenkombination Strg+O (dem Buchstaben o) und abschliessendem Enter (zur Bestätigung des Dateinamens) gespeichert. Mit Strg+X wird nano beendet.
Grundlegende Konfiguration vornehmen
Im zweiten Schritt wird es konkreter, jetzt muss vorallem das Netzwerk konfiguriert werden. Alle anderen Einstellungen können auch später im laufenden Betrieb geändert werden. Mit
nano --nowrap buildin/base/common/etc/rc.conf
wird die Konfigurationsdatei rc.conf geöffnet. Dort müssen die Zeilen
net=inet ip=192.168.0.1 netmask=255.255.255.0
angepasst werden. Falls die IP automatisch per DHCP konfiguriert werden soll, ist nur die erste Zeile von belang:
net=DHCP
Im anderen Fall muss die IP manuell eingestellt werden. Dafür sind die beiden anderen Zeilen zuständig. Diese könnten dann wie folgt aussehen:
ip=192.168.1.3 netmask=255.255.255.0
Diese Zeilen müssen zu dem restlichen Netzwerk passen. Im Zweifelsfall einfach nachschauen, wie die Box zur Zeit konfiguriert ist.
Mit Strg+O, dann Enter und Strg+X wird die Datei dann gespeichert und nano beendet.
Wer will und weiß was er tut kann an dieser Stelle auch andere Dateien wie buildin/base/common/etc/rc.local.conf und buildin/base/common/etc/fstab angepasst werden, was aber in diesem How-To nicht beschrieben wird.
Firmware bauen
Wenn alle Einstellungen wie gewünscht sind - jetzt ist der richtige Moment das noch mal zu überprüfen - wird das erstellen der Firmware mit dem Befehl
make
gestartet. Der Vorgang dauert beim ersten Mal sehr lange, es wird einiges an Daten aus dem Internet nachgeladen. Daher ist diese Vorgehensweise für ISDN oder Modemnutzer nicht zu empfehlen.
Fertig (und erfolgreich) war die Erstellung, wenn die Meldung
Finished, we are ready to rumble...
erscheint.
Firmware auf den PC kopieren
Die Firmware ist jetzt fertig gebaut, liegt aber noch auf der (virtuellen) Festplatte der VM. Von da aus kann das Firmware-Image direkt via FTP auf die Box kopiert werden.
Interessanter ist es aber sicherlich, die OFI bzw WSW-Datei zunächst auf die eigenen, "echten" Festplatte zu kopieren, zB zum sichern oder um sie auf einen USB-Stick zu kopieren.
Dafür ist in der VM der Zugriff auf das Verzeichnis firmware via Samba für Lesezugriffe freigegeben. Dazu muss nur der Windows-Explorer geöffnet werden und unter Adresse
\\192.168.1.107\firmware
eingegeben werden. Alternativ erscheint die VM auch in der Netzwerkumgebung in der Arbeitsgruppe MSHOME
VirtualBox-VM bringt kein Samba-Server mit hier koennt Ihr einfach via FTP auf die VM zugreifen indem ihr euren Browser öffnet:
ftp://<IP-VM>
Im ordner Firmware die wsw oder ofi datei wählen und speichern
Wie gehts weiter?
An dieser Stelle ist das How-To auch schon zu Ende, die VM wird nicht mehr benötigt. Mit
sudo halt
und Eingabe des Passworts m740 wird das Ubuntu Linux herruntergefahren.
Die weitere Vorgehensweise wird im Artikel VDR Installation - next generation open7x0.org Firmware beschrieben, und zwar ab dem Punkt Der WSW-Weg bzw. Der OFI-Weg, je nachdem was erzeugt und gewollt ist.
Soll eine weitere Firmware, z.B. mit einer anderen Konfiguration, erstellt werden, einfach
touch .config make
eingeben. Meist dauert das dann nicht mehr so lange. Ein
svn up
lädt übrigens ein Update aus dem SVN (falls vorhanden).
Weiteres zu dieser VM
- Die Freigaben der VM können auch als Laufwerk verbunden werden. Falls das neue Laufwerk den Buchstaben O: bekommen soll:
net use o: \\192.168.1.107\firmware /persistent:no
für nur-lesenden Zugriff auf das Firmware-Verzeichnis oder
net use o: \\192.168.1.107\m740 /user:m740 m740 /persistent:no
für schreibenden Zugriff auf das Home-Verzeichnis des Users M740
- Ubuntu gestattet das Anmelden als User root nicht. Um ein Programm mit root-Rechten auszuführen muss ihm der Befehl sudo (=Substitute User DO und nicht SuperUser DO) vorangestellt werden. Als Beispiel soll der halt Befehl von oben dienen, mit dem die VM ausgeschaltet wird. Verlangt sudo nach einem Passwort, dann ist es m740.
- Das System muss wie jede andere Betriebssysteminstallation aktuell gehalten werden. das geht bequem und schnell über das Internet.
sudo apt-get update
holt sich die Infos, welche Pakete zur Zeit aktuell sind,
sudo apt-get upgrade
wertet diese Infos dann aus und aktualisiert bei Bedarf das System.
- Ähnlich werden weitere Programme installiert. Um den Norton Commander-Klon GNU Midnight Commander zu installieren muss einfach nur der Befehl
sudo apt-get install mc
eingegeben werden. Eine Übersicht von verfügbaren Softwarepaketen gibt es unter [4].
- Die VM kann natürlich auch dazu genutzt werden, Firmware-Images für andere Projekte wie zB dem ds-mod für die AVM FritzBox. Wahrscheinlich muss Software wie unrar mit Hilfe von apt-get nachinstalliert werden (abhängig vom Projekt).
- Wer jetzt Blut geleckt hat kann sich von ubuntu.com die aktuelle Installations-CD laden und in die VM installieren oder mit
sudo apt-get install ubuntu-desktop
die graphische Benutzeroberfläche nachinstallieren. Es lohnt sich.

