update
update | |
---|---|
Zweck / Funktion | |
Befehl zur Aktualisierung der FHEM-Installation | |
Allgemein | |
Typ | Befehl |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Sonstiges |
Modulname | 98_update.pm |
Ersteller | rudolfkoenig (Forum / Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
update ist ein Befehl zur Aktualisierung der FHEM-Installation direkt über das FHEM Webfrontend. Von den Entwicklern bis zu einem bestimmten Zeitpunkt freigegebene Änderungen sind jeweils morgens ab 8:00 Uhr über die Update Funktion verfügbar. Änderungen, die später freigegeben werden, werden dementsprechend erst am nächsten Tag verfügbar.
Syntax
update [<fileName>|all|check|force] [http://.../controlfile]
oder
update [add source|delete source|list|reset]
Hinweise:
- FHEM sichert mit den Standardeinstellungen während des Updates "nur" die aktualisierten Modul(Installations-)dateien und bei Standardinstallationen (Beitrag) ab Updatestand 29.10.2016 die Konfiguration und fhem.save, aber beispielsweise nicht Plots oder FileLogs. Soll vor dem Update ein vollständiges Backup von FHEM erstellt werden, muss das mit dem Attribut
backup_before_update
eingeschaltet werden. - Lesen Sie aufmerksam die nach dem Update auf dem Monitor erscheinenden Meldungen zu Neuerungen und Änderungen.
- Nach einem Update ist immer ein shutdown restart erforderlich.
- geänderte und neu eingecheckte Module werden grundsätzlich erst am Folgetag ab ca. 8.00 Uhr durch den Update-Befehl verteilt.
- Mit dem Befehl version lässt sich die Version einzelner oder aller benutzten Module bestimmen.
Parameter
Details zu Parametern des update Befehls:
Standardaufrufe
update
Die ganze FHEM-Installation wird auf die neueste Version gebracht. Vorhandene Module werden akualisiert und neue Module installiert.
update check
Es werden alle Module aufgelistet, von denen eine neuere als die bereits installierte Version verfügbar ist. Es wird nicht installiert.
update force
Das Update wird erzwungen (falls es beim regulären update Probleme geben sollte). Dieser Befehl ist nur mit Bedacht und ausschließlich im Notfall einzusetzen. Sollte ein reproduzierbares Problem existieren, dies bitte im FHEM-Forum berichten, damit dem nachgegangen werden kann.
update <Dateiname>
Mit z.B. update 02_HTTPSRV.pm
wird nur von der Datei 02_HTTPSRV.pm eine neue Version installiert. Alle anderen FHEM-Dateien werden nicht angetastet.
update all
Alle offiziellen Module von FHEM sind in einem gemeinsamen Repository gespeichert. Nur diese Module werden in der Standardeinstellung durch den update-Befehl mit den bisher aufgeführten Standardaufrufen aktualisiert bzw. installiert. Einige Entwickler stellen ihre Module jedoch aus verschiedensten Gründen nicht im gemeinsamen Repository zur Verfügung, sondern nutzen eigene, separate Repositorys. Diese sogenannten "Thirdparty-Module" (auch bezeichnet als inoffizielle Module) können ebenfalls über update installiert und aktualisiert werden, wenn der Entwickler eine sogenannte Kontrolldatei (controlfile) in seinem Repository zur Verfügung stellt.
Zur Installation bzw. Update jedes einzelnen Thirdparty-Moduls ist nachfolgender Befehl aufzurufen (Webadresse und Kontrolldateiname sind modulabhängig passend zu ersetzen):
update all http://thirdparty.com/controls_funnymodule.txt
Die in den vorherigen Abschnitten erläuterten Standardaufruf (bis auf update
) können durch Ergänzung um Webadresse und Kontrolldateiname (http://.../controlfile beim Befehls-Aufruf für das Update von einzelnen Thirdparty-Modulen genutzt werden.
Repository-Verwaltung
In den Standardeinstellungen von FHEM ist für jedes einzelne Repository ein separater Aufruf der Standardaufrufe zur Aktualiserung/Installation notwendig. Zur Vereinfachung des Update-Prozesses hat der update-Befehl eine eingebaute Repository-Verwaltung. Mittels der Repository-Verwaltung lassen sich die Standardaufrufe so beeinflußen, dass mit einem einzigen Aufruf sowohl die Module aus dem FHEM-Repository als auch aus verschiedenen Thirdparty-Repositorys beim Update berücksichtigt werden.
update add
Fügt ein zusätzliches Repository zur vereinfachten Nutzung über die Standardaufrufe hinzu. Ein Aufruf von update <Dateiname>|all|check|force
berücksichtigt dann automatisch neben dem FHEM-eigenen Repository auch das hinzugefügte "Thirdparty-Repository".
Nach dem Hinzufügen durch beispielsweise update add http://thirdparty.com/controls_funnymodule.txt
entfällt somit der manuelle Aufruf der Form update all http://thirdparty.com/controls_funnymodule.txt
zur Aktualiserung. Er kann aber weiterhin genutzt werden, um ausschließlich für ein bestimmtes Repository ein Update zu erhalten und und nicht für alle.
Die Liste der Repositorys wird in der Verwaltungsdatei FHEM/controls.txt gespeichert.
update delete
Entfernt eine Repository aus der Verwaltungsdatei.
update list
Listet alle in der Verwaltungsdatei enthaltenen Repositorys auf.
update reset
Entfernt alle Fremd-Repositorys aus der Verwaltungsdatei. Nur das eigene Repository von FHEM wird noch von den Standardparametern berücksichtigt.
Syntax controlfile
Das Controlfile, welches durch thirdparty Module angelegt wird unterliegt einer Syntax. Im Controlfile steht in jeder Zeile ein Dateiname und ein Befehl, was damit passieren soll. Ein Zeilenumbruch wird durch ein \n dargestellt
Es können zwei Befehle verwendet werden UPD zum Aktualisieren einer Datei, MOV zum Verschieben einer Datei.
Aufbau der Befehle:
Zum Aktualisieren einer Datei. Die Aktualisierung wird nur ausgeführt, wenn das Datum von der lokalen Datei unterschiedlich ist und die Dateigröße der heruntergeladenen Datei übereinstimmt:
UPD <Datum> <Dateigröße> <Datei inkl. Pfad>
Zum Verschieben oder umbenennen einer Datei.
MOV <quelldatei inkl. Pfad> <Zieldatei inkl. Pfad>
Dateien lassen sich mit dem MOV Befehl auch in einen speziellen Ordner "unused" verschieben. Ein vollständiges Löschen der Datei ist nicht möglich:
MOV <quelldatei inkl. Pfad> unused
Bei Verwendung des Befehls UPD ist wichtig, dass das Datum inklusive Uhrzeit übergeben wird.
my $date = POSIX::strftime("%Y-%d-%m", localtime( $fi->{mtime} ));
my $time = POSIX::strftime("%H:%M:%S", localtime( $fi->{mtime} ));
Erzeugt 2016_14_10_23:50:13.
Die Dateigröße ist exakt zu bestimmen:
@line_parts[2] = fileparse($file,"");
@line_parts[3] = $fi->{size};
$modifiy_line = join(" ",@line_parts)."\n";
Komplettes Beispiel:
UPD 2016_14_10_23:50:13 40341 FHEM/98_Dooya.pm
Attribute
Zur weiteren Beeinflussung der Funktionsweise des update Befehls können Attribute verwendet werden. Diese müssen für das Objekt global gesetzt werden, also mit einem Konfigurationsbefehl der Art
attr global ...
backup_before_update
siehe auch backup
restoreDirs
siehe Rücksichern beim Update überschriebener Dateien
exclude_from_update
Mit der Definition
attr global exclude_from_update ...
kann eine Liste von Dateien spezifiziert werden, die bei der Ausführung des update Befehls nicht aktualisiert werden sollen. Dateien können auch über reguläre Ausdrücke definiert werden, die einzelnen Einträge werden durch Leerzeichen voneinander getrennt.
Einen Spezialfall stellt die commandref dar, die seit einer Modifikation des Update Prozesses (März 2015, beschrieben in dieser Forendiskusion) nicht mehr heruntergeladen wird, sondern auf dem Benutzersystem durch Extraktion der Dokumentation aus den einzelnen Modulen generiert wird, angezeigt durch die Meldung im fhem.log:
- Calling /usr/bin/perl ./contrib/commandref_join.pl, this may take a while.
Sollte dieser Prozess (z.B. auf einem langsamen Rechner) zu lange dauern, bleibt die Meldung
- update finished, "shutdown restart" is needed to activate the changes.
aus. Wird commandref in das exclude_from_update
Attribut eingetragen, entfällt dieser Schritt, die lokale commandref wird allerdings dann auch nicht mehr aktualisiert. Die modulspezifische Hilfe, die z.B. über help modulname
aufgerufen werden kann, ist davon nicht betroffen.
Anwendungsbeispiel
Durchführung eines Updates
Zunächst kann mit dem Befehl
update check
überprüft werden, ob es überhaupt ein neues Update gibt und welche Dateien hierbei ausgetauscht würden (die angezeigten Infos sollten in einer Textdatei gesichert werden. Mit diesen Infos kann gezielter nach Problemen, die vielleicht nach einem Update auftreten, gesucht werden). Anschließend kann mittels:
update
das Update eingespielt werden. Hierbei ist zu beachten, dass die Befehle auf der FHEM Webseite oben (Befehls-Eingabefeld) eingegeben werden und anschließend die "Enter" Taste auf der Tastatur gedrückt werden muss.
Gibt es kein Update für FHEM, sieht die Ausgabe z.B. nach "update check" wie folgt aus:
List of new / modified files since last update:
nothing to do...
Rücksichern beim Update überschriebener Dateien
Per default werden vor dem Überschreiben durch update alle Dateien in einem neuen Verzeichnis (restoreDir/update/YYYY-MM-DD) gesichert. Diese Dateien kann man einzeln oder komplett mit dem Befehl restore zuruecksichern (z.Bsp.: restore 2014-08-19
oder restore 2014-08-19/fhem.pl
) . Mit dem restoreDirs Attribut kann man die Anzahl der aufgehobenen Sicherungen (== Datum-Verzeichnisse) bestimmen, die Voreinstellung ist 3. Mit 0 kann man das Feature komplett abschalten.
Ab Updatestand 29.10.2016 können bei Standardinstallationen (Beitrag) die fhem.cfg und fhem.save mit der Option -a des restore-Befehl wiederhergestellt werden.
Zu Neuerungen ab Updatestand 18.03.2018 siehe Beitrag.