# Info # Image selbst Kompilieren # Info # 0
-
nein (0) 0%
-
ja (0) 0%
Orginal howto aus dem Board
von
: Coronas
--------------------------------------------------------------------------------
Teil 1: Linux installieren
--------------------------------------------------------------------------------
Ein Vorwort:
Warum Mandrake? Weils meine Lieblings-Distribution ist. Ehrlich, man kann genausogut
auch jede andere Distribution nehmen,
aber ich habs mit Mandrake probiert, und der Vorteil ist, dass das kompilen einfach
klappt. Man kann die ISO-Images für
Mandrake 9.1 über verschiedene Wege bekommen:
1. Über die offiziellen Mirror
Vorteil: Man bekommts aus erster Hand, und die isos sind 100% OK
Nachteil: Die Server sind zeitweise komplett überlastet
2. Über fileshare-Netzwerke
Vorteil: Man braucht die offiziellen Server nicht
Nachteil: Wenn das schief gehen sollte...
In jedem Fall sollte man die md5-Prüfsummen der einzelnen ISOs checken. Diese sind:
1. ISO (Mandrake91-cd1-inst.i586.iso) -> 6f1581974e12420fef87868ed6caa31f
2. ISO (Mandrake91-cd2-ext.i586.iso) -> 87afe11ddef6b619866322aa0797e45f
3. ISO (Mandrake91-cd3-i18n.i586.iso) -> ff187c7a552722f42790b5726fdb62b3
Wenn man alles hat, müssen die ISOs auf Rohlinge gebrannt werden, es langen 650MB.
Vor der Installation gibt´s einiges zu beachten:
Der Rechner sollte mindestens noch 5GB auf einer Festplatte freihaben, 10-20GB wären besser
Wenn Ihr bei einer Parallelinstallation (Windows/Linux) die Festplatte, auf der Mandrake soll, nicht mit NTFS formatiert
habt, müsst Ihr voher mit einem Tool eine freie Partition anlegen. Bei NTFS kann das Mandrake von alleine. Eventuelle
Windows-Partition sollten vor einer Umpartitionierung defragmentiert werden.
Setzt im Bios die Option „Plug and Play“-Betriebssystem auf „Nein“, und aktiviert die USB-Unterstützung für DOS, damit es
keine Probleme bei der Hardwareerkennung gibt.
Mandrake 9.1 downloaden:
ftp://ftp.leo.org/pub/comp/os/unix/linux...ke/Mandrake/iso
oder
ftp://ftp.tu-chemnitz.de/pub/linux/mandrake/iso
im Bios einstellen, dass von der CD gebootet werden soll
CD1 von Mandrake 9.1 ins CD-Laufwerk einlegen und neu booten
Language: Europa->Deutschland auswählen
Lizenzabkommen auf „akzeptieren“ anklicken und auf „Weiter“ gehen
Mousetype: „Wheelmaus“ oder „Standard“ funktioniert fast immer und auf „Weiter“
Tastaturtyp: „Deutschland (ohne Akzenttasten)“ und auf „Weiter“
Sicherheitsebene auf „Standard“ stellen und auf „Weiter“
Bei der Partitionierung gibt es mehrere Möglichkeiten:
wenn Ihr ausschliesslich mit Linux arbeiten und Windows von der Platte kicken wollt, könnt Ihr gleich zum Punkt C gehen
Für Rechner mit FAT32 gilt Punkt B, und mit NTFS-Rechnern (Windows 2000/XP) fangen wir an:
Punkt A:
Platz auf NTFS Partition freischaufeln
Wenn man seine Platte mit NTFS formatiert hat (Standard bei WinXP),
„Den freien Platz der Windows Partition verwenden“
auswählen
Bei welcher Partition wollen Sie die Grösse ändern?
“. Das kann man leider nicht allgemein sagen, ich wollte Linux auf der D-Platte haben und bei meinem System wars hda5
[Laufwerk D].
Dann auf
„Weiter“
Warnung durchlesen und verstehen. Dann auf
„Weiter“
Bei
„Wieviel Platz benötigen Sie noch für Windows auf Partition hda5“
habe ich den Schieberegler auf Minimum gebracht.
Danach hatte ich dann knapp 5GB für Linux zur Verfügung. Dann auf
„Weiter“
Im Nächsten Fenster
„beim nächsten Windows-booten werden die Windows-Partitionen automatisch gecheckt“
mit
„OK“
bestätigen
Punkt B (freien Platz auf einer leeren Partition nutzen (Windows 98->FAT32)):
Auf
„Benutzerdefinierte Partitionierung“
gehen und auf
„Weiter“.
Im nächsten Bildschirm auf die leere Partition klicken,
„automatisch erstellen“
anwählen und mit
„Fertig“
bestätigen.
Punkt C (Festplatte komplett für Linux benutzen):
Partition auf
„Benutzerdefinierte Partitionierung“
stellen und auf
„Weiter“
Falls eine Partition schon existiert,
„Alles löschen“ anklicken. Dann auf
„automatisch erstellen“
klicken
nun den Button
„Fertig“
anklicken
Nun geht es allgemein mit der Installation weiter:
Auswahl der Paketgruppen: auf der linken Seite alles auswählen und auf der rechten Seite nur
„KDE-Arbeitsplatz“
. Wenn man viel Platz auf der Festplatte hat, kann man natürlich auch den Gnome-Desktop und ein paar Server installieren.
bei
„Individuelle Paketauswahl“
ein Harken setzen und auf
„Weiter“
gehen
In der Individuellen Paketauswahl unten aus das 3. Symbol von links (Umschalten zwischen unsortiert und gruppiert)
klicken und dann ein Harken bei folgenden Programmen hinzufügen:
---------------
autoconf2.5
bison
byacc
drakwizard
flex
samba-server
---------------
zum Schluss mit
„Installation“
bestätigen.
nun wird Mandrake installiert. Das lustige ist, dass die Installation förmlich nach der 2. und 3. CD jammert *grins*
nach der Installation der 3. CD gibt man nun ein root-Passwort ein (UNBEDING DIESES PASSWORT BEHALTEN!)
danach wird ein Fenster eingeblendet, wo man zusätzlich noch Benutzernamen einrichten kann (man sollte übrigens NIE mit
dem root arbeiten, sondern immer ein Benutzer anlegen!)
nachdem wir ein Benutzer angelegt haben, gehen wir auf
„Weiter“
jetzt kommt ein Fenster, wo gefragt wird, ob der Benutzer automatisch angemeldet werden soll. Da wir ja faul sind,
übernehmen wir das
„Möchten Sie diese Möglichkeit benutzen“
anklicken und KDE auswählen und klicken auf
„Weiter“.
jetzt wählen wir
„Erster Sektor der Platte (MBR)“
aus und klicken wieder auf
„Weiter“
es erscheint nun ein Fenster mit einer Zusammenfassung des Systems, wobei wir alles erst einmal so stehen lassen können,
wenn keine Felder in roter Schrift auftauchen. Vergewissert euch, dass die Grafikkarte/Monitor sowie
„Netzwerk & Internet“
richtig konfiguriert sind. Falls die automatische Hardwareerkennung versagt hat, kann man es hier anpassen.
bei dem nächsten Fenster wird gefragt, ob ein Internetupdate gestartet werden soll. Wir klicken in diesem Fall aber NEIN
an, da sich sonst eventuell der Rechner aufhängen könnte, falls wir die Netzwerk- Internetverbindung nicht richtig
konfiguriert haben. Wir klicken also auf
„Nein“
und gehen
„Weiter“
Nun sind wir am Ende der Installation, klicken auf
„Systemneustart“
und hoffen/beten, dass alles geklappt hat *grins*
nach dem Booten sollte nun ein Fenster kommen, wo wir auswählen könne, was gestartet werden soll. Dort wählen wir
„linux“
aus und bestätigen mit der Return-Taste
danach melden wir uns mit dem Benutzernamen und deren Passwort an (falls Nötig), welches wir in der Installation angelegt
haben.
zum Schluss kommt noch ein Assistent, wo man auswählen kann, wie der KDE-Desktop aussehen soll.
That is all!
Nun wünsche ich Euch viel Spass beim selber ausprobieren.
Die HowTo ist nicht besonders gut vom Style gelungen, dafür ist die selten! *grins*
Gruss,
BoxMan
P.S.: einen riesen Dank an Coronas, der mich in die Welt von Linux eingeweiht hat und mir zur Seite steht!
P.P.S: Teil 2 wird das auschecken der Firmware für die DreamBox sein und Teil 3 vom kompilieren zum flashen in den Receiver.
--------------------------------------------------------------------------------
Teil 2 - CDK für die Dreambox kompilieren
--------------------------------------------------------------------------------
hi,
nachdem wir Teil 1: Linux installieren abgeschlossen haben, geht es hier mit
"Teil 2 - CDK für die Dreambox kompilieren"
weiter.
Ach - wegen der ganzen Nummern, die in den code-Abschnitten auftauchen: bitte ignorieren bzw nicht mit eingeben.
Also wenn z.B.
1: mkdir bla
auftaucht, dann müsst ihr nur
mkdir bla
eingeben. Die Nummern werden automatisch generiert, damit die Sache übersichtlich bleibt.
Übrigens klappt Copy&Paste nicht - also immer alles ganz exakt abtippen!
1. Zuerst müssen wir überprüfen, ob alle Programme, die wir brauchen, auf dem Rechner installiert sind.
In einer Konsole nacheinander folgendes eingeben:
cvs --version
autoconf --version
automake --version
libtool --version
gettext --version
make --version
makeinfo --version
tar --version
bunzip2 --version
gunzip --version
patch --version
infocmp --version
gcc --version
g++ --version
yacc --version
flex --version
bison --version
pkg-config --version
Falls
"command not found"
erscheint, muss zuerst das entsprechende Programm installiert werden.
Folgende Versionen brauchen wir mindestens:
- automake >= 1.4p5
- libtool >= 1.4.2
- gettext >= 0.12.1
- make >= 3.79
- gcc 2.95 or >= 3.0
- g++ 2.95 or >= 3.0
2. Verzeichnisse fürs cdk vorbereiten, den rel_1_0_0-Stand runterladen und enigma aktualisieren.
Dazu in einer Konsole folgende sechs Zeilen nacheinander eingeben:
mkdir $HOME/tuxbox-rel
cd $HOME/tuxbox-rel
cvs -d:pserver:anonymous@cvs.tuxbox.org:/cvs/tuxbox login
cvs -d:pserver:anonymous@cvs.tuxbox.org:/cvs/tuxbox -z3 co -r rel_1_0_0 .
cd apps/tuxbox/enigma
cvs up -dPAC
Aus gegebenem Anlass weise ich darauf hin, dass in einen Zeile nach
"rel_1_0_0"
ein Leerzeichen und ein Punkt ist.
Wer diesen Punkt weglässt und dann fragt, warum ein Fehler kommt, darf sich in die Ecke stellen und die Eselsmütze
aufsetzen.
3. mklibs.py runterladen und vorläufig nach Documents kopieren.
Ihr bekommt diese Datei unter
http://cvs.tuxbox.org/cgi-bin/viewcvs.cg...libs.py?rev=1.1
4. Jetzt mklibs.py ausführbar machen und nach $HOME/tuxbox-rel/cdk kopieren. Dies geht hiermit:
cd $HOME/Documents
chmod +x mklibs.py
cp mklibs.py $HOME/tuxbox-rel/cdk
5. Jetzt müssen wir einige Dateien anpassen, damit die fertige kompilierten Dateien auf der Dreambox laufen.
Dazu öffenen wir unsere Konsole (wenn sie nicht noch offen ist) und geben folgendes ein:
cd $HOME/tuxbox-rel/apps/tuxbox/enigma
emacs configure.ac
Es öffnet sich ein Editor. Zunächst bitte folgende Zeile komplett löschen:
TUXBOX_APPS_LIB_PKGCONFIG(TUXBOX,tuxbox)
Dann in der CPPFLAGS-Zeile "-DENABLE_PPPOE" hinzufügen.
Also aus alt
CPPFLAGS="$CPPFLAGS -fno-exceptions -fno-rtti -D_REENTRANT"
mach neu:
CPPFLAGS="$CPPFLAGS -fno-exceptions -fno-rtti -D_REENTRANT -DENABLE_PPPOE"
Zum Speichern nacheinander auf
"STRG-x"
"STRG-c"
drücken und die Sicherheitsfrage mit y beantworten.
Danach ist die Datei
$HOME/tuxbox-rel/apps/tuxbox/enigma/src/Makefile.am
dran:
cd src
emacs Makefile.am
Ziemlich weit unten "-ltuxbox" rauswerfen - Aus alt
-ldl -lpthread -lcrypt -lresolv -ltuxbox
mach neu:
-ldl -lpthread -lcrypt -lresolv
Wenn Ihr gettext in einer älteren Version habt, ist es zusätzlich erforderlich, im Verzeichnis
$HOME/tuxbox-rel/apps/tuxbox/enigma/po
die Datei Makefile.am ein wenig zu editieren. In der zweiten Zeile muss
" --from-code=utf-8"
gelöscht werden, die Zeile sollte dann so aussehen:
XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
6. In einer Konsole das CDK bauen.
Dazu nacheinander folgende vier Zeilen BUCHSTABE FÜR BUCHSTABE
Es sind 4 Zeilen, es kann sein, dass es bei euch wegen des Zeilenumbruchs anders angezeigt wird)
eingeben:
cd $HOME/tuxbox-rel/cdk
./autogen.sh
./configure --prefix=$HOME/dream --with-cvsdir=$HOME/tuxbox-rel --with-targetruleset=flash --with-cpu=405 --disable-libcrypto --disable-flashmodutils --enable-maintainer-mode
make all
7. Zigarette rauchen, Haus in einer anderen Farbe anpinseln, Klavierspielen lernen. Während des compilierens werden immer
wieder verschiedene Programme heruntergeladen, also sollte man eine funktionierende Internetverbindung haben.
8. Nach einiger Zeit wird als letzte Zeile "touch .nano" auftauchen. Dann ist das CDK und der Rest fertig.
Was heisst aber "touch .nano"?
"touch .nano" ist ein linux-Befehl, der im aktuellen Verzeichnis eine Datei namens
".nano"
mit dem jetzigen Datum/Uhrzeit erzeugt. Jedesmal, wenn ein Programmpaket erfolgreich kompiliert wurde, wird automatisch
während des Kompilierens mit touch eine Datei mit dem Namen des entsprechenden Programmes erzeugt.
Gebt mal "ls -a" in einer Konsole im cdk-Verzeichnis ein und schaut euch mal die ganzen "Punkt-Dateien" an.
Der Punkt vor dem Dateinamen bedeutet übrigens, dass es sich um eine
"versteckte"
Datei handelt. Mit einem
"ls"
im cdk-Verzeichnis werden sie nicht angezeigt.
OK. Jetzt wissen wir, das es viele versteckte Dateien im cdk-Verzeichnis gibt. Aber warum werden die angelegt?
Diese Dateien sind beim compilen wichtig. Anhand dieser Dateien wird erkannt, welche Programme noch gebaut werden müssen,
und welche schon kompiliert wurden. Bleibt mal im cdk-Verzeichnis und gebt
"make all"
nochmal ein. Es passiert nichts. Nun löscht mal mit
"rm .nano"
die .nano-Datei, und macht nochmal
"make all".
Der Rechner schaut nach, welche Programme gebaut wurden, erkennt, dass nano noch nicht da ist, und kompiliert dieses
Programm nochmal (keine Angst, das ist schnell fertig). Alles klar?
Nachdem wir das cdk erstmalig übersetzt haben, sollten wir noch den Source-Code-Ordner, in dem die zu kompilierenden
Programme landen, sichern. Damit erspart man sich das nochmalige runterladen, falls mal alles gelöscht werden muss, oder
wenn man das cdk neu aufsetzt.
In einer Konsole folgendes ausführen:
cd $HOME/tuxbox-rel/cdk
mv ./Archive $HOME
ln -s $HOME/Archive Archive
Damit haben wir erreicht, dass wir, falls jemals alles komplett neu ausgecheckt werden muss, einfach ins cdk-Verzeichnis
gehen und mit
"ln -s $HOME/Archive Archive"
den Archive-Ordner wieder
"herstellen"
können. Übrigens: Das, was wir gerade mit dem Befehl
"ln"
gemacht haben, nennt man
"einen Symlink erstellen"
Das kann man sich so ähnlich vorstellen, wie
"Verknüpfung hier erstellen"
unter Windows.
So. Der Hauptteil ist geschafft. Aber ab und zu wird ja auch was ins cvs eingecheckt. Da wir uns besonders für
enigma-Änderungen interessieren, habe ich ein kleines Script vorbereitet, das das cvs updated und enigma neu kompiliert.
"Was ist ist script?"
höre gerade von hinten.
So was ähnliches wie eine *.bat-Datei unter DOS/Windows. Eine Ansammlung von Befehlen, die man prinzipiell auch genausogut
nacheinander in der Konsole (in der MS-DOS Eingabeaufforderung) eintippen könnte. Leider ist es dem script egal,
ob Änderungen stattgefunden haben oder nicht, also kann es vorkommen, dass enigma neu kompiliert wird, aber keine
Neuerungen eingecheckt wurden.
Hier erstmal vorneweg das script, eine Erklärung zu den einzelnen Befehlen dazu gibt's weiter unten:
#!/bin/sh
CVSDIR=$HOME/tuxbox-rel
#
#enigma auf den Ursprungszustand bringen
#
cd $CVSDIR/apps/tuxbox/enigma && make distclean
#
#*.po-Dateien wieder herstellen
#
for i in $CVSDIR/apps/tuxbox/enigma/po/*.po~; \
do mv $i ${i%%.po~}.po; \
done
#
#CVS updaten
#
cd $CVSDIR && cvs update -dP
#
#Enigma neu compilen
#
cd $CVSDIR/cdk
./autogen.sh
./config.status --recheck
rm .enigma
make all
Damit ihr das script starten könnt, müsst ihr es in euer home-Verzeichnis kopieren und dann ausführbar machen.
Öffnet mal eine Konsole, und tippt nacheinander
"cd $HOME"
und
"pwd" (ohne die "") ein - die Ausgabe davon ist das home-Verzeichnis. Tippt nun
"kwrite enigma.sh"
ein, und es öffnet sich ein Texteditor. Jetzt schreibt ihr das script ab - cut&paste klappt nicht!
Wichtig: Zeite 11 und 12 müssen mit einem Tabulator beginnen! Ansonsten klappts nicht! Jetzt die Datei speichern und
kwrite beenden. Immer noch unter der Konsole machen wir das script mit
"chmod +x enigma.sh"
ausführbar und starten den Updatevorgang ab sofort mit
"./enigma.sh".
Zu den einzelnen Zeilen:
1. Zeile
#!/bin/sh
Damit sage ich dem Computer, das diese Scriptdatei mit dem Programm
/bin/sh
ausgeführt werden soll. Eine Zeile dieser Art sollte in jedem Script ganz zu Anfang stehen.
2. Zeile
CVSDIR=$HOME/tuxbox-rel
Ich definiere eine Variable namens
"CVSDIR"
Die bekommt den Wert
$HOME/tuxbox-rel
d.h. der Pfad, wo euer cvs gespeichert ist. Das mache ich aus dem Grund, weil ich schreibfaul bin, und dieser Pfad relativ
häufig in diesem Script vorkommt.
3.-5. Zeile
#
#enigma auf den Ursprungszustand bringen
#
Alle Zeilen, die mit # anfangen, sind Kommentare. Die sollte man prinzipiell mit reinnehmen, damit andere Leute, die einen
Blick aufs script werfen, gleich sehen, um was es geht.
6. Zeile
cd $CVSDIR/apps/tuxbox/enigma && make distclean
Damit werden die Konfigurationsdateien des letzten compile-Durchgangs wieder gelöscht. So erreichen wir, dass enigma von
Grund auf neu compiliert wird.
7.-9. Zeile
Wieder ein Kommentar
10.-12. Zeile
for i in $CVSDIR/apps/tuxbox/enigma/po/*.po~; \
do mv $i ${i%%.po~}.po; \
done
Das ist eine Schleife, im Verzeichnis
$CVSDIR/apps/tuxbox/enigma/po
alle Dateien sucht, die mit
.po~
aufhören, und die Dateiänderung auf
.po
ändert. Einfach gesagt
13.-15. Zeile
Wieder ein Kommentar
16. Zeile
cd $CVSDIR && cvs update -dP
Damit werden die Dateien, die seit del letzten Auschecken verändert wurden, wieder auf den aktuellen Stand gebracht.
17.-19. Zeile
Wieder ein Kommentar
20. Zeile-Ende
cd $CVSDIR/cdk
./autogen.sh
rm .enigma
make all
Damit wird enigma komplett neu erstellt.
Wer mehr wissen will zur Programmierung von shell-scripten kann sich hier schlauer machen...
http://www.tldp.org/LDP/abs/html
--------------------------------------------------------------------------------
Teil 3 - vom CDK ins Flash
--------------------------------------------------------------------------------
Kleine Zusammenfassung vorneweg...
In Teil 1 haben wir Mandrake-Linux 9.1 auf einem Rechner installiert und konfiguriert.
In Teil 2 haben wir das CDK (Cross Development Kit) aus dem cvs gebaut, und gelernt, wie wir mit einem Texteditor unter
KDE arbeiten können, und wie wir mit der Konsole arbeiten. Ein paar Konsolen-Befehle haben wir auch kennengelernt, und wir
wissen, das es auf eine exakte Schreibweise ankommt.
In diesem Teil werden wir unser compiliertes CDK ins Flash bringen. Das machen wir in mehreren Schritten:
Abschnitt 1. Das image übers Netzwerk von der Dreambox auf unseren den Computer kopieren.
Abschnitt 2. ?
Abschnitt 3. Das neue image wieder auf die Box kopieren und neu flashen.
Bevor wir anfangen, solltet ihr schon ein wenig mit der Konsole, Konqueror und KWrite gearbeitet haben -
Teil 2 ist ganz gut, um den Umgang damit zum lernen.
Alle Befehle, die in einer Konsole eingegeben werden müssen, fasse ich anfangs in Anführungsstriche, damit ihr wisst,
wo ein Befehl anfängt, und wo er aufhört. Diese "" dürfen natürlich nicht eingegeben werden. Später erkläre ich die
Vorgehensweise, ohne jeden Befehl explizit zu erwähnen, poste allerdings den relevanten Kram in einer Konsole.
Abschnitt 1.
Vorneweg:
Dieses howto setzt ein gewisses Grundwissen voraus. Obwohl die scripte getestet sind, kann es vorkommen, das der Empfänger
irreparabel geschädigt wird. Wer sich dieser Gefahr bewusst ist und das Risiko übernehmen will, kann weiterlesen, allen
anderen sei gesagt, das wir keine Haftung für eventuelle Schäden übernehmen können. Gerade weil oft offizielle Updates
rauskommen, nötigen wir niemanden, dieses Howto durchzuführen. Und wenn was nicht klappt, ist dieses Forum der richtige
Ort für Beschwerden, und nicht die DMM-Boards...
Ich gehe davon aus, das Ihr die aktuelle Version von DMM im Flash habt. Andere Versionen werden weder von mir noch von
diesem HowTo unterstützt.
Ich arbeite mit einem 192.168.0.x-Netzwerk, bei mir hat die Box aus historischen Gründen die IP 192.168.0.42 - wann immer
ich diese IP in diesem HowTo benutze, müsst ihr da EURE Dreambox-IP eingeben. OK?
Wenn ihr Fragen zu bestimmten Befehlen im Script habt - Zu fast allen Befehlen unter Linux kann man sich mit
"befehl --help"
eine Minianleitung anzeigen lassen. Mit
"man Befehl"
wird eine Anleitung auf dem Bildschirm ausgegeben.
Dos-Umsteiger finden auf Mandrake unter folgender Adresse eine kleine Beschreibung,
welche Dos-Befehle einem bestimmten Linux-Befehl entsprechen:
file:/usr/share/doc/HOWTO/HTML/de/DE-DOS-nach-Linux/DE-DOS-nach-Linux-HOWTO-2.html#ss2.4
Dann fangen wir mal an. Konsole auf und mit "telnet 192.168.0.51" auf die Box.
Login und Passwort sind
"root"
und
"dreambox"
Jetzt schaun wir erstmal nach, wo das cramfs liegt.
Dazu geben wir
"cat /proc/mtd"
ein, und wir erhalten eine kleine Tabelle.
Der Befehl
"cat"
ist das Linux-Pendant zum MS-Dos-Befehl
"type"
man kann sich damit kleine Dateien ansehen.
[tux@Linux home]$ cd dream
[tux@Linux dream]$ telnet 192.168.0.42
Trying 192.168.0.42...
Connected to 192.168.0.42 (192.168.0.42).
Escape character is '^]'.
welcome on your dreambox! - Kernel 2.4.20 (0).
BusyBox on dreambox login: root
Password:
BusyBox v0.60.5 (2003.01.16-05:37+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
~ > cat /proc/mtd
dev: size erasesize name
mtd0: 00600000 00020000 "DreamBOX cramfs"
mtd1: 001c0000 00020000 "DreamBOX jffs2"
mtd2: 00040000 00020000 "DreamBOX OpenBIOS"
mtd3: 007c0000 00020000 "DreamBOX (w/o bootloader)"
mtd4: 00800000 00020000 "DreamBOX (w/ bootloader)"
mtd5: 004e0000 00020000 "DreamBOX SquashedFS"
~ >
Wir sehen, das das gesamte Flash aus mehreren Teilen besteht. Uns interessieren besonders das cramfs sowie das SquashedFS.
Diese liegen in zwei verschiedenen Bereichen - mtd0 sowie mtd5. Das cramfs und SquashedFS sind Dateisysteme wie zum
Beispiel FAT32 oder ext3.
Sie sind besonders optimiert für den Einsatz in Minicomputern ohne Festplatte wie z.B. PDAs oder
Sat-Receivern und nutzen den Speicher eines EEProms sehr effektiv aus, da alle Dateien stark komprimiert gespeichert
werden.
Der Nachteil: beide Dateisysteme sind read-only, also kann man nicht direkt Dateien auf darauf speichern.
Deshalb gibt es auf unserer Box das jffs2-Dateisystem. Dort finden wir Dateien, die aus praktischen Gründen sowohl
schreib- als auch lesbar sein müssen, sprich Kanallisten oder Settings.
Ein Image, was per Internet-update neu eingespielt wird, besteht lediglich aus dem cramfs (mit dem SquashedFS huckepack);
beim nachfolgenden flash-erase wird das jffs2 komplett gelöscht, und danach werden einige Dateien aus dem read-only-Teil
ins jffs2 kopiert
(/var_init nach /var).
Damit wir mit dem Image arbeiten können, müssen wir es uns zunächst auf den Rechner holen. Dazu kopieren wir zunächst den
Inhalt des SquashedFS und des cramfs in ein temporäres Verzeichnis.
Anschliessend packen wir beide Verzeichnisse in zwei Dateien,
image.tar sowie cramfs.tar.
~ > cd /var/tmp
~ > mkdir image
~ > mkdir cramfs
~ > mount -t squashfs -o ro /dev/mtdblock/5 image
~ > mount -t cramfs -o ro /dev/mtdblock/0 cramfs
/var/tmp > tar -cf image.tar ./image
/var/tmp > tar -cf cramfs.tar ./cramfs
/var/tmp > ls -ls
/var/tmp > ls -ls
0 drwxr-xr-x 1 501 245 16 Jan 1 01:00 cramfs
0 -rw-r--r-- 1 root root 1187328 Jan 1 01:14 cramfs.tar
0 srwxr-xr-x 1 root root 0 Jan 1 01:00 hotplug.socket
1 drwxr-xr-x 1 501 501 100 Nov 14 2003 image
0 -rw-r--r-- 1 root root 12249088 Jan 1 01:13 image.tar
0 drwxr-xr-x 1 root root 0 Jan 1 01:00 locks
0 -rw-r--r-- 1 root root 100 Jan 1 01:00 log.nmb
0 -rw-r--r-- 1 root root 0 Jan 1 01:00 log.smb
0 -rw-r--r-- 1 root root 0 Jan 1 01:00 smb.log
/var/tmp > exit
Connection closed by foreign host.
[tux@Linux dream]$
Die beiden tar-Dateien holen wir uns jetzt per ftp ins Verzeichnis $HOME/dream. Ihr könnt das mit dem Konqueror erledigen.
Startet zweimal den Konqueror und gebt in der einen Adressleiste
"file:$HOME/dream"
und in der anderen Adressleiste
"ftp://192.168.0.42"
ein. Dann könnt ihr die Dateien rüberziehen. Und da wir schon gerade am kopieren sind, können wir noch gleich das
komplette Unterverzeichnis /config aus /var/tuxbox nach $HOME/dream rüberkopieren. Dort sind nämlich eure Kanallisten und
anderen Settings vorhanden. Wenn wir alles auf dem Computer haben, entpacken wir zunächst einmal die tar-Datein, und
kopieren den Inhalt vom cramfs-Verzeichnis ins image-Verzeichnis.
[tux@Linux dream]$ ls -ls
insgesamt 13132
0 drwxr-xr-x 8 tux tux 92 Nov 9 08:08 cdk/
0 drwxr-xr-x 2 tux tux 6 Nov 16 07:04 cdkflash/
4 drwxr-xr-x 19 tux tux 4096 Nov 9 10:33 cdkroot/
4 drwxrwxr-x 5 tux tux 4096 Nov 16 06:50 config/
1160 -rw-rw-r-- 1 tux tux 1187328 Nov 16 06:49 cramfs.tar
11964 -rw-rw-r-- 1 tux tux 12249088 Nov 16 06:49 image.tar
[tux@Linux dream]$ tar -xf image.tar
[tux@Linux dream]$ tar -xf cramfs.tar
[tux@Linux dream]$ cp -a cramfs/* image
[tux@Linux dream]$ ls -ls
insgesamt 13136
0 drwxr-xr-x 8 tux tux 92 Nov 9 08:08 cdk/
0 drwxr-xr-x 2 tux tux 6 Nov 16 07:04 cdkflash/
4 drwxr-xr-x 19 tux tux 4096 Nov 9 10:33 cdkroot/
4 drwxrwxr-x 5 tux tux 4096 Nov 16 06:50 config/
0 drwxr-xr-x 3 tux tux 17 Jan 1 1970 cramfs/
1160 -rw-rw-r-- 1 tux tux 1187328 Nov 16 06:49 cramfs.tar
4 drwxr-xr-x 13 tux tux 4096 Nov 16 07:06 image/
11964 -rw-rw-r-- 1 tux tux 12249088 Nov 16 06:49 image.tar
[tux@Linux dream]$
So, alle relevanten Dateien sind jetzt auf unserem Computer. Wer jetzt meint, dass man jetzt nur noch enigma tauschen muss,
hat sich getäuscht. Es fängt gerade erst an, lustig zu werden
Abschnitt 2.
Zunächst einmal möchte ich mich herzlich bei t-hydron bedanken, der ein Paket zusammengestellt hat, was wir jetzt brauchen.
Also: mkdreamboxfs-0.01.tgz runterladen, nach $HOME/dream kopieren und mit "tar -xzf *.tgz" entpacken.
[tux@Linux dream]$ tar -xzf *.tgz
[tux@Linux dream]$ ls -ls
insgesamt 13236
0 drwxr-xr-x 8 tux tux 92 Nov 9 08:08 cdk/
0 drwxr-xr-x 2 tux tux 6 Nov 16 07:04 cdkflash/
4 drwxr-xr-x 19 tux tux 4096 Nov 9 10:33 cdkroot/
4 drwxrwxr-x 5 tux tux 4096 Nov 16 06:50 config/
0 drwxr-xr-x 3 tux tux 17 Jan 1 1970 cramfs/
1160 -rw-rw-r-- 1 tux tux 1187328 Nov 16 06:49 cramfs.tar
4 drwxr-xr-x 13 tux tux 4096 Nov 16 07:06 image/
11964 -rw-rw-r-- 1 tux tux 12249088 Nov 16 06:49 image.tar
0 drwxr-xr-x 5 tux tux 84 Sep 10 16:51 mkdreamboxfs/
100 -rw-rw-r-- 1 tux tux 101529 Nov 16 07:26 mkdreamboxfs-0.01.tgz
So, dann machen wir mal einen Probedurchlauf: wir komprimieren unser unveränderes image und flashen es auf die Box.
Dazu erstellen wir mit folgenden Befehlen in unserem dream-Verzeichnis die Datei root.cramfs:
[tux@Linux dream]$ cd mkdreamboxfs/bin
[tux@Linux bin]$ ./mkdreamboxfs $HOME/dream/image $HOME/dream/root.cramfs
Directory data: 164 bytes
Everything: 1140 kilobytes
Super block: 76 bytes
CRC: 472df4ce
warning: gids truncated to 8 bits (this may be a security concern)
12288+0 Records ein
12288+0 Records aus
Creating big endian filesystem on tmp_mkdreambox_3, block size 32768.
Big endian filesystem, data block size 32768, compressed data, compressed metadata
Filesystem size 4810.99 Kbytes (4.70 Mbytes)
42.90% of uncompressed filesystem size (11214.83 Kbytes)
Inode table size 6099 bytes (5.96 Kbytes)
43.33% of uncompressed inode table size (14076 bytes)
Directory table size 6241 bytes (6.09 Kbytes)
49.59% of uncompressed directory table size (12584 bytes)
Number of duplicate files found 57
Number of inodes 830
Number of files 563
Number of symbolic links 155
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 112
Number of uids 1
tux (501)
Number of gids 0
Done!
[tux@Linux bin]$ cd ..
[tux@Linux mkdreamboxfs]$ cd ..
[tux@Linux dream]$ ls -ls
insgesamt 19200
0 drwxr-xr-x 8 tux tux 92 Nov 9 08:08 cdk/
0 drwxr-xr-x 2 tux tux 6 Nov 16 07:04 cdkflash/
4 drwxr-xr-x 19 tux tux 4096 Nov 9 10:33 cdkroot/
4 drwxrwxr-x 5 tux tux 4096 Nov 16 06:50 config/
0 drwxr-xr-x 3 tux tux 17 Jan 1 1970 cramfs/
1160 -rw-rw-r-- 1 tux tux 1187328 Nov 16 06:49 cramfs.tar
4 drwxr-xr-x 13 tux tux 4096 Nov 16 07:06 image/
11964 -rw-rw-r-- 1 tux tux 12249088 Nov 16 06:49 image.tar
0 drwxr-xr-x 5 tux tux 84 Sep 10 16:51 mkdreamboxfs/
100 -rw-rw-r-- 1 tux tux 101529 Nov 16 07:26 mkdreamboxfs-0.01.tgz
5964 -rw-r--r-- 1 tux tux 6107136 Nov 16 07:37 root.cramfs
[tux@Linux dream]$
Die Datei
"root.cramfs"
kopieren wir jetzt nach /var/tmp auf der Dreambox. Wenn wir jetzt auf der Dreambox-Fernbedienung nacheinander
Dream-6-6-3-1 drücken, sollte ganz oben in der Liste "Manueller Upload" auftauchen. Den wählen wir an, bestätigen,
und das flashen beginnt. Beim Neubooten braucht ihr diesmal keinen Flash-erase machen, da es ja ein und das selbe Image
ist.
Hat's geklappt? Falls nein, dann könnt ihr immer noch mit DreamUp das alte Image wieder auf die Box bekommen.
Aber es ist sehr unwahrscheinlich, dass es nicht funktioniert.
Da es auf Dauer nicht allzu interessant ist, ein und dasselbe Image auszulesen und reinzuflashen, wollen wir mal ein paar
Dateien austauschen. Dazu gibt es im cvs gibt es einige Befehle, die uns viel Arbeit abnehmen. Einige dieser Befehle
lauten:
make flash-enigma
make flash-plugins
make flash-ftpd
make flash-lib
Damit werden die für ein Image wichtigen Dateien in das Verzeichnis $HOME/dream/cdkflash/root kopiert.
Zusätzlich werden aus den libraries nur die Teile übernommen, die die einzelnen Programme brauchen.
Gebt diese Befehle nacheinander in einer Konsole im Verzeichnis
$HOME/tuxbox-rel/cdk
ein und vergleicht anschliessend die lib-Verzeichnisse unter
$HOME/dream/cdkroot sowie
$HOME/dream/cdkflash/root.
Ihr werdet feststellen, dass sehr viel weniger Dateien im
cdkflash/root/lib
sind, die ausserdem auch noch kleiner sind - und da wir im flash nur wenig Platz haben, ist das schonmal nicht verkehrt.
Aber einige Dateien, die im dreambox-Image vorhanden sind, finden wir nicht im cvs - wie zum Beispiel die ganzen Programme,
die für das Formatieren/Überprüfen der Festplatte notwendig sind. Damit diese Programme funktionieren, müssen wir sie aus
dem Image-Verzeichnis umkopieren, bevor wir die Dateien komprimieren. Dieses erledigt ein script, welches ihr unten
herunterladen könnt.
Falls ihr einen Blick darauf werfen wollt - bitteschön.
#!/bin/sh
#
#Eigene Pfade eingeben
#
#Zunächst der Pfad, der im ./configure mit --prefix=... angegeben wurde
prefix=$HOME/dream
#prefix=/dbox2
#prefix=$HOME/dbox2
#
#Dann der Pfad, der im ./configure mit --with-CVSDIR=... angegeben wurde
CVSDIR=$HOME/tuxbox-rel
#CVSDIR=$HOME/tuxbox-cvs
#CVSDIR=$HOME/dreambox
#
#Nun noch der Pfad, in dem eine bereits ausgelesene Image-Filestruktur liegt
oldimage=$prefix/image
#
#
#
#Das, was jetzt kommt, braucht nicht mehr geändert zu werden.
#
#Überprüfen, ob alles richtig definiert wurde
if [ ! -d $prefix ]
then echo "Das Verzeichnis $prefix ist nicht vorhanden!"
exit 1
elif [ ! -d $oldimage ]
then echo "Zuerst ein Image nach $oldimage kopieren"
fi
#####################
#altes cdkflash löschen
#####################
flashprefix=$prefix/cdkflash
rm -rf $flashprefix
echo "Das neue cramfs wird erstellt in: "$flashprefix
#####################
#ftpd und dvbtools installieren
#####################
cd $CVSDIR/cdk && make flash-ftpd
make flash-dvb-tools
#####################
#root-Struktur vorbereiten
#####################
for i in vmlinuz lib/modules ; do rm -r $flashprefix/root/$i ; done
#####################
#kernel und plugins aus dem alten Image kopieren, alte libs löschen
#####################
cp -a $oldimage/root $flashprefix/root
cp -a $oldimage/lib $flashprefix/root
rm $flashprefix/root/lib/*so*
#####################
#enigma
#####################
make flash-enigma
#Config-Dateien aus ausgelesenem Image kopieren
#Defaulteinstellungen (Bouquets, registry)
cp -a $oldimage/var_init/tuxbox/config/enigma $flashprefix/root/var/tuxbox/config
mv $flashprefix/root/share/tuxbox/enigma/resources/keymappings.xml $flashprefix/root/var/tuxbox/config/enigma/resources
cp -a $oldimage/share/tuxbox/enigma/pictures/*mvi $flashprefix/root/share/tuxbox/enigma/pictures
#####################
#Dreambox-spezifische Dateien kopieren
#####################
#keymaps, locales
cp -a $oldimage/share/keymaps $flashprefix/root/share
cp -a $oldimage/share/locale/locales $flashprefix/root/share/locale
#group, hosts, passwd, smb.conf, ppp
cp -a $oldimage/var_init/etc $flashprefix/root/var
#Frequenzlisten, Scart-Konfiguration
cp -a $oldimage/share/tuxbox/cables.xml $flashprefix/root/share/tuxbox
cp -a $oldimage/share/tuxbox/satellites.xml $flashprefix/root/share/tuxbox
cp -a $oldimage/var_init/tuxbox/config/scart.conf $flashprefix/root/var/tuxbox/config
#Generelle Config-Dateien, die vom tuxbox-cvs abweichen
rm -r $flashprefix/root/etc/init.d $flashprefix/root/etc/thttpd.conf
for i in init.d ppp hostname inittab issue.net ld.so.cache ld.so.conf modules.conf profile rpc vsftpd.conf ; \
do cp -a $oldimage/etc/$i $flashprefix/root/etc ; done
cp -pa $oldimage/.version $flashprefix/root
#####################
#Plugins (Spiele, tuxtxt)
#####################
make flash-plugins
rm -rf $flashprefix/root/var/plugins
Jetzt werden die Dateien, die nicht im cvs sind, aus dem alten Image in unser zukünftiges Image kopiert...
#####################
#Nicht selbsterstellte Dateien mit den dazugehörigen libs (die nicht im cvs sind) umkopieren, damit das strippen klappt
#####################
#bin-Verzeichnis
for i in $oldimage/bin/* ; do
if [ -f $i -a ! -L $i ] ; then
file=`basename $i`
if [ ! -f $flashprefix/root/bin/$file ] ; then
cp -pa $i $flashprefix/root/bin/
fi
fi
done
rm $flashprefix/root/bin/tinylogin
#sbin-Verzeichnis
for i in $oldimage/sbin/* ; do
if [ -f $i -a ! -L $i ] ; then
file=`basename $i`
if [ ! -x $flashprefix/root/sbin/$file ] ; then
cp -pa $i $flashprefix/root/sbin/
for j in `find $oldimage/sbin/ -lname $file` ; do cp -a $j $flashprefix/root/sbin/ ; done
fi
fi
done
#lib-Verzeichnis nach $prefix/cdkroot/lib !!
for i in $oldimage/lib/lib*.so* ; do
if [ ! -L $i ] ; then
file=`basename ${i%%.*}`
if [ ! -f $prefix/cdkroot/lib/$file.*so ] ; then
cp -pa $oldimage/lib/$file* $prefix/cdkroot/lib/
fi
fi
done
#####################
#libs strippen
#####################
make flash-lib
find $flashprefix/root/lib/modules -name modules.* | xargs rm -f
#####################
#links-plugin - Symlink nach /hdd/links/links.so sowie Config-Verzeichnis erstellen
#####################
if [ -f $flashprefix/root/lib/tuxbox/plugins/links.so ] ; then
rm $flashprefix/root/lib/tuxbox/plugins/links.so
ln -sf /hdd/links/links.so $flashprefix/root/lib/tuxbox/plugins/links.so
mkdir $flashprefix/root/var/tuxbox/config/links
fi
#####################
#Falls das Image zu gross wird, können ein paar Sprachen raus
#####################
#for i in hr sv pl sr ar ; do
# rm -rf $flashprefix/root/share/locale/$i
# ln -sf /var/tuxbox/enigma/locale/$i $flashprefix/root/share/locale/$i
#done
#####################
#Dateien aus /bin, /lib, und /sbin sicherheitshalber nochmal strippen
#####################
$prefix/cdk/bin/powerpc-tuxbox-linux-gnu-strip --remove-section=.comment --remove-section=.note \
`find $flashprefix/root/bin/ -path "*bin/?*"` 2>/dev/null /bin/true
$prefix/cdk/bin/powerpc-tuxbox-linux-gnu-strip --remove-section=.comment --remove-section=.note --strip-unneeded \
`find $flashprefix/root/lib -name "*.so*"` 2>/dev/null /bin/true
$prefix/cdk/bin/powerpc-tuxbox-linux-gnu-strip --remove-section=.comment --remove-section=.note \
`find $flashprefix/root/sbin/ -path "*sbin/?*"` 2>/dev/null /bin/true
#####################
#bin/sbin/start-Dateien ausführbar machen
#####################
chmod 755 $flashprefix/root/bin/*
chmod 755 $flashprefix/root/etc/init.d/*
chmod 755 $flashprefix/root/sbin/*
#####################
#Image erstellen und skript beenden
#####################
mv $flashprefix/root/var $flashprefix/root/var_init
mkdir $flashprefix/root/var
mv $prefix/root.cramfs $prefix/root.bak
cd $HOME/dream/mkdreamboxfs/bin && ./mkdreamboxfs $flashprefix/root $prefix/root.cramfs
exit 0
Anbei noch das makeflash-Skript. Nach $HOME kopieren, enttaren und mit "chmod +x makeflash" ausführbar machen.
Viel Erfolg!
20031226 - An rel1.07.3 angepasst