Metainformationen zur Seite
Wie findet man das eigene Installationsverzeichnis heraus?
Dieser Artikel bezieht sich auf den alten Loxberry 0.2.3. Ab LoxBerry 1.0 gibt es elegantere und einfacherere Möglichkeiten das eigene Installationsverzeichnis herauszufinden. Siehe dazu Bash - Supporting scripts for your plugin development
Den Namen des Installationsverzeichnisses legt man in der Datei plugin.cfg
fest. Allerdings ändert der LoxBerry bei der Plugin-Installation diese Vorgabe ab, sofern bereits ein weiteres Plugin den selben Verzeichnisnamen verwendet. Es ist somit sehr wichtig, dass man den Verzeichisnamen nicht hart in die eigenen Skripte kodiert.
Es gibt mehrere Möglichkeiten, den kompletten Pfad zum eigenen Script zur Laufzeit zu bestimmen.
1. Variante (in Perl-Scripts)
Wird das Modul LoxBerry::System eingebunden, wird das Plugin-Verzeichnis und sämtliche Pfade direkt als Variable bereitgestellt.
Siehe Perl LoxBerry SDK Dokumentation und Perl-Modul LoxBerry::System
2. Variante:
In den meisten Programmiersprachen hat man die Möglichkeit den Pfad zum eigenen Script auszulesen. Aus diesem kompletten Pfad kann man den Verzeichnisnamen extrahieren. Sollte man das Skript über einen symbolischen Link aufrufen, muss man sicherstellen, dass trotzdem der korrekte Pfad zum Skript und nicht der zum symbolischen Link ausgelesen wird. Das folgende Beispiel in der Programmiersprache PERL funktioniert auch bei Aufruf über einen symbolischen Link:
PERL
use Cwd 'abs_path'; # Figure out in which subfolder we are installed $psubfolder = abs_path($0); $psubfolder =~ s/(.*)\/(.*)\/(.*)$/$2/g;
PHP
# Figure out in which subfolder we are installed $path = $_SERVER["SCRIPT_FILENAME"]; $folder_array = explode('/', $path); $folder =($folder_array[6]);
3. Variante:
/opt/loxberry/data/system/plugindatabase.dat Quelle erweitern
# # Databse for installed Plugins # # 0: MD5 Checksum of AUTHORNAME,AUTHOREMAIL,NAME,FOLDER (without commas!) from plugin.cfg # 1: AUTHOR NAME # 2: AUTHOR EMAIL # 3: VERSION # 4: NAME # 5: FOLDER # 6: TITLE # 7: INTERFACE # # Delimiter: | (Pipe) # a4364c8724b61109b12ce6ac5d8fb215|Christian Woerstenfeld|git@loxberry.woerstenfeld.de|0.9|BLE-Scanner|ble_scanner|BLE-Scanner|1.0 56247c77ac0d3f9c35b14f52d7955f87|Christian Fenzl|christiantf@gmx.at|0.1.5|squeezelite|squeezelite|LoxBerry SqueezeLite P...|1.0 f21873f370693661863909d413dbdc50|M.Schlenstedt und C.Woerstenfeld|git@loxberry.woerstenfeld.de|0.13|miniserverbackup|miniserverbackup|Miniserver Backup|1.0 46ff6e064056e9f364be2b9aa8f691c0|Michael Schlenstedt|Michael@loxberry.de|3.0|wu4lox|wu4lox|Wunderground4Loxone|1.0
4. Variante:
Während der Installation wird den Installations-Bash-Skripten der verwendete Verzeichnisname als Option mit übergeben. Dieses kann man nutzen, um eine Dummy-Zeichenkette in den eigenen Skripten durch den tatsächlichen Verzeichnisnamen zu ersetzen. Das kann z. B. im Skript postinstall.sh erfolgen. Im folgenden Beispiel wird die Zeichenkette REPLACEBYFOLDERNAME mit sed im entsprechenden CGI-Skript durch den tatsächlichen Verzeichnisnamen ersetzt.
postinstall.sh
# Command line options ARGV3=$3 # Third argument is Plugin installation folder ARGV5=$5 # Fifth argument is Base folder of LoxBerry # Replace real subfolder /bin/sed -i "s:REPLACEBYSUBFOLDER:ARGV3:g" $ARGV5/webfrontend/cgi/plugins/$ARGV3/index.cgi
5. Variante (für Daemon)
Da der Daemon bei der Installation in den Pluginnamen umbenannt wird, ist der Daemonname gleich dem Pluginnamen/verzeichnis:
pluginname=$(basename $0 .sh)