NEWS
Lösung für den Fehler EISGIT
-
Wer seinen adapter direkt im Verzeichnis /opt/iobroker/node_modules entwickeln möchte
und dort ein git Repository initialisiert, könnte den Fehler EISGIT beim aktualisieren/installieren eines anderen Adapters erhalten.
Dafür funktioniert folgende Lösung:- Seinen eine Ebene direkt unter /opt/iobroker kopieren.
Ein vorheriger Versuch den Adapter unter /home/pi zu kopieren scheiterte leider an der Auflösung von dependencys
Die Option -r steht für rekursiv
Die Option -p steht für alle Rechte und Infos über Eigentümer mitkopieren.cd /opt/iobroker/node_modules/ sudo cp -rp <VerzeichnisnameAdapter>/ /opt/iobroker/
- Zur Sicherheit macht ihr dann noch eine Sicherheitskopie und löscht dann das Verzeichnis
cd /opt/iobroker/node_modules/ tar -cvpf /home/pi/<adaptername>.tar <VerzeichnisnameAdapter>/ rm -r /opt/iobroker/node_modules/<VerzeichnisnameAdapter>
- Dann geht ihr in das Verzeichnis mit der Kopie und legt einen npm link an.
Dadurch wird ein symlink ins globale Modulverzeichnis angelegt
cd /opt/iobroker/<VerzeichnisnameAdapter> sudo npm link
- Zum Schluss dann in das Programmverzeichnis von iobroker
Dort führt ihr wieder npm link plus den Paketnamen des Adapters aus (also das was in package.json drin steht.
Das legt letztendlich einen symlink in das node_modules Verzeichnis an, so dass euer adapter an gewohnter Stelle verfügbar ist
cd /opt/iobroker/ npm link <AdapterPackagename>
Danach habt ihr unter node_modules einen symlink zum anderen Verzeichnis.
Ihr könnt dann ganz normal wieder im Adapterverzeichnis unter node_modulse arbeiten und npm
stört sich nicht mehr an dem git-Repository. - Seinen eine Ebene direkt unter /opt/iobroker kopieren.
-
Praktisch... ein ähnliches Problem hatte ich gestern. Allerdings wollte ich meinen Adapter aus dem dev-Verzeichnis ins ioBroker-Verzeichnis linken. Dann beschwert sich ioBroker allerdings, dass die Startdatei nicht gefunden wird. Hattest du das Problem auch schon?
-
ja genau das ist das problem wenn man es ausserhalb des Pfades zum iobroker hin transportiert.
Das Problem ist, das bei require nicht das symlink-verzeichnis beachtet, sondern das original-verzeichnis
und da findet er andere Module nicht (bei mir wars der js-controller).
vgl. auch
https://github.com/nodejs/node/issues/3402
Da gab es eine grössere Diskussion ob das überhaupt gefixt werden soll.Letztendlich wurde eine Startoption b ei node eingeführt. (--preserve-symlinks)
Die habe ich aber noch nicht ausprobiert, da es ersteinmal einfacher war,
das Verzeichnis direkt unterhalb von /opt/iobroker zu platzieren und dann den symlink zu machen -
Danke, das sind schon mal zwei gute Hinweise. Werde ich später mal probieren.
-
super, ich wäre an den Ergebnissen interessiert.
ich würde den eigentlichen Entwicklungsordner gern wieder woanders hinschieben.
Interessant wäre es, wie ich dem iobroker sagen kann, dass er node mit der option starten muss.
da kenn ich mich nicht aus -
@OliverW sagte in Lösung für den Fehler EISGIT:
Interessant wäre es, wie ich dem iobroker sagen kann, dass er node mit der option starten muss.
Das geht nicht soweit ich weiß, aber du kannst den Adapter ja manuell starten.
-
Hallo Zusammen,
ich hätte hier mal eine Frage zu.Ich habe von Node14 auf Node16 upgedated.
Nun habe ich aktuell 2 Adapter in der Entwicklung. Wenn ich die Befehle nacheinander für die jeweiligen Adapter ausführe, wird der jeweils vorher angelegte Link wieder entfernt. Wisst ihr, wieso das so ist?
EDIT: Wenn man mehrere Adapter linken möchte, sollte man die Namen nacheinander schreiben. Dann klappt es auch
-
Mir ist inziwschen aufgefallen, das jedesmal, wenn man am "NPM" etwas macht - die Verlinkungen irgendwie wieder entfernt werden.
Sei es:npm install canvas
oder ähnlich ....
Weiss hier jemand was?
Ich bin auf NPM 8.
-
das könnte ein verhalten erklären, das ich vor kurzem in einem anderen kontext erlebt habe.
allerdings habe ich unter node_module selbst ein verzeichnis erstellt.
ils ich im iobroker ein zusätzlichen adapter installiert habe, war der wieder weg.
es kann sein, das npm die package.json überprüft und wenn dort kein Eintrag enthalten ist, dann wird der adapter/verzeichnis wieder entfernt.also zum ausprobieren wäre
- package.json manuell pflegen
- die package-lock neu erzeugen lassen mit npm install --package-lock
dann dürfe ruhe sein
-
@oliverio Meinst du nun die package.json des Adapter selbst? Oder eine andere?
Die package-lock dann im Entwicklerverzeichnis neu erstellen lassen, richtig?
-
@skb
nein von iobroker
wenn dein adapter im iobrokr installiert ist, ist er dort eingetragen
iobroker macht im hintergrund unter anderem auch ein npm install adapternameaber bitte nur auf einem entwicklersystem, nicht im Produktivsystem
da kann man auch mal was verhauenevtl ist der dev-server was oder der devcontainer (hier im forum nach diesen stichworten suchen)
-
@oliverio Danke. Da hatte ich den Adapter eingetragen, aber der Link zum Verzeichnis verschwindet dann.
Oder muss ich noch etwas beachten?
Habe den Adapternamen und die Version eingetragen.
-
-
@oliverio danke für die Rückmeldung.
Also, der Reihe nach.
Ganz normal die Adapter in die Verzeichnisse linken, wie oben.
Dann:- die jeweiligen Adapter mit ihren Versionen in die package.json einfügen
- package-lock erzeugen
- iob restart
Welchen refresh Knopf meinst du?
-
-
@oliverio Das scheint so nicht zu funktionieren.
Ich habe zusätzlich am Ende nochmals erneut "verlinkt", da irgendwie meine Ordner doch wieder entfernt wurden ...
Danke
EDIT: Irgendwie klappt dies doch nicht wie gewünscht. Nach einem NPM Befehl sind die "Links" wieder komplette Ordner.
Kennst Du dich zufällig auch mit Canvas auf einem RaspberryPi aus? Ich bekomme es bei Node16 einfach nicht installiert...
-
@skb
canvas?
was ist das?
was sind die fehlermeldungen?
was funktioniert nicht?aber nicht in diesem thread, mach mal einen in offtopic auf
-
@oliverio Also, das Erzeugen der Datei in iobroker hat funktioniert.
Danach habe ich ein NPM installieren wollen und da sind die Links zu den Ordnern wieder verschwunden und wurden "normale" Ordner. Somit musste ich wieder neu verlinken.
Canvas ist ein Bildbearbeitungs-Modul von NPM - das will sich absolut nicht installieren lassen.