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 nouveauanything.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 endroit1 votes
@alecxs
/etc
Le lien symbolique a toujours pointé vers/system/etc
.