Estoy acostumbrado a ejecutar scripts al iniciar en Linux, pero no estoy seguro de cómo hacerlo en Android. Me gustaría iniciar mi demonio SSH al arrancar, para poder conectarme siempre. ¿Cómo puedo ejecutar un script arbitrario al arrancar en Android? Sería preferible hacerlo fuera de Dalvik.
Respuestas
¿Demasiados anuncios?Forma simple (funcionando):
-
Prepara tus comandos post-arranque en un script, digamos
/system/xbin/post-boot
(establece permisos de ejecución) -
Agrega la ruta del script personalizado anterior al final de
/system/etc/init.qcom.post_boot.sh
, por ejemplo,# echo /system/xbin/post-boot >> /system/etc/init.qcom.post_boot.sh
¡Listo!
(Si no puedes encontrar el qcom.post_boot.sh
(dispositivos Qualcomm), busca algún script de post_boot
)
Las cosas eran simples antes de Android 5 cuando SELinux no estaba aplicando
. Podías poner tu código en cualquier script o reemplazar un binario con un script que se ejecutaba con privilegios de root al arrancar. Otro método era definir un servicio init
personalizado específicamente para ejecutar scripts en lotes desde algún directorio.
Basándose en estos enfoques, los desarrolladores de ROM personalizadas introdujeron diferentes fenómenos pseudo-init.d
como /etc/init.d/
, /etc/install-recovery.sh
, /etc/init.qcom.post_boot.sh
, /system/bin/debuggerd
, /data/init.sh
, /data/local/userinit.sh
, /data/local/init.d/
, etc.
Sin embargo, un proceso que se ejecuta con UID 0
pero en un contexto SELinux restringido es bastante indefenso. Un servicio iniciado en el archivo init.rc
con el contexto u:r:init:s0
ni siquiera puede ejecutar un script de shell desde /system/bin/
, por lo que la política SELinux debe ser parcheada para inyectar un contexto sin restricciones, por ejemplo, Magisk define u:r:magisk:s0
. Después de eso, es posible ejecutar un script directamente como servicio init
o desde un directorio similar a init.d
.
Para más detalles, consulta ¿Cómo ejecutar un ejecutable al arrancar y mantenerlo en funcionamiento?
- Ver respuestas anteriores
- Ver más respuestas