[HowTo] Update-Pakete selbst erstellen
Verfasst: Di 12. Apr 2016, 14:06
Um selbst Update-Pakete zu erstellen, die dann im Online-Update erscheinen, muss man erstmal wissen, dass diese bin-Dateien nichts anderes, als gepackte tar-Archive sind.
Jedoch müssen diese zwingend eine bestimmte Grund-Struktur enthalten:
* Das Unterverzeichnis temp_inst/ctrl, welches die Scripte preinstall.sh und postinstall.sh enthalten kann.
Sind diese Scripte vorhanden, wird preinstall.sh vor dem Installieren des Paketes ausgeführt und postinstall.sh danach. So lassen sich zum Beispiel Daemons zuerst stoppen und dann wieder starten.
* Das Unterverzeichnis temp_inst/inst, welches die zu installierenden Dateien enthält. Hier muss bereits die nötige Verzeichnisstruktur des Ziels mit angegeben werden.
Erstellen wir nun also mal ein solches tar-Archiv. Beispielhaft wird es die Senderlisten enthalten.
Zuerst erstellen wir die nötige Grund-Struktur. Wir arbeiten in /tmp/package:
Dann erzeugen wir die (für dieses Beispiel unnötigen) Scripte. Diese mussen natürlich ausführbar sein:
Nun legen wir die Ziel-Struktur an und kopieren die Senderlisten in das inst-Verzeichnis:
Wir können jetzt das tar-Archiv erstellen:
Nun haben wir im Verzeichnis /tmp/package eine Datei namens chanlists.bin liegen, die das Unterverzeichnis temp_inst enthält.
Diese Datei muss nun noch im Online-Update einer anderen Box erscheinen.
Dazu ist eine einfache Textdatei nötig, die jedoch auch wieder einer bestimmten Struktur folgen muss. Der Dateiname ist irrelevant. Wir nennen sie hier internal_update.txt.
Wir legen diese Datei an:
Zur Struktur dieser Datei:
internal_update.txt enthält für jedes Update-Package eine Zeile mit folgendem Aufbau:
<url> <typ><version><timestamp> <md5sum> <name>
url: Vollständiger URL zur Datei. Wenn die Box mit der IP 192.168.178.20 im Netzwerk erreichbar ist, also:
typ: Bezeichnet den Dateityp (einstellig); möglich sind folgende Angaben:
version: Bezeichnet die Version (dreistellig) für die dieses Package gedacht ist. Wenn die Senderlisten also für ein NG-Image v2.7 erstellt wurden muss folgendes angegeben werden:
Eine strenge Überprüfung dieser Versionsnummer findet jedoch nicht statt.
timestamp: Bezeichnet den Zeitstempel des Packages (zwölfstellig). Den erhält man mit:
md5sum: Bezeichnet die md5-Prüfsumme des Packages. Diese erhält man mit:
name: Eine kurze Beschreibung unseres Packages:
Nun setzen wir die Zeile also zusammen und schreiben sie in internal_update.txt:
Jetzt ist es noch nötig, die update.urls zu erweitern, sodass unsere Senderlisten auch im Online-Update erscheinen:
Voilà. 
Ich hoffe, nun etwas Licht in das Dunkel des Online-Updates gebracht zu haben. Wenn noch Fragen offen sind, so stellt sie hier. Viel Spaß.
Jedoch müssen diese zwingend eine bestimmte Grund-Struktur enthalten:
* Das Unterverzeichnis temp_inst/ctrl, welches die Scripte preinstall.sh und postinstall.sh enthalten kann.
Sind diese Scripte vorhanden, wird preinstall.sh vor dem Installieren des Paketes ausgeführt und postinstall.sh danach. So lassen sich zum Beispiel Daemons zuerst stoppen und dann wieder starten.
* Das Unterverzeichnis temp_inst/inst, welches die zu installierenden Dateien enthält. Hier muss bereits die nötige Verzeichnisstruktur des Ziels mit angegeben werden.
Erstellen wir nun also mal ein solches tar-Archiv. Beispielhaft wird es die Senderlisten enthalten.
Zuerst erstellen wir die nötige Grund-Struktur. Wir arbeiten in /tmp/package:
Code: Alles auswählen
cd /tmp
mkdir package
cd package
mkdir temp_inst
cd temp_inst
mkdir ctrl
mkdir inst
Code: Alles auswählen
cd ctrl
echo -e "#!/bin/sh\n#" > preinstall.sh
chmod +x preinstall.sh
echo -e "#!/bin/sh\n#" > postinstall.sh
chmod +x postinstall.sh
cd ..
Code: Alles auswählen
cd inst
mkdir -p var/tuxbox/config/zapit
cp /var/tuxbox/config/zapit/services.xml var/tuxbox/config/zapit/
cp /var/tuxbox/config/zapit/bouquets.xml var/tuxbox/config/zapit/
cp /var/tuxbox/config/zapit/ubouquets.xml var/tuxbox/config/zapit/
cd ..
Code: Alles auswählen
cd /tmp/package
tar -czf chanlists.bin temp_inst
Diese Datei muss nun noch im Online-Update einer anderen Box erscheinen.
Dazu ist eine einfache Textdatei nötig, die jedoch auch wieder einer bestimmten Struktur folgen muss. Der Dateiname ist irrelevant. Wir nennen sie hier internal_update.txt.
Wir legen diese Datei an:
Code: Alles auswählen
touch /tmp/package/internal_update.txt
internal_update.txt enthält für jedes Update-Package eine Zeile mit folgendem Aufbau:
<url> <typ><version><timestamp> <md5sum> <name>
url: Vollständiger URL zur Datei. Wenn die Box mit der IP 192.168.178.20 im Netzwerk erreichbar ist, also:
Code: Alles auswählen
http://192.168.178.20/tmp/packages/chanlists.bin
Code: Alles auswählen
0 = "Release"
1 = "Beta"
2 = "Internal"
L = "Locale"
S = "Settings"
A = "Addon"
T = "Text"
Code: Alles auswählen
270
timestamp: Bezeichnet den Zeitstempel des Packages (zwölfstellig). Den erhält man mit:
Code: Alles auswählen
[zee²] /tmp/package # date +%Y%m%d%H%M -r chanlists.bin
201410241224
Code: Alles auswählen
[zee²] /tmp/package # md5sum chanlists.bin
093ea47f78f4e182edb996dda5b767a5 chanlists.bin
Code: Alles auswählen
Senderlisten von 192.1678.178.20
Code: Alles auswählen
echo "http://192.168.178.20/tmp/packages/chanlists.bin S270201410241224 093ea47f78f4e182edb996dda5b767a5 Senderlisten von 192.1678.178.20" >> /tmp/package/internal_update.txt
Code: Alles auswählen
echo "http://192.168.178.20/tmp/package/internal_update.txt" >> /var/etc/update.urls
Ich hoffe, nun etwas Licht in das Dunkel des Online-Updates gebracht zu haben. Wenn noch Fragen offen sind, so stellt sie hier. Viel Spaß.