NEWS
Datei auf Win PC schreiben
-
Hi,
versuche schon seit tagen über Node Red eine Date auf einem indows Rechner zu schreiben.
Egal wie ich den Pfad eingebe in das Nodes "write file", entweder es kommt eine Fehlermeldung "Datei oder Verzeichnis nicht vorhanden", oder alles OK, aber die Datei wird nicht geschrieben.
Wollte als Path: \192.168.1.99\Test\test.txt
oder //192.168.1.99/Test/test.txt
oder \192.168.1.99\Test\test.txt
aber nichts funktioniert.Und ja, am WinPC sind alle Freigeben erstellt und mit allen Rechten vergeben, komme auch von anderen Rechner darauf.
Kann es sein das ich am Raspi noch etwas installieren oder einstellen mus ?? Hab das Gefühl ich komme garnicht raus aus dem Raspi um die Datei zu schreiben, denn am WinPC finde ich nichts in den Logs.Danke schon mal
MZ
-
@zariomahn Ich denke, Du wirst Deine Windowsfreigabe auf dem Raspi mounten müssen und zwar so, dass beim mounten alle Rechte für den user iobroker vorhanden sind. Wenn das permanent sein soll, musst Du halt beim Booten mounten.
Ich kann Dir helfen, wenn Du wissen willst was Du in die fstab eintragen musst.
-
@mickym
Hi, erst mal danke für die schnelle Antwort.Ja ich habe es fast befürchtet mit der Freigabe.... ich bin nicht so der Linux Experte, kann zwar Befehle abtippen und per Terminal einfügen, aber fürs eingemachte fehlt einfach noch einiges
Das wäre supi wenn du mir die Befehle rüberschicken könntest die ich an der Konsole eingeben muss... die Freigebe sollte dauerhaft sein.
vg
MZ
-
@zariomahn Du musst halt ggf. prüfen, ob Du im Windows wirklich als Gast und ohne Kennwort anmelden kannst.
Wenn Du es unter dem home Verzeichnis des iobroker users haben möchtest, könntest Du z.Bsp. ein Verzeichnis - ich nenne es mal windows - erstellen:
sudo -su iobroker cd ~ mkdir windows
Ich habe das Verzeichnis mal bewusst unter iobroker erstellt - damit es die richtigen Rechte hat und mit dem user iobroker:
ls -l drwxr-xr-x 2 iobroker iobroker 4096 29. Sep 13:15 windows
in einer Passwortdatei - wie gesagt keine Ahnung, ob Dein User wirklich Gast zulässt und kein Kennwort - ansonsten ich habe einen lokalen Windows-User erstellt, schreibst Du in eine Textdatei - userid und passwort als versteckte Datei - ich platziere sie mal in das Verzeichnis des iobrokers (darauf wird dann in der fstab Zeile Bezug genommen):
nano /home/iobroker/.smbcredentials
dort trägst Du dann username und password ein:
username=Benutzer password=Passwort domain=WORKGROUP
zum Schluß modifizierst Du die fstab.
exit sudo nano /etc/fstab
und trägst folgende Zeile ein - mit einer Zeilenschaltung zum Schluss:
//server/share /home/iobroker/windows cifs vers=3.0,rw,auto,users,file_mode=0664,dir_mode=0775,credentials=/home/iobroker/.smbcredentials 0 0
server und share musst Du halt mit IP Adresse und Freigabename ersetzen.
Dann neu booten.
Wenn Du anschließend als Benutzer iobroker im Verzeichnis /home/iobroker/windows deine Windowsdateien siehst ...
sudo -su iobroker cd ~ ls -la windows
bzw. eine neue Datei erstellen kannst ...
sudo -su iobroker cd ~ touch test.text
dann klappst auch aus NodeRed unter dem iobroker.
Falls die Datei nach dem Schreiben geschlossen werden soll, damit Du mit was anderem zugreifen kannst - den Pfad in msg.filename und nicht in der Node mitgeben - siehe Hilfe zu der Node.
Mit
exit
verlässt Du den user iobroker wieder aus der shell und arbeitest wieder mit dem user, mit dem Du angemeldet bist - also pi wahrscheinlich.
-
@zariomahn sagte in Datei auf Win PC schreiben:
\\192.168.1.99\Test\test.txt
oder //192.168.1.99/Test/test.txtVielleicht mal generell - damit kann halt nur Windows was mit anfangen
- aber Linux kennt standardmäßig keine UNC-Namen.
Und falls Dir der Share mal wegbricht - dann kannst Du über die Kommandozeile das Verzeichnis wieder mounten:
mount /home/iobroker/windows
PS:
- Ich bin auch kein Linux Spezi bzw. Profi - habe mir das auch alles zusammengesucht.
-
Hi,
vielen Dank erstmal, hat zu 99% funktioniert
Ich sehe unter /home/iobroker/windows/ alle meine Dateien vom WindowsRechner, d.h. es ist gemountet.
Aber ich kann keine Datei darin erstellen, habe die Passwortdatei erstellt mit den richtigen Benutzer u.s.w. aber wenn ich aus Node Red ausführe kommt diese Fehlermeldung:
(...)
"failed to write to file: Error: EACCES: permission denied, open '/home/iobroker/windows/test.txt'"
(...)Auch wenn ich den touch Befehl ausführe bekomme ich folgendes: touch: cannot touch 'test.text': Permission denied
wo kann ich überprüfen was die Ursache ist ?
vg
MZ
-
@zariomahn Dann stimmt was mit den Schreibrechten im Zielverzeichnis nicht - Musst halt auf beiden Seiten prüfen. Es scheint Lese- aber keine Schreibrechte zu geben.
Auf der Windowsseite muss die Freigabe (Jeder = Vollzugriff) und auf dem Dateisystem die Rechte Schreiben für den neuen Benutzer gegeben sein und zwar in dem Freigabeverzeichnis selbst und ggf. darunter.
Wenn Du auf dem Raspberry mit dem iobroker angemeldet bist:
solltest Du mit ls -l auch alle Schreibrechte haben. -
@mickym
wenn ich mich am pi anmelde bin ich erstmal mit meinen benutzer drauf "mario", dann gebe ich ein sudo -su iobroker
dann erhalte ich iobroker@raspberrypi:/home/mario $
dann kann ich erst mit cd ~ zurück und bin dann iobroker@raspberrypi:~ $
hier finde ich auch das windows verzeichnis in dem ich dann mit cd windows springen kann. iobroker@raspberrypi:~/windows $sollte hier nicht irgendwie das home auftauchen ?? /home/iobroker/windows ??
vg
-
@zariomahn Nein die Tilde ~ ist immer die Abkürzung für das Homeverzeichnis des jeweiligen Benutzers. Für den iobroker also automatisch /home/iobroker.
Statt ~ kannst Du egal mit welchem Benutzer natürlich auch immer die absoluten Pfade eingeben. Du musst keine ~ benutzen.
Schau mal lieber auf der Windowsseite, ob die Rechte stimmen.
-
@zariomahn Ich habe noch einen Verdacht - aber noch keine Lösung
mach mal den mount weg.
sudo umount /home/iobroker/windows
dann machst mit dem iobroker user nochmal
sudo -su iobroker mount ~/windows
und schaust ob Du nun mit
touch ~/windows/test.txt
eine Datei erstellen kannst.
Ach und mach mal in Deine fstab noch eine nofail rein - nicht dass Dein Raspberry nicht mehr hochfährt.
//server/share /home/iobroker/windows cifs vers=3.0,rw,auto,nofail,users,file_mode=0664,dir_mode=0775,credentials=/home/iobroker/.smbcredentials 0 0
Sonst gibts vielleicht Fehler wenn der Windows-Rechner nicht am Netz ist.
-
wenn ich nach dem unmount wieder mounten will, kommt
mount: /etc/fstab: parse error at line 1 -- ignored mount error(16): Device or resource busy Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
so sieht meine fstab aus:
.proc /proc proc defaults 0 0.. PARTUUID=9141be32-01 /boot vfat defaults,flush 0 2 PARTUUID=9141be32-02 / ext4 defaults,noatime 0 1 //192.168.1.99/Test /home/iobroker/windows cifs vers=3.0,rw,auto,nofail,users,file_mode=0664,dir_mode=0775,credentials=/home/iobroker/.smbcredentia> # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
vg
-
Also das Problem ist, dass wenn das automatisch gemountet wird, dann ist root der owner und nicht der iobroker.
Im Moment geht es wahrscheinlich so - wie man das mit dem automatischen Einbinden geht weiss ich noch nicht.
Ausserdem ist Dir ein Punkt in die 1. Zeile gerutscht deswegen bekommt du diese Fehlermeldung.
Mach mal das nofail raus und auto in noauto. Dann mounten wir das erst mal manuell.
proc /proc proc defaults 0 0.. PARTUUID=9141be32-01 /boot vfat defaults,flush 0 2 PARTUUID=9141be32-02 / ext4 defaults,noatime 0 1 //192.168.1.99/Test /home/iobroker/windows cifs vers=3.0,rw,noauto,users,file_mode=0664,dir_mode=0775,credentials=/home/iobroker/.smbcredentia> # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
Ich habe das auch mal automatisch gemountet - und dann ist der user leider root und das ist das Problem - kann man den mount Befehl auch in ein LogonScript machen.
Erst mal manuell schauen - ob das tut.
Ich hab schon eine Idee - mit dem auto mount - teste aber noch.
-
So, bekomme zwar bei mounten immer noch diese Fehermeldung
muss mal sehen ob da nicht noch etwas los ist.
Jetzt kann auch mit touch test.text die Datei erstellen, die dann auch im windows auftaucht.
Ach unter Red Node funktioniert es jetzt....
Damit kann ich mal arbeten, d.h. wenn ich neu boote muss ich das Laufwerk mounten, richtig ?
vg
-
@zariomahn Diese Fehlermelung kommt - weil Du einen Punkt in der 1. Zeile hast - den hast Du wohl unabsichtlich da rein gemacht.
Im Moment musst du manuell mounten - aber ich probiere gerade den automatischen Boot aus. Ergebnis in Kürze.
-
Hallo, vielen vielen Dank schon mal.... im Voraus.
Hab nochmal in die fstab angesehen, habe den Punkt eigentlich entfernt ?!
proc /proc proc defaults 0 0.. PARTUUID=9141be32-01 /boot vfat defaults,flush 0 2 PARTUUID=9141be32-02 / ext4 defaults,noatime 0 1 //192.168.1.99/bpq32 /home/iobroker/windows cifs vers=3.0,rw,noauto,users,file_mode=0664,dir_mode=0775,credentials=/home/iobroker/.smbcredentials 0 0 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
vg
mario
-
@zariomahn So ich habe die ultimative Lösung - aber das mit Deiner Fehlermeldung ist komisch, OK - wenn busy ist OK - aber darf kein Syntaxfehler kommen.
und hinten die beiden Punkte müssen auch raus.
proc /proc proc defaults 0 0
mehr darf da nicht stehn.
Wenn das sauber ist - dann komme ich zu meiner ultimativen Lösung.
Bei mir getestet.
-
So gerade nochmal getestet - funktioniert - auch wenn der Windowsrechner zur Bootzeit nicht online ist.
- Melde Dich einfach, wenn Du soweit bist.
-
@mickym sagte in Datei auf Win PC schreiben:
Ich habe das auch mal automatisch gemountet - und dann ist der user leider root und das ist das Problem - kann man den mount Befehl auch in ein LogonScript machen.
Man kann bei cifs auch die Optionen uid/gid setzen, dann gehören die Dateien dem entsprechenden user.
Näheres hier: -
@thomas-braun Ja das wollte ich ihm gerade erklären - so habe ich es auch gemacht und nun den automounter verwendet - das geht super.
Ich warte nur bis er sich meldet - damit er die uid und gid ermittelt.
Mir ist das nun auch zu blöd zu warten:
mach mal statt dem noauto in der Zeile:
x-systemd.automount,x-systemd.mount-timeout=30,_netdev
und dann nach dem users, noch
uid=100x,gid=100x
mit der x halt was der iobroker user für ID s hat.
rausbekommen tust das mit
id iobroker
viel Glück.
-
Hallo,
Sorry, hatte noch einen Notfall und musst weg....
erst mal wieder vielen dank für die Hilfe, habe nun folgendes eingetragen, und wollte nur fragen ob das so passt bevor ich feuer frei gebe
proc /proc proc defaults 0 0 PARTUUID=9141be32-01 /boot vfat defaults,flush 0 2 PARTUUID=9141be32-02 / ext4 defaults,noatime 0 1 //192.168.1.99/bpq32 /home/iobroker/windows cifs vers=3.0,rw,x-systemd.automount,x-systemd.mount-timeout=30,_netdev,users,uid=1001,gid=1001,file_mode=0664,dir_mode=0775,credentials=/home/iobroker/.smbcredentials 0 0 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that vg Mario