1 votes

Comment automatiser rclone-mount sans Termux ou Magisk ?

Je veux utiliser rclone-mount sur Android pour monter des répertoires distants depuis mon propre serveur ainsi que depuis pCloud. Je veux que les points de montage soient établis automatiquement au démarrage et qu'ils restent montés en permanence.

Je n'ai pas encore pu installer Magisk sur cet appareil. Voir Comment installer Magisk sans un bootloader déverrouillé ?

J'ai essayé la méthode suivante rclone-mount avec Termux :

Comment monter rclone sur Android ?

Malheureusement, cela entraîne des erreurs de permissions que je n'ai pas réussi à résoudre. J'ai posté une question à ce sujet ici :

scripts - Comment utiliser rclone-mount avec Termux:Boot ?

Cela reste non résolu. J'ai travaillé sur ce problème pendant de nombreuses heures, je pourrais donc ajouter plus d'informations à mon autre question si nécessaire. Cependant, avec l'aide de @alecxs, j'ai essayé une autre approche et résolu les erreurs de permission. Maintenant rclone Je peux maintenant monter avec succès à la fois pcloud et mon propre serveur lorsque je lance les commandes dans l'interface CLI.

Ma question actuelle est la suivante : comment automatiser cela sans Termux:Boot ou Magisk ? Je ne peux pas installer Magisk et Termux m'a donné des tonnes de problèmes pendant quelques semaines et je n'ai réussi à le faire fonctionner qu'en abandonnant Termux. Encore une fois, voyez la question ci-dessus si vous pensez connaître la raison des problèmes de Termux).


Pour le contexte, et pour éventuellement aider d'autres personnes, j'énumère toutes les étapes que j'ai suivies jusqu'à présent, puisque les commandes fonctionnent et que cela pourrait s'avérer être un complément utile pour les personnes suivantes Irfan Latif La réponse de l'auteur m'a aidé à démarrer avec rclone-mount sur Android.

  • supprimé Termux (et vérifié que tous les fichiers ont disparu)
  • suppression de l'application Magisk (le module n'a jamais été installé)
  • gardé la version originale de SuperSU v2.82 (et vérifié qu'elle n'a pas de trackers)
  • a donné des autorisations d'accès au réseau aux applications fonctionnant sous Root dans AFWall+.
  • J'ai utilisé l'application "Simple SSHD" (de F-Droid) pour accéder au dispositif via SSH (depuis mon PC).
  • J'ai déjà un fichier rclone.conf qui fonctionne.
  • ma var env LD_LIBRARY_PATH est vide et je n'ai pas eu à le modifier avec cette méthode
  • mon appareil est Arm64
  • echo $PATH = /sbin:/system/sbin:/system/bin:/system/xbin et j'ai mis les binaires dans /system/bin EDIT : @alecxs a fait remarquer que ces binaires personnalisés auraient dû être installés à /system/xbin .

Tout d'abord, j'ai placé les binaires dans les bons répertoires sur mon appareil Android :

cd /path/to/files/gocryptfs_fusermount-ARMHF_2021-01-13/

NOTE : le binaire de fusermount vient de XDA / mirfatif : https://forum.xda-developers.com/m/mirfatif.7805402/ Fusermount sur Android (rclone mount) XDA Forums

$ scp -P 2222 fusermount 192.168.1.123:~/

Sur Android, devenez super-utilisateur :

su

installer le binaire fusermount :

mount -o rw,remount /system
mv /system/bin/fusermount /system/bin/fusermount.termux
cp ./fusermount /system/bin/fusermount
chmod 775 /system/bin/rclone
chown system:shell /system/bin/fusermount

vérifier les permissions SELinux du contexte et du CED :

# ls -laZ /system/bin/fusermount
-rwxrwxr-x 1 system shell u:object_r:system_file:s0 114056 2021-10-25 01:29 /system/bin/fusermount

Installez le binaire officiel de rclone : NOTE : Le binaire rclone que j'utilise provient de : https://beta.rclone.org/test/testbuilds-latest/rclone-Android-21-armv8a.gz

Je l'ai sur mon téléphone au : /storage/emulated/0/Documents/rclone-android-21-armv8a

mount -o rw,remount /system
ls -la /system/bin/rclone
lrwxrwxrwx 1 system shell 42 2021-10-21 19:55 /system/bin/rclone -> /data/data/com.termux/files/usr/bin/rclone
rm /system/bin/rclone
cp /storage/emulated/0/Documents/rclone-android-21-armv8a /system/bin/rclone
chmod 775 /system/bin/rclone
chown system:shell /system/bin/rclone

# ls -laZ /system/bin/rclone
-rwxrwxr-x 1 system shell u:object_r:system_file:s0 62257128 2021-10-26 19:45 /system/bin/rclone

Facultatif (si nécessaire, restaurer le contexte SELinux -- je n'ai pas eu besoin de le faire) :

restorecon -F /system/bin/rclone
restorecon -F /system/bin/fusermount

Terminé, alors montez en lecture seule à nouveau :

mount -o ro,remount /system

Vérifiez l'espace de nom du montage :

# readlink /proc/1/ns/mnt
mnt:[4026531840]
# readlink /proc/self/ns/mnt
mnt:[4026531840]

Si elles ne correspondent pas, exécutez la commande ci-dessous. (Mine match)

nsenter -t 1 -m -- "$0"

Vérifiez que la télécommande n'est pas déjà montée :

# ls -la /mnt/runtime/write/emulated/0/mypcloud/

Définit les variables d'environnement pour la configuration de rclone :

export RCLONE_CONFIG=/data/data/org.galexander.sshd/files/rclone.conf

Maintenant, montez manuellement la télécommande en utilisant rclone :

rclone -vvv mount mypcloud: /mnt/runtime/write/emulated/0/mypcloud --gid 9997 --dir-perms 0771 --file-perms 0660 --umask=0 --allow-other --cache-dir /storage/emulated/0/.cache --vfs-cache-mode full --vfs-cache-max-age 2h0m0s --vfs-cache-poll-interval 5m0s

Succès !

pour le démontage :

fusermount -u /mnt/runtime/write/emulated/0/mypcloud

Il n'y a vraiment rien de nouveau dans les étapes ci-dessus qui Irfan Latif n'a pas déjà été discuté. Cependant, il existe des différences. Par exemple, je n'ai pas eu besoin de définir LD_LIBRARY_PATH . De plus, rclone émet cet avertissement :

WARNING: linker: /system/bin/rclone: unsupported flags DT_FLAGS_1=0x8000001

Cependant, cela ne semble pas être un problème. Je montre également plus d'informations sur les contextes SELinux et quelques autres choses. Il y a suffisamment de différences par rapport à la réponse existante pour que mes étapes puissent aider quelqu'un d'autre dans son propre dépannage.


Maintenant, ma question principale comment puis-je automatiser ceci au moment du démarrage sans Termux:Boot ou Magisk ? Je suppose que je pourrais mettre un script dans init quelque part, mais j'apprécierais une réponse d'expert. J'ai examiné de nombreuses réponses concernant init.rc et l'exécution de scripts au démarrage. Elles m'ont pour la plupart renvoyé à des solutions qui étaient obsolètes avec Android 4.x et elles ne traitent pas non plus de la question de savoir comment gérer le cas d'un démarrage lorsqu'une connexion réseau n'est pas disponible.

EDIT : @alecxs a contribué à l'idée suivante pour le démarrage lorsqu'une connexion réseau n'est pas disponible :

until dumpsys connectivity | grep -iq state..connected
do
    sleep 1
done && rclone <...> & 

Mon appareil fonctionne sous Android 7.0 (US Samsung Galaxy S8). Il est rooté, j'ai true Root, il a SuperSu 2.82, SELinux est permissif, et je peux remonter /system rw (comme indiqué ci-dessus). J'ai le /system/su.d/ répertoire.

Aussi, question connexe, quel est un bon endroit / endroit sûr (chemin) sur mon appareil Android pour garder mon jeton pcloud et ma clé ssh privée (pour le serveur SFTP distant) ?

1 votes

Il faut mentionner que votre appareil est bootloader verrouillé donc impossible à modifier init.rc

1 votes

@alecxs pourquoi modifier /init.rc ? Vous pouvez mettre un nouveau anything.rc dans /system/etc/init/ lorsque vous avez un accès en écriture à /system .

0 votes

@IrfanLatif ah pensée etc/ dans boot.img est le seul endroit

2voto

vponomarev Points 11

@MountainX, tout d'abord, merci beaucoup pour cet article ! Il m'a vraiment aidé à mettre en place rclone mount sur mon téléphone. Pour lancer automatiquement rclone mount au démarrage, j'utilise Tasker. Il a l'événement "Device Boot", qui peut exécuter une tâche. Dans cette tâche, j'utilise "run shell" avec des privilèges Root et voici la commande que j'utilise :

nsenter -t 1 -m -- rclone mount OneDrive: /mnt/user/0/emulated/0/OneDrive --daemon --config=/sdcard/rclone.conf --gid 9997 --dir-perms 0771 --file-perms 0660 --umask=0 --allow-other --cache-dir /storage/emulated/0/.cache --vfs-cache-mode full --vfs-cache-max-age 2h0m0s --vfs-cache-poll-interval 5m0s

1voto

MountainX Points 607

Créez un fichier nommé rclone_mount.sh (ou tout autre nom de votre choix). Mon PC fonctionne sous Linux, je n'ai donc pas à me soucier des fins de ligne.

Ajoutez-y ces commandes :

#!/system/bin/sh

export RCLONE_CONFIG=/data/data/org.galexander.sshd/files/rclone.conf;

rclone mount mypcloud: /mnt/runtime/write/emulated/0/mypcloud --gid 9997 --dir-perms 0771 --file-perms 0660 --umask=0 --allow-other --cache-dir /storage/emulated/0/.cache --vfs-cache-mode full --vfs-cache-max-age 48h0m0s --vfs-cache-poll-interval 2m0s

Définissez vos options rclone dans la commande ci-dessus comme vous le souhaitez.

Envoyez le fichier du PC vers l'appareil Android. J'utilise scp comme ceci :

scp -P 2222 rclone_mount.sh  192.168.1.123:~/

Sur mon appareil Android, installez le fichier :

mount -o rw,remount /system
cp /data/data/org.galexander.sshd/files/rclone_mount.sh /system/su.d/
chmod 700 /system/su.d/rclone_mount.sh
chown root:root /system/su.d/rclone_mount.sh
mount -o ro,remount /system

La partie la plus difficile est probablement de trouver un emplacement pour le script où il sera exécuté automatiquement au démarrage du téléphone. Comme j'ai SuperSU, le choix a été plus facile : /system/su.d/ .

Pour toutes les raisons indiquées dans le PO, mon script était plus simple que ce à quoi on aurait pu s'attendre. Comme il s'exécute au démarrage, il n'y a pas besoin de vérifier/démonter les remotes. Je n'ai pas besoin de définir LD_LIBRARY_PATH. Je n'ai pas besoin de devenir su (car il est exécuté par SuperSU), etc. C'est un script très simple.

Attention : je ne l'ai testé qu'une fois jusqu'à présent. Je suis ouvert aux suggestions et je l'utiliserai intensivement dans les jours/semaines à venir, il se peut donc que je découvre des problèmes à corriger.

1 votes

C'est bien que la solution ait fonctionné pour vous. Mais je dirais que c'est une solution incomplète. /system n'est pas un point de montage de partition sur les périphériques SAR. Montage de /system Pauses RW dm-verity . su.d n'est pas un répertoire standard. Si rclone est démonté, vous devrez redémarrer le périphérique pour le remonter. // Réponses plus explicatives : Comment lancer un exécutable au démarrage et le maintenir en fonctionnement ? y Comment puis-je exécuter un script au démarrage ?

0 votes

@IrfanLatif - merci pour vos commentaires. Oui, c'est définitivement incomplet et grossier. Je veux l'améliorer. La plupart des réponses que vous avez indiquées concernent Magisk, que je n'ai pas. Mais je vais les relire pour voir ce que je peux faire d'autre sans Magisk, et je me réjouis de toute suggestion spécifique de votre part.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X