macOS Ventura rsync : permission denied (volume local)

ctob

Membre confirmé
29 Août 2020
31
6
46
Bonjour,

J'ai un souci avec rsync : j'ai créée un petit .zsh qui copie des répertoires vers un autre emplacement, en local.

Le script était précédemment lancé depuis LaunchAgent toutes les heures et ça fonctionnait bien.

Je suis passé sur Ventura et désormais j'ai "operation denied".

Même en lançant directement le .zsh depuis le Terminal j'ai cette erreur, que le script soit en chown root ou avec mon user local.

En revanche en lançant les commandes rsync directement depuis le Terminal ça fonctionne.

J'ai ajouté Terminal, rsync, launchd et zsh dans le Full Disk Access mais ça ne fait rien. J'ai retiré ces autorisations qui sont peut-être dangereuses, je ne les maîtrise pas.

Auriez-vous une idée de comment résoudre ce souci ?

Merci et bonne soirée à tous,

C. Tob
 
J'ai regardé sur google et il y a pas mal de raisons qui peuvent expliquer ce problème...
Je te laisse chercher "macos zsh permission denied" sur google, tu risques d'y passer un petit moment !
 
J'ai regardé sur google et il y a pas mal de raisons qui peuvent expliquer ce problème...
Je te laisse chercher "macos zsh permission denied" sur google, tu risques d'y passer un petit moment !
Oui j'ai déjà fait, c'est pour ça que je lance une bouteille à la mer ici, il y en a dans tous les sens sur Google.
 
Je viens de faire un essai, voici ce que j'ai fait :
Bash:
cd ~
vi toto.zsh
chmod +x toto.zsh

Le contenu de toto.zsh :
Bash:
#!/bin/zsh
 cp -R /Applications/Cyberduck.app ~/

enfin, j'ai ouvert l'application via le Finder, en faisant un clic droit sur le script et en l'ouvrant avec Terminal

1677148348229.png
 
Dernière édition par un modérateur:
J'ai regardé un peu plus et effectivement c'est pas si simple !

2 options à tester :
  • enlever le .sh au script, le rendre executable et le lancer tel quel via LaunchAgent
  • passer par cron (crontab -e)
edit : Apple précise qu'il ne faut plus passer par launchd (load/unload) mais via launchctl pour gérer ses scripts :
 
dernier point relevé , le script doit etre root :

"OK, I think I've cracked it. Although the script would run from the terminal, I found that all the other .plist files in /LaunchDaemons were owned by root. I changed the ownership of it using sudo chown root [script name]. I then loaded it using sudo launchctl load [script name]. Strangely when loaded like this it isn't listed when doing launchctl list unless that command is run as sudo launchctl list."
 
Merci pour les essais, j'avais déjà remarqué que le .zsh pose souci. Je testerai la semaine prochaine ce que tu as fait, d'ici lundi je n'aurai pas le temps.

Par curiosité, as-tu essayé juste de mettre un rsync dans un .zsh pour une copie locale ?

De mon côté même un rsync -Lav --delete ../cible source/ ne fonctionne pas, en restant dans le même répertoire.
 
Bon, j'ai fait un essai (ca m'intriguait ton problème ;)) et voici ce que j'ai fait (et qui fonctionne !)

Etape 1 : mise en place de l'environnement de test

Bash:
cd
mkdir rsync_folder
cd rsync_folder
mkdir rsync_source
mkdir rsync_dest
vi script
chmod +x script

Dans le dossier rsync_source, j'ai copié quelques images

Etape 2 : le script

Bash:
#!/bin/zsh
rsync -Lav --delete ~/rsync_folder/rsync_source/ ~/rsync_folder/rsync_dest/

Etape 3 : création du .plist

Bash:
cd ~/Library/LaunchAgents
vi com.example.rsync_script.plist

A ce moment j'ai une notification qui apparait :

notif.jpg

Et le contenu du .plist

Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.rsync_script</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/totoguile/rsync_folder/script</string>
    </array>
    <key>StandardOutPath</key>
    <string>/Users/totoguile/rsync_folder/script.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/totoguile/rsync_folder/script.log</string>
    <key>StartInterval</key>
    <integer>5</integer>
</dict>
</plist>

Etape 4: le lancement du script

Bash:
launchctl load ~/Library/LaunchAgents/com.example.rsync_script.plist
launchctl start com.example.rsync_script

Mon fichier de log se créer bien, et la synchro fonctionne.

J'espère que cela t'aidera !
A noter que le .plist veut des chemins absolus et pas relatifs (pas de ~)

J'ai tout fait dans le dossier /Users/totoguile je n'ai pas tenté un dossier exterieur. Ma compréhension est que si tu veux utiliser des dossiers racines, il faut :
  • le .plist dans /Library/LaunchAgents
  • qu'il appartienne à root du groupe wheel
  • utiliser sudo devant les commandes launchctl
 
Dernière édition:
Merci de la démarche, bon la curiosité l'a emporté et j'ai fait l'essai.:D Ca fonctionne bien localement, sans besoin de mettre le Full Disk Access.

En revanche toujours le même souci avec le répertoire OneDrive en source :

building file list ... rsync: opendir "/Users/MyUser/Library/CloudStorage/OneDrive-Personnel/DIR/." failed: Operation not permitted (1)
done
IO error encountered -- skipping file deletion

sent 73 bytes received 20 bytes 186.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/9e200cfa-796-11ed-886f-a23c4f61b56/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]

La copie fonctionne si je lance le script contenant le rsync mais via un .plist impossible.

La chose étrange c'est qu'en faisant un rsync depuis un répertoire local vers OneDrive ça fonctionne.
 
Effectivement, je viens de tester et cela ne fonctionne pas avec le dossier OneDrive.
Il y a une API spécifique d'apple pour gérer ces dossiers (cloudkit mode ondemand) et je pense que macos traite différemment ces dossiers.
A priori il semble impossible de gérer ses fichiers via le terminal.
Regarde du côté de rclone ? https://rclone.org/onedrive/
 
En tout cas rsync fonctionne avec OneDrive en source tant que ce n'est pas via un plist.

Je vais regarder côté rclone merci, j'avoue que je me pose la question de faire transiter des données perso via un tiers que je ne connais pas.
 
rclone est un client open source onedrive , gdrive etc...
il n'y a pas de transit des données via un serveur tiers, tout se fera entre ton mac et MS.

En tout cas merci pour ce problème, je ne connaissais pas le fonctionnement des launchagents et je n'avais jamais utilisé rsync, ce fut une bonne découverte :-)

Bon courage pour la suite, tiens nous au courant, et si tu as un setup qui fonctionne, n'hésite pas à faire un tuto sur le forum !
 
Merci à toi pour ton aide et la réponse sur rclone. Je mets doucement le pied à l'étrier avec rclone, ça fonctionne plutôt bien sur les premiers tests, le tuto du site est bien fait pour la partie Azure, même si j'ai pas mal galéré ne fut-ce que pour créer la connexion (ma faute). Actuellement je teste la synchronisation d'un répertoire OneDrive -> local et local -> OneDrive et c'est satisfaisant.

J'avais téléchargé le binaire dans un premier temps mais impossible de faire fonctionner l'autorisation web, je suis ensuite passé par curl pour obtenir rclone et plus de souci avec cette version.

Je mettrai quelque chose de plus détaillé une fois que j'aurai avancé sur le sujet, notamment sur le fait d'utiliser launchagent avec rclone (on s'acharne :p)

rclone est un client open source onedrive , gdrive etc...
il n'y a pas de transit des données via un serveur tiers, tout se fera entre ton mac et MS.

En tout cas merci pour ce problème, je ne connaissais pas le fonctionnement des launchagents et je n'avais jamais utilisé rsync, ce fut une bonne découverte :)

Bon courage pour la suite, tiens nous au courant, et si tu as un setup qui fonctionne, n'hésite pas à faire un tuto sur le forum !
 
  • J’aime
Réactions: totoguile
Merci à toi pour ton aide et la réponse sur rclone. Je mets doucement le pied à l'étrier avec rclone, ça fonctionne plutôt bien sur les premiers tests, le tuto du site est bien fait pour la partie Azure, même si j'ai pas mal galéré ne fut-ce que pour créer la connexion (ma faute). Actuellement je teste la synchronisation d'un répertoire OneDrive -> local et local -> OneDrive et c'est satisfaisant.

J'avais téléchargé le binaire dans un premier temps mais impossible de faire fonctionner l'autorisation web, je suis ensuite passé par curl pour obtenir rclone et plus de souci avec cette version.

Je mettrai quelque chose de plus détaillé une fois que j'aurai avancé sur le sujet, notamment sur le fait d'utiliser launchagent avec rclone (on s'acharne :p)

J'arrive à faire un .zsh qui fonctionne bien avec rclone, en revanche, impossible de le lancer depuis Launchagents ou Launchdaemons. J'essaie de trouver la cause et je posterai si j'arrive à le faire fonctionner mais pas évident.