1 votos

Cómo añadir el bootup personalizado script a Android-x86 Nougat

He sido feliz usando Android-x86 Nougat en mi sistema. Gracias a todos los que han hecho que funcione. Ahora estoy tratando de hacer un pequeño cambio que es que quiero ejecutar una costumbre init script (un script de shell) en el arranque.

Parecía una idea sencilla que he hecho antes en KitKat sin problemas. He modificado init.rc y he añadido un servicio para iniciar mi script. Pero lo que pasa es que en el arranque, veo:

04-17 13:16:14.823  1210  1210 I init    : type=1400 audit(0.0:6): avc: denied { execute_no_trans } for path="/system/bin/mystart" dev="loop1" ino=280 scontext=u:r:init:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=1

Ese error es un error de permisos de SELinux, así que procedí a probar estas soluciones:

  1. Desactivación de SElinux

    write /sys/fs/selinux/enforce 0

    Y comprobado que esto hace que el sistema esté en modo permisivo pero al arrancar, sigue apareciendo el mismo error.

  2. Añadiendo una política personalizada de SELinux, añadí:

    build/target/board/generic/sepolicy/mystart.te
    type mystart, domain;
    type mystart_exec, exec_type, file_type;
    
    init_daemon_domain(mystart)

    Pero esto sigue sin permitir que el servicio continúe.

  3. Intenté ejecutarlo como una acción posterior:

    on property:dev.bootcomplete=1
    exec u:r:shell:s0 shell shell input log adb sdcard_rw sdcard_r net_bt_admin net_bt inet net_bw_stats -- /system/bin/sh /system/bin/mystart

    Esto sigue dando el mismo problema de avc.

Editar: Este problema es para un script de arranque (no un ejecutable ELF como en el otro caso) y además, como mencioné anteriormente, al desactivar SELinux enforce no se permite la ejecución del script.

0voto

Jack Wade Puntos 231

La negación de la avc que tienes dice eso:

init se ejecuta con su contexto u:r:init:0 , quieres que se ejecute /system/bin/mystart (script, binario, lo que sea) que está etiquetado como u:object_r:system_file:s0 . Pero init no se puede ejecutar system_file en sepolio. Sin embargo, usted ha establecido SELinux permisivo, por lo que es sólo una advertencia, no la negación real.

Por lo tanto, no es necesario hacer nada con SELinux a menos que lo configure como forzoso. Debe haber algún otro problema con tu shell script. Poner set -x; exec >/data/media/0/mystart.log 2>&1 al principio de tu script para ver qué ocurre cuando se ejecuta.

RELACIONADO: ¿Cómo ejecutar un ejecutable en el arranque y mantenerlo en funcionamiento?

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