Neutrino-HD Entwicklungsumgebung:OPKG-SystemInstall

Aus TuxBoxWIKI
Version vom 6. Juni 2011, 11:57 Uhr von Dbt (Diskussion | Beiträge) (Erstellen eines USB Sticks)
Wechseln zu: Navigation, Suche



Review-KandidatDieser Artikel befindet sich derzeit im Reviewprozess. Hilf mit, ihn zu verbessern! Falls du bei weiteren Artikeln helfen willst, findest du hier eine Auswahl offener Artikel.


Allgemein

OPKG ist ein einfaches Paketmanagment was seinen Ursprung in IPKG hat. Damit ist es möglich Softwarepakete zu installieren, wieder zu entfernen oder auch zu erneuern.

Voraussetzungen

Damit man dieses System benutzen kann, benötigt man ein fertig eingerichtetes Neutrino Buildsystem von Seife sowie einen USB Stick mit mindestens 512MB freiem Speicher und angepasste Bootargumente im UBoot der Box, damit diese vom USB Stick überhaupt booten kann.

Erstellen eines USB Sticks

Für das Präparieren eines USB Sticks kann man das fertige Script unter scripts/mkusbimage.sh benutzten.

Erstellen von OPKG Paketen

Alle Targets im Buildsystem mit denen die Libraries, Tools und Binaries erstellt werden, bauen auch automatisch die entsprechenden OPKG Pakete mit. Nur wenn man eigene Pakete erstellt, muss man sich um das erstellen der OPKG Pakete selbst kümmern.

Bereitstellen von OPKG Paketen


Stop hand.png An dieser Stelle muss noch Text rein.

Installation von OPKG Paketen


Stop hand.png An dieser Stelle muss noch Text rein.

Updaten von OPKG Paketen


Stop hand.png An dieser Stelle muss noch Text rein.

Beispiele für die Erzeugung minimaler Systeme mit lauffähigem Neutrino


Stop hand.png HINWEIS:

Das Buildsystem muss die Targets

  • preqs
  • crosstool und
  • bootstrap

erfolgreich durchlaufen haben! Siehe auch doc/README.first!

Filesysteme erstellen

Schritt 1

Erstellen eines minimalen Root Filesystems

Dazu dient der Aufruf des Targets minimal-systems-pkg. Dabei wird ein einfaches Basis Filesystem erstellt was auf einen USB Stick kopiert werden kann.

$ make minimal-system-pkgs
... # lauter Build Ausgaben
tar -czf /home/user/gitprojects/buildsystem-cs/build_tmp/min-root-coolstream.tar.gz \
                --owner=0 --group=0 -C /home/user/gitprojects/buildsystem-cs/build_tmp/install .

=====================================================================
A minimal system has been installed in build_tmp/install.
A tarball of this installation was created as
build_tmp/min-root-coolstream.tar.gz
Unpack this onto an empty root fs, which will enable you to install
further packages via 'opkg-cl' after configuring in /etc/opkg/.
List of installed packages:
        aaa_base        1-6
        busybox         1.18.4-2
        glibc-debug     2.8-1
        libncurses      5.6-1
        opkg            0.1.8-1
        procps          3.2.8-1

Have a lot of fun...

Die Ausgabe erfolgt nach build_tmp/install, dort befindet sich nun das einfache Filesystem.

Erstellen eines Filesystems mit Neutrino

Alternativ gibt es ein Target mit dem die obigen System Pakete gebaut werden und zusätzlich auch noch Neutrino. Hierfür ist es sinnvoll natürlich vor einem Build die Neutrinosourcen neu abzugleichen, sofern nicht schon zuvor geschehen.

$ make update-neutrino update-svn update-svn-target
$ make system-pkgs
...
Configuring libz.
Configuring libvorbisidec.
Configuring libcurl.
Configuring libOpenThreads.
Configuring libpng.
Configuring ffmpeg.
Configuring cs-drivers.
Configuring cs-libs.
Configuring libfreetype.
Configuring libid3tag.
Configuring libjpeg-turbo.
Configuring libmad.
Configuring libungif.
Configuring neutrino-hd.

Erstellen aller möglichen Systemtools

Will man ein Filesystem erstellen in dem die meisten Systemtools vorhanden sind bzw. zusätzlich als OPKG Paket gebaut werden dann benutzt man wiederum ein separates Target system-tools-all dafür. Dieses ist zusätzlich zum Target system-pkgs auszuführen.

$ make system-tools-all
$ make system-pkg

Vorbereiten eines USB Sticks

Der einfache Weg

Nachdem das Filesystem erfolgreich zusammen gestellt worden ist kann man ein Script nutzen welches im Buildsystem von seife enthalten ist um alle nötigen Daten auf einen USB Stick schreiben zu können.

Stop hand.png Achtung!

Das Script erstellt nur ein Image welches dann mit zusätzlichen Tools auf einen USB Stick geschrieben werden muss!

Um also ein USB Image zu erstellen ruft Ihr das Script scripts/mkusbimage.sh auf.

$ ./scripts/mkusbimage.sh 

Der Punkt am Anfang ist wichtig und richtig!

1+0 Datensätze ein
1+0 Datensätze aus
ein Byte kopiert, 2,158e-05 s, 46,3 kB/s
WARNING: You are not superuser.  Watch out for permissions.
WARNING: You are not superuser.  Watch out for permissions.
WARNING: You are not superuser.  Watch out for permissions.
add map loop0-usbstick-1 (252:0): 0 29296 linear /dev/loop0 1
add map loop0-usbstick-2 (252:1): 0 947265 linear /dev/loop0 29297
mkdosfs 3.0.9 (31 Jan 2010)
unable to get drive geometry, using default 255/63
mke2fs 1.41.12 (17-May-2010)
Dateisystem-Label=root-fs
OS-Typ: Linux
Blockgröße=1024 (log=0)
Fragmentgröße=1024 (log=0)
Stride=0 Blöcke, Stripebreite=0 Blöcke
118784 Inodes, 473632 Blöcke
23681 Blöcke (5.00%) reserviert für den Superuser
Erster Datenblock=1
Maximale Dateisystem-Blöcke=67633152
58 Blockgruppen
8192 Blöcke pro Gruppe, 8192 Fragmente pro Gruppe
2048 Inodes pro Gruppe
Superblock-Sicherungskopien gespeichert in den Blöcken: 
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Schreibe Inode-Tabellen: erledigt                        
Erstelle Journal (8192 Blöcke): erledigt
Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt

Das Dateisystem wird automatisch nach jeweils 20 Einhäng-Vorgängen bzw.
alle 180 Tage überprüft, je nachdem, was zuerst eintritt. Dies kann durch
tune2fs -c oder -i geändert werden.
del devmap : loop0-usbstick-2
del devmap : loop0-usbstick-1
loop deleted : /dev/loop0

the usb boot image is now in build_tmp/usb.img

-rw-r--r-- 1 user user 500000000  1. Jun 21:19 build_tmp/usb.img

Das fertige Image findet Ihr unter build_tmp/usb.img wie aus der letzten Zeile der Ausgaben zu erkennen ist.

Der händische Weg

Um den Inhalt von build_tmp/install auf den USB Stick kopieren zu können, muss dieser vorbereitet sein. Der Stick muss zwei Partitionen besitzen. Die erste Partition muss mit FAT16 formatiert sein und dient der Aufnahme der Kernelimages. Die zweite Partition muss mit ext3 formatiert sein. Den Inhalt des oben genannten Ordners kopiert man auf die zweite Partition (ext3) vom USB Stick.

Diese Vorgehensweise ist immer dann etwas praktischer, wenn man selektiv neue Dateien auf den Stick kopieren will und schon einmal diesen Schritt durchlaufen hat. Einen passenden Stick erhält man durch den folgenden Schritt.

Kopieren des Images auf einen Stick

Hier unterscheiden sich die Wege naturgemäß, je nach dem ob man dies mit einem Windows System oder einem Linux machen will. Wichtig ist das der Stick mindestens die gleiche Größe wie das Image besitzt. Im Standardfall ohne weitere Anpassungen erzeugt das Script von oben ein Image von 500MB. Somit sollte der Stick mindestens 512MB groß sein. Größere Sticks gehen natürlich auch, nur macht dies dann wegen der unvorteilhaften Nutzung des Flashspeichers nur bedingt Sinn.

Vorgehensweise unter Linux:

Hier gibt es mehrere Möglichkeiten. Zum einen mit dem klassischen dd Befehl. Um zu wissen auf welches Device das Image geschrieben werden muss prüft unter welchen Device der USB Stick im System eingebunden worden ist. Am einfachsten geht dies mittel dmesg | grep sd. Im folgenden wurde ein 512MB Stick eingesteckt und erkannt. Prüft gfs. noch ob der Stick nicht durch einen Autmount eingehangen wurden ist!

$ dmesg | grep sd
...
[ 1430.532086] usb 1-2: new high speed USB device number 8 using ehci_hcd
[ 1430.669241] scsi6 : usb-storage 1-2:1.0
[ 1431.696127] scsi 6:0:0:0: Direct-Access     SanDisk  Cruzer Mini      0.2  PQ: 0 ANSI: 2
[ 1431.699909] sd 6:0:0:0: Attached scsi generic sg3 type 0
[ 1431.699994] sd 6:0:0:0: [sdc] 1000944 512-byte logical blocks: (512 MB/488 MiB)
[ 1431.702007] sd 6:0:0:0: [sdc] Write Protect is off
[ 1431.702022] sd 6:0:0:0: [sdc] Mode Sense: 03 00 00 00
[ 1431.702032] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[ 1431.707669]  sdc: sdc1
[ 1431.710470] sd 6:0:0:0: [sdc] Assuming drive cache: write through
[ 1431.710479] sd 6:0:0:0: [sdc] Attached SCSI removable disk

Der Stick wurde unter /dev/sdc eingebunden. Dieses Device benötigen wir nun als Angabe des Zieles.

$ dd  if=build_tmp/usb.img of=/dev/sdc bs=1M

Vorteil dieser Methode ist das Ihr dies mit Userrechten ausführen könnt. Ein zweite Möglichkeit ist die Benutzung eines Pythonscriptes. Dies setzt natürlich die Installation von Python voraus!

Ladet Euch das Script image-writer von http://git.moblin.org in einen Ordner Eurer Wahl. Danach das Script ausführbar machen:

chmod +x imagewriter 

Dieses Script benötigt allerdings Superuser Berechtigungen zur Ausführung. Es fragt bei mehreren erkannten USB Devices nach auf welches geschrieben werden soll.

$ sudo ~/Downloads/image-writer /home/user/path/to/buildsystem/build_tmp/usb.img 

Multiple USB drives discovered:
1) /dev/sdb
2) /dev/sdc
 Select the USB drive to use (1-2): 1
Warning:  The USB drive (/dev/sdb) will be completely erased!
 Do you want to continue anyway? (y/n) y
Source:      /home/carsten/gitprojects/tijucas-buildsystem-cs/build_tmp/usb.img
Size:        476 MB
Destination: /dev/sdb
Writing image (Est. 1min 35sec)... 100%
122070+1 Datensätze ein
122070+1 Datensätze aus
500000000 Bytes (500 MB) kopiert, 167,698 s, 3,0 MB/s

The image was successfully written to the USB drive
You may now boot your mobile device with this USB drive

Vorgehensweise unter Windows:


Stop hand.png An dieser Stelle muss noch Text rein.

Client- Server Einrichtung

Die oben genannten Schritte bauen alle OPKG Pakete die möglich sind. Nicht alle Tools und AddOns werden auch im Filesystem abgelegt sondern müssen dann per OPKG nachinstalliert werden. Um diese OPKG Pakete selbst nachinstallieren zu können benötigt Ihr einen Webserver im Netz und eine entsprechende Konfiguration auf der STB.

Konfiguration OPKG Client auf der STB

Die Konfigurationsdatei für das OPKG Tools muss in /etc/opkg/ erstellt werden. Als Vorlage gibt es die Datei opkg.conf.example. Diese copiert Ihr einfach in opkg.conf.

cp /etc/opkg/opkg.conf.example /etc/opkg/opkg.conf

Nun diese Datei entsprechend Euren Gegebenheiten anpassen. Der Aufbau sollte selbsterklärend sein.

Konfiguration Webserver für OPKG

Eine spezielle Konfiguration des Webservers für OPKG ist nicht nötig, es reicht ein Verzeichnis innerhalb des Webcontents in dem die Pakete abgelegt werden können. Beachtet die nötigen Berechtigungen damit der http Server die Dateien lesen kann!