1 votes

Ajouter un script de démarrage personnalisé à Android-x86 Nougat

J'ai été heureux d'utiliser Android-x86 Nougat sur mon système. Merci à tous ceux qui ont fait en sorte que cela fonctionne. J'essaie maintenant de faire un petit changement qui est que je veux exécuter un personnalisé. init (un script shell) au démarrage.

C'est une idée simple que j'ai déjà faite sur KitKat sans problème. J'ai modifié init.rc et j'ai ajouté un service pour lancer mon script. Mais ce qui se passe, c'est qu'au démarrage, je vois :

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

Cette erreur est une erreur de permission SELinux, j'ai donc essayé les solutions suivantes :

  1. Désactivation de SElinux

    write /sys/fs/selinux/enforce 0

    J'ai vérifié que le système se mettait en mode permissif, mais au démarrage, la même erreur se produit toujours.

  2. En ajoutant une politique SELinux personnalisée, j'ai ajouté :

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

    Mais cela ne permet toujours pas au service de se dérouler.

  3. J'ai essayé de l'exécuter en tant que post action :

    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

    Le problème de l'avc reste le même.

Editer : Ce problème concerne un script de démarrage (et non un exécutable ELF comme dans l'autre cas) et, en outre, comme je l'ai mentionné ci-dessus, la désactivation de SELinux enforce ne permet pas au script d'être exécuté.

0voto

Irfan Latif Points 16863

C'est ce que dit le démenti de l'AVC que vous avez reçu :

init est en cours d'exécution avec son contexte u:r:init:0 vous voulez qu'il exécute /system/bin/mystart (script, binaire, etc.) qui est étiqueté en tant que u:object_r:system_file:s0 . Mais init n'est pas autorisé à exécuter system_file en matière de politique. Cependant, vous avez défini SELinux permissive, il s'agit donc d'un simple avertissement et non d'un refus réel.

Par conséquent, vous n'avez rien à faire avec SELinux à moins que vous ne le configuriez pour qu'il s'applique. Il doit y avoir un autre problème avec votre script shell. Mettez set -x; exec >/data/media/0/mystart.log 2>&1 au début de votre script pour voir ce qui se passe lorsqu'il est exécuté.

RELATED : Comment lancer un exécutable au démarrage et le maintenir en activité ?

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X