Plugins Workshop

Anleitungen, häufig gestellte Fragen und mehr ...
Gesperrt
Nachricht
Autor
Benutzeravatar
jmittelst
Co-Admin
Co-Admin
Beiträge: 11013
Registriert: So 16 Nov 2003, 13:42
Wohnort: Schildgen (Bergisch Gladbach)
Kontaktdaten:

Plugins Workshop

#1 Beitrag von jmittelst » Di 21 Feb 2006, 9:06

Hier soll es um den Umgang vor allem mit vorhandenen Plugins gehen. Das Sortieren und verstecken steht im Vordergrund.

Plugins für Neutrino-Images bestehen aus mind. 2 Dateien. Einmal die Config-Datei (.cfg) und die Binärdatei (.so). Die Config-Datei enthält nur eine Beschreibung des Plugins und sieht normalerweise so aus:

Code: Alles auswählen

name=Outdoor
desc=Capture in LCD
depend=libfx2.so
type=2
needfb=0
needrc=1
needlcd=1
Interessant ist hier Type – damit wird die Art des Plugins definiert.
Der Wert 1 kennzeichnet Spiele, die dann unter Dbox-Taste – Spiele zu finden sind.
Der Wert 2 kennzeichnet Plugins, die dann im Menü der blauen Taste zu finden sind.
Der Wert 3 kennzeichnet Skripte, die dann unter Dbox-Taste – Skripte (erscheint dann unter dem Bildbetrachter, wenn Skripte vorhanden sind) zu finden sind.

Name ist der Name des Plugins, der so in der Auswahl angezeigt wird.
Desc ist die Beschreibung, die im Spiele-Menü und dem Skripte-Menü angezeigt wird.

Das sind die 3 Baustellen, die in diesem Workshop zur individuellen Anpassung im Image interessieren sollten. Ziel ist es u.a. ein Skript zu schreiben, mit dem man sein Image an die persönlichen Bedürfnisse anpassen kann. Aber auch den Einbau von neuen Skripten und Plugins und der Aufruf von Skripten oder Plugins durch das Flexmenü.

Speicherort von Plugins ist /lib/tuxbox/plugins/ - womit wir bei Cramfs- oder Squash-Images, wie Yadi oder JtG dann schon ein kleines Problem hätten, da der Ordner im schreibgeschütztem Bereich liegt und daher individuelle Anpassungen nicht möglich sind.
In modernen Images gibt es dafür aber 2 Ausweichpfade: /var/tuxbox/plugins/ im beschreibbaren Jffs oder auch /mnt/plugins/, einem leeren Ordner, den man als Mountpunkt für eine NFS-, Cifs- oder FTPFS-Freigabe verwenden kann. Das schafft Platz für viele Plugins und ermöglicht, mehrere Boxen mit einem gepflegten Plugin-Verzeichnis aktuell und für die Bedienung identisch zu halten.

Um nun ein Plugin, das in /lib/tuxbox/plugins/ liegt anzupassen, ist es zunächst nötig, dieses nach /var/tuxbox/plugins/ oder /mnt/plugins/ zu kopieren.

In einem Skript kann das dann so aussehen:

Code: Alles auswählen

cp /lib/tuxbox/plugins/outdoor.so /var/tuxbox/plugins/outdoor.so
chmod 744 /var/tuxbox/plugins/outdoor.so
cp /lib/tuxbox/plugins/outdoor.cfg /var/tuxbox/plugins/outdoor.cfg
Der Chmod-Befehl ist nötig, um die Binärdatei ausführbar zu machen. Das gilt für alle Binärdateien und Skripte. Die Config-Dateien müssen keinen höheren Chmod-Wert bekommen, für sie genügt der Default-Wert 644.
Allerdings muß man die Binärdatei unter Linux zum funktionellen Gebrauch nicht mit dem Copy-Befehl (cp) kopieren, sondern, es reicht aus, einen Symlink zu setzen (mit ln –s), also besser so, um Speicherplatz zu sparen und nicht später ein Plugin aus einem alten Image zu benutzen, sondern immer auf das aktuelle zu verweisen:

Code: Alles auswählen

ln -s /lib/tuxbox/plugins/outdoor.so /var/tuxbox/plugins/outdoor.so
cp /lib/tuxbox/plugins/outdoor.cfg /var/tuxbox/plugins/outdoor.cfg
Nun kann man diesem Plugin z.B. einen neuen Namen geben. Dazu könnte man z.B. das Config-File in einem Editor öffnen und den Namen per Hand anpassen.
Linux und auch die meisten Neutrino-Images kennen aber auch den Befehl Sed. Damit kann man solche Anpassungen auch in einem Skript erledigen lassen. Sagen wir also beispielsweise, das der Name von Outdoor besser in LCD-TV geändert werden soll, sieht das Skript so aus:

Code: Alles auswählen

ln -s /lib/tuxbox/plugins/outdoor.so /var/tuxbox/plugins/outdoor.so
rm /tmp/outdoor.cfg.alt; cp /lib/tuxbox/plugins/outdoor.cfg /tmp/outdoor.cfg.alt; rm /var/tuxbox/plugins/outdoor.cfg  
sed  -e "s/name=.*/name=LCD-TV/g" /tmp/outdoor.cfg.alt > /var/tuxbox/plugins/outdoor.cfg
rm /tmp/outdoor.cfg.alt
Hier wird also der Link der Binärdatei erzeugt, dann in /tmp/ eine ggf. vorhandene Datei gelöscht (rm steht für remove = entfernen), die Datei aus /lib dann nach /tmp kopiert und eine ggf. vorhandene Config-Datei in /var entfernt.
Sed sucht dann nach der Zeile mit dem Eintrag „name=“ und ersetzt diese Zeile dann durch „name=LCD-TV“.

Mit Sed lässt sich so also die gesamte Config-Datei in einem Skript nach belieben automatisch bearbeiten.

So lassen sich z.B. auch Plugins verstecken. Um Outdoor nicht mehr anzuzeigen im Menü der blauen Taste, müsste man Type auf 0 (null) setzen.
Im Skript dann also:

Code: Alles auswählen

rm /tmp/outdoor.cfg.alt; cp /lib/tuxbox/plugins/outdoor.cfg /tmp/outdoor.cfg.alt; rm /var/tuxbox/plugins/outdoor.cfg  
sed  -e "s/type=.*/type=0/g" /tmp/outdoor.cfg.alt > /var/tuxbox/plugins/outdoor.cfg
rm /tmp/outdoor.cfg.alt
Damit könnte man das Plugin aber nicht mehr nutzen. Will man es nur aus dem Menü der blauen Taste entfernen, aber trotzdem gelegentlich benutzen können, müsste man zunächst auch die Binärdatei verlinken.

Code: Alles auswählen

rm /var/tuxbox/plugins/outdoor.so
ln -s /lib/tuxbox/plugins/outdoor.so /var/tuxbox/plugins/outdoor.so
rm /tmp/outdoor.cfg.alt; cp /lib/tuxbox/plugins/outdoor.cfg /tmp/outdoor.cfg.alt; rm /var/tuxbox/plugins/outdoor.cfg  
sed  -e "s/type=.*/type=0/g" /tmp/outdoor.cfg.alt > /var/tuxbox/plugins/outdoor.cfg
rm /tmp/outdoor.cfg.alt
Der Löschbefehl zu Anfang ist optional, hilft aber einen ggf. falschen Link oder eine alte Binärdatei zu entfernen.
Zum Aufruf des Plugins könnte man jetzt das Flexmenü nutzen.
Der entsprechende Eintrag in der shellexec.conf würde dann so aussehen:

Code: Alles auswählen

ACTION=Outdoor,wget -O /dev/null http://localhost/cgi-bin/startPlugin?name=outdoor.cfg
Nur das Webinterface kann Plugins auch dann aufrufen, wenn sie type=0, also versteckt sind.
Möglich wäre auch, das Plugin mit einem Skript aus den Skripte-Menü zu starten.
Der Name der Skriptdatei muß nun aber vom eigentlichen Abweichen, sonst müssten ja 2 Config-Dateien mit einem Dateinamen in einem Ordner liegen.
Also könnte man z.B. eine outdoor_s.cfg und outdoor_s.sh erstellen.
Inhalt der Config-Datei:

Code: Alles auswählen

name=Outdoor
desc=Capture in LCD
type=0
needfb=0
needrc=0
needlcd=0
Inhalt der Skriptdatei:

Code: Alles auswählen

#! /bin/sh
wget -O /dev/null http://localhost/cgi-bin/startPlugin?name=outdoor.cfg
Man kann das Verstecken auch zum Sortieren nutzen. Ein sortieren ist über den Dateinamen möglich. Die sinnvolle Sortierung ist im JtG-Image z.B. schon bei dem Tuxtxt-Plugin aufgegriffen, das liegt unter dem Dateinamen 01_tuxtxt.so und 01_tuxtxt.cfg in /lib/tuxbox/plugins. Um z.B. Tuxnews auf die Position 2 zu schieben, muss nun erst das Plugin unsichtbar gemacht werden und dann eine Verlinkung mit dem neuen Dateinamen angelegt werden.

Code: Alles auswählen

rm /tmp/tuxnews.cfg.alt; cp /lib/tuxbox/plugins/tuxnews.cfg /tmp/tuxnews.cfg.alt; rm /var/tuxbox/plugins/tuxnews.cfg  
sed  -e "s/type=.*/type=0/g" /tmp/tuxnews.cfg.alt > /var/tuxbox/plugins/tuxnews.cfg
rm /tmp/tuxnews.cfg.alt
ln -s /lib/tuxbox/plugins/tuxnews.so /var/tuxbox/plugins/02_tuxnews.so
ln -s /lib/tuxbox/plugins/tuxnews.cfg /var/tuxbox/plugins/02_tuxnews.cfg
Natürlich könnte man nun auch noch einen einprägsameren Namen für das Plugin verwenden, dann muss allerdings die Config-Datei kopiert, nicht verlinkt, und angepasst werden.

Code: Alles auswählen

rm /tmp/tuxnews.cfg.alt; cp /lib/tuxbox/plugins/tuxnews.cfg /tmp/tuxnews.cfg.alt; rm /var/tuxbox/plugins/tuxnews.cfg  
sed  -e "s/type=.*/type=0/g" /tmp/tuxnews.cfg.alt > /var/tuxbox/plugins/tuxnews.cfg
rm /tmp/tuxnews.cfg.alt
ln -s /lib/tuxbox/plugins/tuxnews.so /var/tuxbox/plugins/02_tuxnews.so
rm /tmp/02_tuxnews.cfg.alt; cp /lib/tuxbox/plugins/tuxnews.cfg /tmp/02_tuxnews.cfg.alt; rm /var/tuxbox/plugins/02_tuxnews.cfg  
sed  -e "s/name=.*/name=Laufschrift News/g" /tmp/02_tuxnews.cfg.alt > /var/tuxbox/plugins/02_tuxnews.cfg
rm /tmp/02_tuxnews.cfg.alt
Bislang war von Plugins die Rede, die aus 2 Dateien, der Config- und Binärdatei, die Rede.

Recht häufig sind auch die Plugins, die eigentlich keine sind. Skripte, die durch Shellstarter gestartet werden. Das ist eine Möglichkeit, Skripte auf die blaue Taste zu bekommen. Sehr gute Beispiele sind z.B. die Sport-Liga-Skripte von PauleFoul. Als Beispiel nehmen wir mal das BuliTore 1.3.
Das besteht aus den beiden Skriptstarter-Dateien und dem eigentlichen Skript (und einer Wav-Datei zur Soundausgabe). Den Shellstarter kann man sogar an eigene Skripts anpassen, indem man ihn in einem Hexeditor läd und den Pfad an eine Skript-Datei anpasst. Diese muss dann nicht einmal eine Dateiendung haben.

Aber man kann solche Plugins auch sehr leicht ins Skripte-Menü bringen. Einfach das Skript, was meist ohne Dateiendung nach /var/plugins kommen soll, nach /var/tuxbox/plugins kopieren statt nach /var/plugins. Die Dateiendung .sh anhängen und die Config-Datei auch nach /var/tuxbox/plugins kopieren und Type auf 3 setzen.
So, das dann in /var/tuxbox/plugins die Dateien bulitore.cfg und bulitore.sh (mit chmod 755 versehen) liegen.

Auch eine Verwendung des Flexmenüs mit solchen Plugins bietet sich an, da man dann nicht einmal die Config-Datei benötigt. Es reicht aus, die eigentliche Skript-Datei und die hier für die Soundausgabe benötigte Wav-Datei ins Image zu kopieren und das Skript (chmod 755 nicht vergessen!) über die shellexec.conf aufrufen zu lassen:

Code: Alles auswählen

ACTION=Bundesliga-Tore,/var/plugins/bulitore
Obwohl das Flexmenü selbst einigen Platz in /var einnimmt, kann man mit seiner Hilfe viel Platz in /var gewinnen, wenn man viele solcher Shellstarter-Plugins benutzt. Zumal man dort eine recht gute Menüstruktur erarbeiten kann und diese nach eigenen Vorlieben und Bedürfnissen so definieren kann, wie man es braucht bzw. haben will. Auch für viele Skripte hat man schnell eine Platzersparnis raus, weil die Config-Dateien mit der Zeit auch einiges an Platz verbrauchen.

Skripte, Config-Dateien und die Shellexec.conf müssen im Linux-Format behandelt werden. Windows liefert keinen brauchbaren Editor mit. Ich benutze den Crimson Editor und bin mit dem sehr zufrieden. Der ist Freeware und ich habe mit dem nie Probleme gehabt. Auch ist darauf zu achten, das Dateien, die per FTP auf die Box kopiert werden, immer im Binär-Mode arbeiten. Eine Übertragung im ASII-Mode würde die Files unbrauchbar machen. Ich benutze dafür SmartFTP mit dem ich im Zusammenhang mit Neutrino auch noch nie Probleme hatte.

Links dazu:
http://wiki.tuxbox.org/Neutrino:Skripte
http://wiki.tuxbox.org/Plugins
http://www.jackthegrabber.de/viewtopic.php?t=7663
http://www.crimsoneditor.com/
http://www.smartftp.com/

cu
Jens
VU+ Ultimo 4k
VU+ Duo²
VU+ Solo²


[Zitat]Es gibt 2 Dinge, die unendlich sind. Das Weltall und die Dummheit der Menschen. Beim Weltall bin ich mir aber nicht so sicher...[/Zitat]
Vorsicht! Lesen kann zu Bildung führen! Links, Suchfunktion, Wikis und Google deshalb nur mit Bedacht nutzen!

Gesperrt