Static Binaries
- perryflynn
- Thread is marked as Resolved.
-
-
Außer dem Weglassen aller anderen Parameter via
Codersync -vvvv --no-perms --chmod=Da+rx,a-w,Fa+r,a-w --rsync-path=/rsync.amd64 ./neue-texte3.csv example.de:/csv-dateien/
und Vergleich der Ausgabe mit dem vorherigen Test – oder in einem zweiten Schritt der Verwendung desselben rsync-Binaries wie auf der Zielseite in einer Linux-Quell-Umgebung mit obiger Parameterkombination – wüsste ich mangels Fehlermeldung nicht, wo man ansetzen könnte (denn auf der Zielseite dürfte eine Verwendung von strace "schwierig" sein).
-
Auf einem Debian-Linux als Quelle mit rsync 3.1.3
Code
Display Moreroot@linux:~# rsync -vvv --chmod=Da+rx,a-w,Fa+r,a-w --rsync-path=/rsync.amd64 ./neue-csv3.csv example.de:/csv-dateien/ opening connection using: ssh example.de /rsync.amd64 --server -vvve.LsfxC . /tmpdir/ (7 args) example.de@XXX.XXX.XX.XX's password: [sender] make_file(neue-csv3.csv,*,0) send_file_list done send_files starting server_recv(2) starting pid=29439 recv_file_name(neue-csv3.csv) received 1 names recv_file_list done get_local_name count=1 /csv-dateien/ generator starting pid=29439 delta-transmission enabled recv_generator(neue-csv3.csv,0) send_files(0, ./neue-csv3.csv) send_files mapped ./neue-csv3.csv of size 17007914 calling match_sums ./neue-csv3.csv neue-csv3.csv sending file_sum false_alarms=0 hash_hits=0 matches=0 sender finished ./neue-csv3.csv generate_files phase=1 send_files phase=1 recv_files(1) starting recv_files(neue-csv3.csv) got file_sum renaming .neue-csv3.csv.NflKfg to neue-csv3.csv recv_files phase=1 generate_files phase=2 send_files phase=2 send files finished total: matches=0 hash_hits=0 false_alarms=0 data=17007914 recv_files phase=2 recv_files finished generate_files phase=3 generate_files finished sent 17,012,170 bytes received 601 bytes 6,805,108.40 bytes/sec total size is 17,007,914 speedup is 1.00 [sender] _exit_cleanup(code=0, file=main.c, line=1207): about to call exit(0)
Ich sehe in dem verbose gar nichts bezüglich des chmods ...
Die Datei hat in der Quelle
-rw-r--r--
und im Ziel nach obigen Aufruf:
-rw-------
-
Offenbar reichen die "-v" noch nicht aus; lokaler Test:
Code
Display More# cd /tmp; mkdir t1 t2; chown :adm t1 t2; chmod g+rwx t1 t2; touch t1/source_file # rsync --version | head -1 rsync version 3.3.0 protocol version 31 # #### root nutzt bei Zugriff via ssh das Konto "sys-maint" (Gruppe "adm"), da ein root-Login verboten ist: # rsync -vvvvvvvvvvvvv --chmod=Da+rx,a-w,Fa+r,a-w,a+x t1/source_file localhost:/tmp/t2/ | tee rsync01.log # find . -name "source_file" -ls 2060923 0 -rw-r--r-- 1 root adm 0 Nov 8 19:24 ./t1/source_file 2061789 0 -r-xr-xr-x 1 sys-maint adm 0 Nov 8 19:30 ./t2/source_file # LANG=C stat /tmp/t2/source_file | grep Access | head -1 Access: (0555/-r-xr-xr-x) Uid: ( 500/sys-maint) Gid: ( 4/ adm) # grep "\[sender\]" rsync01.log [sender] change_dir(/tmp/t1) [sender] make_file(source_file,*,0) [sender] flist start=0, used=1, low=0, high=0 [sender] i=0 t1 source_file mode=0100555 len=0 flags=1000 [sender] flist_eof=1 [sender] _exit_cleanup(code=0, file=main.c, line=1338): entered [sender] _exit_cleanup(code=0, file=main.c, line=1338): about to call exit(0)
Die vierte Fundstelle oben zeigt die übersteuerten Zugriffsrechte in Oktalnotation, wie sie auch auf dem Dateisystem danach existieren. Wenn obiger rsync-Aufruf einmal gegen den Webhosting-Server und einmal gegen "localhost" ausgeführt wird (oder einen anderen lokaler Rechner), gibt es da Abweichungen in der rsync-Ausgabe?
Wenn diese Ausgabe nicht mit den resultierenden Rechten übereinstimmt, könnte das daran liegen, dass hier bspw. ein NFS-Dateisystem auf der Zielseite stillschweigend chown-/chmod-Änderungen ignoriert – das würde aber dann auch beim manuellen Test via SSH-Login und Ausführung von touch, chmod fehlschlagen, und laut obiger Aussage gibt es hier ja keinerlei Probleme.
-
beim testen auch beachten, die ziel-testdateien vorher zu löschen, wenn --chmod ohne --perms verwendet wird, weil vorhandene files nicht geändert werden.
-
Ich habe die Tests gerade durchgeführt. Es gibt in den 2 Logfiles aber quasi keine Unterschiede (außer Server Name, pid, tmp Dateiname)
Anbei das Logfile für den rsync von localhost auf meinen alten dedicated Debian Server:
Code
Display Morekai@MBP-von-Kai ~ % rsync -vvvvvvvvvvvvv --chmod=Da+rx,a-w,Fa+r,a-w,a+x t1/source_file papayaroot:/tmp/t2/ | tee rsync01.log cmd=<NULL> machine=papayaroot user=<NULL> path=/tmp/t2/ cmd[0]=ssh cmd[1]=papayaroot cmd[2]=rsync cmd[3]=--server cmd[4]=-vvvvvvvvvvvvve.LsfxCIvu cmd[5]=. cmd[6]=/tmp/t2/ opening connection using: ssh papayaroot rsync --server -vvvvvvvvvvvvve.LsfxCIvu . /tmp/t2/ (7 args) msg checking charset: UTF-8 (Client) Protocol versions: remote=31, negotiated=31 FILE_STRUCT_LEN=24, EXTRA_LEN=4 [sender] change_dir(/Users/kai/t1) [sender] make_file(source_file,*,0) [sender] flist start=0, used=1, low=0, high=0 [sender] i=0 t1 source_file mode=0100555 len=0 flags=1000 send_file_list done [sender] flist_eof=1 file list sent send_files starting server_recv(2) starting pid=13328 recv_file_name(source_file) received 1 names [Receiver] flist_eof=1 [Receiver] flist start=0, used=1, low=0, high=0 [Receiver] i=0 1 source_file mode=0100555 len=0 flags=1000 recv_file_list done get_local_name count=1 /tmp/t2/ [Receiver] change_dir(/tmp/t2) generator starting pid=13328 delta-transmission enabled recv_generator(source_file,0) send_files(0, t1/source_file) count=0 n=0 rem=0 send_files mapped t1/source_file of size 0 calling match_sums t1/source_file source_file sending file_sum false_alarms=0 hash_hits=0 matches=0 sender finished t1/source_file generate_files phase=1 send_files phase=1 recv_files(1) starting recv_files(source_file) got file_sum renaming .source_file.F2xjm5 to source_file recv_files phase=1 generate_files phase=2 send_files phase=2 send files finished total: matches=0 hash_hits=0 false_alarms=0 data=0 recv_files phase=2 recv_files finished generate_files phase=3 generate_files finished client_run waiting on 62140 sent 84 bytes received 658 bytes 1.484,00 bytes/sec total size is 0 speedup is 0,00 [sender] _exit_cleanup(code=0, file=main.c, line=1358): entered [sender] _exit_cleanup(code=0, file=main.c, line=1358): about to call exit(0)
Ich sehe hier leider auch wieder nichts bzgl chmod im Logfile. Sind das die sender Informationen?
Die Datei bekommt aber in diesem Fall die gewünschten Dateirechte:
Beim Kopieren auf den netcup Reseller Server gibt es keine wirklichen Unterschiede im Logfile. Aber, die Datei bekommt nicht die erforderlichen Rechte
Leider gibt es auf dem netcup Reseller das stat Programm nicht.
Aber hier noch der sender Output vom netcup Reseller Server:
Code[sender] change_dir(/Users/kai/t1) [sender] make_file(source_file,*,0) [sender] flist start=0, used=1, low=0, high=0 [sender] i=0 t1 source_file mode=0100555 len=0 flags=1000 [sender] flist_eof=1 [sender] _exit_cleanup(code=0, file=main.c, line=1358): entered [sender] _exit_cleanup(code=0, file=main.c, line=1358): about to call exit(0)
und vom Debian Server:
Code[sender] change_dir(/Users/kai/t1) [sender] make_file(source_file,*,0) [sender] flist start=0, used=1, low=0, high=0 [sender] i=0 t1 source_file mode=0100555 len=0 flags=1000 [sender] flist_eof=1 [sender] _exit_cleanup(code=0, file=main.c, line=1358): entered [sender] _exit_cleanup(code=0, file=main.c, line=1358): about to call exit(0)
-
-
Ich habe anhand eines CIFS-Mountpoints nochmal verifiziert, dass rsync keinerlei Fehlermeldungen ausspuckt, wenn chmod fehlschlägt. Das sollte, ohne jetzt im Quellcode nachzusehen, dem Umstand geschuldet sein, dass rsync standardmäßig die resultierenden Zugriffsrechte nicht explizit durch erneuten Vergleich mit dem Sollwert kontrolliert, wenn der chmod-Aufruf ins Leere läuft.
Nach erneutem Durchlesen des Manuals denke ich, dass doch -p verwendet werden muss – und dass wir bislang vergessen haben, die jeweils aktive umask zu beachten (bei Linux normalerweise 022), da rsync diese berücksichtigt.
Dummerweise haben wir via --chmod nicht alle Zugriffsrechte gesetzt, sondern gerade auf die Schreibrechte verzichtet. Wenn man obiges t1/t2-Beispiel auf einem lokalen Linux-Rechner wiederholt mit "rm -vf /tmp/t2/source_file; rsync -v --chmod=Da+rwx,Fa+rwx t1/source_file localhost:/tmp/t2", dann sieht man, dass die Zieldatei nämlich keinesfalls "world-writable" (0x777) ist, sondern die Schreibrechte für die Gruppe und Andere maskiert sind.
Endet die Ausgabe von umask, wenn man sich via ssh auf dem Webhosting-Server einloggt, zufälligerweise auf "77"?
Und weil rsync die umask berücksichtigt, unterscheidet sich das Verhalten von einem explizit auf der SSH-Kommandozeile ausgeführten chmod-"Gegentest", da dieser den umask-Wert ignoriert.
Quote--perms, -p
This option causes the receiving rsync to set the destination permissions to be the same as the source permissions. (See also the --chmod option for a way to modify what rsync considers to be the source permissions.)
When this option is off, permissions are set as follows:
o Existing files (including updated files) retain their existing permissions, though the --executability option might change just the execute permission for the file.
o New files get their "normal" permission bits set to the source file's permissions masked with the receiving directory's default permissions (either the receiving process's umask, or the permissions specified via the destination directory's default ACL), and their special permission bits disabled except in the case where a new directory inherits a setgid bit from its parent directory.
Laut o.g. Text sollte "rsync -vvvvvvvvvvvvv -p --chmod=Da+rwx,Fa+rwx ..." funktionieren, weil in diesem Fall die umask keine Rolle spielt (was ich auch lokal nachvollziehen konnte). Hierbei ist es egal, ob die Datei vorher bereits existierte, die Zugriffsrechte werden auch auf existierende Dateien angewandt (vgl. weitere Ausführungen im Manual zu -p und --chmod).
Das erklärt immer noch nicht, warum -p allein (ohne --chmod) nicht funktioniert, ermöglicht ggf. aber überhaupt erst einmal die Übersteuerung der Zugriffsrechte.
-
-
Warum sich das Verhalten der beiden rsync-Binaries unterscheidet, sofern eines nicht älter ist als v2.6.7 (vgl. Manual), wüßte ich nicht. Allerdings kann man (sofern der vorherige chmod-Test funktioniert) neben -p auch noch -A einsetzen, was bisher unterblieb, wenn ich es nicht überlesen habe. Das Vorhandensein von ACL auf der Zielseite – ebenfalls von aktuellen rsync-Versionen berücksichtigt – wurde bislang nämlich noch nicht thematisiert. (Diese müssten normalerweise auch explizit definiert und dementsprechend vom Betreiber dokumentiert werden.)
Sofern getfacl verfügbar ist, sollte ein "getfacl /tmp/t2" bzw. "getfacl /tmp/t2/source_file" Hinweise darüber liefern, ob eingerichtete Benutzer bestimmte Rechte bei der Verzeichnis-/Dateierstellung (nicht) besitzen.
Und damit … gn8
-
Guten Morgen ihr beiden,
vielen Dank für die Rückmeldung zu so später Stunde.
Olivetti : vielen Dank für die alternative Binary. Mit der funktioniert die Synchronisation ohne Probleme. Alle Optionen können fehlerfrei verwendet werden. Auch das von mir bevorzugte -arv (welches ja -p enthält).
Die hochgeladenen Dateien haben dann im Ziel auch die identischen Berechtigungen wie die lokale Version.
Man sollte vielleicht für andere noch anmerken, dass der Pfad in deinem Post NICHT der Download-Pfad ist. Man muss erst zu github und dort dann die Datei runterladen.
Ich denke, damit wäre mein Problem gelöst. 1000 Dank an euch und ein schönes Wochenende
-
der download ist nur für dich und wird bald gelöscht, weil es eine alte (noch dazu '…pre') version ist.
ich hatte nur gestern nix neueres zum hochladen griffbereit.
Sofern getfacl verfügbar ist
nein, ist nicht verfügbar.
wünsche ebenfalls ein schönes wochenende.
-
Am Lustigsten finde ich gerade, wie sich das Problem aus Post #6 hier im selben Thread, selbst auf Wiedervorlage gesetzt hat.
-
Moin,
ich will die Tage die Binaries aktualisieren. Hat jemand ne kurze Info für mich, wieso mein rsync Binary da nicht funktioniert hat? Ich kann dem Ganzen leider gerade nicht wirklich folgen... Würde dann versuchen das zu fixen.
-
Bau doch erstmal eine aktuelle Version, dann können wir das nochmal testen.
-
Hat jemand ne kurze Info für mich, wieso mein rsync Binary da nicht funktioniert hat?
evtl. sowas in der art -> https://github.com/RsyncProject/rsync/issues/109
---
ich kriege rsync-3.4.1 unter ubuntu 20.04 aktuell gar nicht ge»static«t zum laufen (segmentation fault).
das scheint aber auch von der entwicklerseite gar nicht mehr gewünscht, was man so liest.
-
ich kriege rsync-3.4.1 unter ubuntu 20.04 aktuell gar nicht ge»static«t zum laufen (segmentation fault).
In einem älteren Beitrag meinte perryflynn, dass er sich an Ubuntu/Debian orientiert, was die Versionen/unterstützten Features betrifft – und hier ist man derzeit "noch" bei v3.3.0. Diese/letzte Woche gab es da ein paar zurückportierte Fixes [bleepingcomputer.com], da sollte man ggf. ein Auge drauf haben – die vorletzte Version hat mir bei einem Test (gegen eine ältere Version) auf der Zielseite ein paar Dateien gelöscht (unkritisch aufgrund von zurückgebliebenen Duplikaten auf der Quellseite, zeigt aber, dass man hier neue Versionen immer testen sollte).
EDIT: Ich nutze unter Ubuntu 2[024].04 derzeit die v3.3.0+ds1-4 auf allen Rechnern und habe damit (wieder) keine Probleme (mehr).
-
ich kriege rsync-3.4.1 unter ubuntu 20.04 aktuell gar nicht ge»static«t zum laufen (segmentation fault).
Was sagt ldd?
-
-
Alternativ könnte man auch eine GO Variante nutzen, z.B. https://github.com/gokrazy/rsync
Das baut ja per Default statisch.