Quiero usar rclone-mount en Android para montar directorios remotos desde mi propio servidor así como desde pCloud. Quiero que los puntos de montaje se establezcan automáticamente en el momento del arranque y que permanezcan montados todo el tiempo.
Todavía no he podido instalar Magisk en este dispositivo. Ver ¿Cómo instalar Magisk sin un bootloader desbloqueado?
He probado el siguiente método de montaje de rclones con Termux:
¿Cómo montar rclone en Android?
Lamentablemente, eso da lugar a errores de permisos que no he podido resolver. He publicado una pregunta al respecto aquí:
scripts - ¿Cómo utilizar rclone-mount con Termux:Boot?
Eso sigue sin resolverse. He trabajado en esto durante muchas horas, así que podría añadir más información a mi otra pregunta si es necesario. Sin embargo, con la ayuda de @alecxs probé otro enfoque y resolví los errores de permiso. Ahora rclone
Ahora puedo montar con éxito tanto pcloud como mi propio servidor cuando ejecuto los comandos en la CLI.
Mi pregunta actual es, ¿cómo automatizar esto sin Termux:Boot o Magisk? No puedo instalar Magisk y Termux me dio toneladas de problemas durante un par de semanas y sólo conseguí que esto funcionara deshaciéndome de Termux. De nuevo, vea la pregunta anterior si cree que sabe la razón de los problemas de Termux).
Como antecedente, y para posiblemente ayudar a otros, estoy enumerando todos mis pasos hasta ahora ya que los comandos están funcionando y esto podría ser un complemento útil para Irfan Latif que me ayudó a empezar con rclone-mount en Android.
- eliminado Termux (y verificado que todos los archivos han desaparecido)
- eliminado la aplicación Magisk (el módulo nunca se instaló)
- conservó el SuperSU original v2.82 (y verificó que no tiene rastreadores)
- dio permisos de acceso a la red a las aplicaciones que se ejecutan bajo Root en AFWall+
- Utilicé la aplicación "Simple SSHD" (de F-Droid) para acceder al dispositivo vía SSH (desde mi PC)
- Ya tengo un archivo rclone.conf que funciona
- mi env var
LD_LIBRARY_PATH
está vacío y no tuve que modificarlo con este método - mi dispositivo es Arm64
echo $PATH
=/sbin:/system/sbin:/system/bin:/system/xbin
y pongo los binarios en/system/bin
EDITAR: @alecxs señaló que estos binarios personalizados deberían haber sido instalados en/system/xbin
.
En primer lugar, puse los binarios en los directorios correctos de mi dispositivo Android:
cd /path/to/files/gocryptfs_fusermount-ARMHF_2021-01-13/
NOTA: el binario de fusermount viene de XDA / mirfatif: https://forum.xda-developers.com/m/mirfatif.7805402/ Fusermount en Android (rclone mount) Foros XDA
$ scp -P 2222 fusermount 192.168.1.123:~/
En Android, conviértete en superusuario:
su
instalar el binario de 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
comprobar el contexto SELinux y los permisos DAC:
# 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
Instale el binario oficial de rclone: NOTA: El binario de rclone que estoy usando es de: https://beta.rclone.org/test/testbuilds-latest/rclone-Android-21-armv8a.gz
Lo tengo en mi teléfono en: /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
Opcional (si es necesario, restaurar el contexto de SELinux -- yo no necesité hacerlo):
restorecon -F /system/bin/rclone
restorecon -F /system/bin/fusermount
Terminado, así que monte de nuevo de sólo lectura:
mount -o ro,remount /system
Comprueba el espacio de nombres de montaje:
# readlink /proc/1/ns/mnt
mnt:[4026531840]
# readlink /proc/self/ns/mnt
mnt:[4026531840]
Si no coinciden, ejecute el siguiente comando. (Los míos coinciden)
nsenter -t 1 -m -- "$0"
Compruebe que el mando no está ya montado:
# ls -la /mnt/runtime/write/emulated/0/mypcloud/
Establecer env var para rclone config:
export RCLONE_CONFIG=/data/data/org.galexander.sshd/files/rclone.conf
Ahora monte manualmente el remoto usando 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
¡Éxito!
para desmontar:
fusermount -u /mnt/runtime/write/emulated/0/mypcloud
Realmente no hay nada nuevo en los pasos anteriores que Irfan Latif no se ha discutido ya. Sin embargo, hay diferencias. Por ejemplo, no he tenido que poner LD_LIBRARY_PATH
. Además, rclone emite esta advertencia:
WARNING: linker: /system/bin/rclone: unsupported flags DT_FLAGS_1=0x8000001
Sin embargo, eso no parece ser un problema. También muestro más información sobre los contextos de SELinux y algunas otras cosas. Hay suficientes diferencias con respecto a la respuesta existente como para que mis pasos puedan ayudar a alguien más con su propia solución de problemas.
Ahora, mi pregunta principal ¿Cómo puedo automatizar esto en el arranque sin Termux:Boot o Magisk? Supongo que podría poner un script en el init en alguna parte, pero agradecería una respuesta experta. He revisado un montón de respuestas sobre init.rc y la ejecución de scripts en el arranque. En su mayoría me han remitido a soluciones obsoletas para Android 4.x y tampoco tratan la cuestión de cómo manejar el caso de arrancar cuando no hay conexión de red disponible.
EDITAR: @alecxs ha aportado la siguiente idea para arrancar cuando no hay conexión de red:
until dumpsys connectivity | grep -iq state..connected
do
sleep 1
done && rclone <...> &
Mi dispositivo está ejecutando Android 7.0 (US Samsung Galaxy S8). Está rooteado, tengo verdadero Root, tiene SuperSu 2.82, SELinux es permisivo, y puedo volver a montar /system rw (como se muestra arriba). Tengo el /system/su.d/
directorio.
También, pregunta relacionada, ¿dónde es una buena / ubicación segura (ruta) en mi dispositivo Android para mantener mi token pcloud y mi clave ssh privada (para el servidor SFTP remoto)?