1 votos

¿Cómo automatizar rclone-mount sin Termux o Magisk?

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)?

1voto

MountainX Puntos 280

Cree un archivo llamado rclone_mount.sh (o cualquier nombre que elijas). Mi PC funciona con Linux, así que no tengo que preocuparme por los finales de línea.

Añade estos comandos:

#!/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

Establezca las opciones de rclone en el comando anterior como desee.

Enviar el archivo desde el PC al dispositivo Android. Yo uso scp así:

scp -P 2222 rclone_mount.sh  192.168.1.123:~/

En mi dispositivo Android, instalar el archivo:

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 parte más difícil de esto es probablemente encontrar una ubicación para el script donde se ejecutará automáticamente cuando el teléfono arranque. Como tengo SuperSU, la elección fue más fácil: /system/su.d/ .

Por todas las razones indicadas en el OP, mi script era más sencillo de lo que cabría esperar. Como se ejecuta en el arranque, no hay necesidad de comprobar/desmontar las remotas. No necesito establecer LD_LIBRARY_PATH. No necesito convertirme en su (ya que lo ejecuta SuperSU), etc. Es un muy simple script.

Advertencia: hasta ahora sólo lo he probado una vez. Estoy abierto a sugerencias y lo utilizaré mucho en los próximos días/semanas, por lo que es posible que encuentre problemas que deban solucionarse.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X