Ao olhar em volta do meu sistema de arquivos Android, descobri que ele realmente tinha um /etc/init.d/
diretório. Depois de espreitar por aí, encontrei /etc/init.d/20userinit
as seguintes linhas:
if [ -e /data/local/userinit.sh ];
then
log -p -i -t userinit "Executing /data/local/userinit.sh";
busybux chmod +x /data/local/userinit.sh;
logwrapper /system/bin/sh /data/local/userinit.sh;
setprop cm.userinit.active 1;
fi;
Sendo este, é claro, exatamente o que eu precisava, escrevi o seguinte script no meu computador e o enviei ao meu dispositivo:
#!/system/bin/sh
dropbear -s -g
(enviado para o dispositivo via scp userinit.sh phone:/data/local/userinit.sh
, lembre-se:])
Reinicie o dispositivo, depois execute ps | grep "[d]ropbear"
e, com certeza, está em execução. Frieza!
/data/init.sh
é executado na inicialização, se você tiver root, poderá editá-lo como quiser. Seja cuidadoso ;)Editar: Aparentemente, talvez você precise calçar o script editado na imagem de inicialização também. Informações sobre como fazer isso aqui: http://forum.xda-developers.com/showthread.php?t=443994
fonte
find / -name "init.sh"
algo aparece. Existem outros scripts executados na inicialização?/etc/init.rc
que inicie o shell. Ele deve chamar init.sh, mas se não, você pode simplesmente chamar seu próprio script./data
mas não/data/init/.sh
ou/etc/init.rc
. O Grep não encontra nenhuma instância interessante da stringinit
em/etc
(mesmo recursiva).Olhe para o
/etc/
diretório. Geralmente é colocado em uma/system/
partição que você pode montar como RW:Algumas etapas acima podem ser substituídas por:
e depois remontar o RO:
Agora, sua tarefa de encontrar executável ou
*rc
arquivo que você modifica para atingir seu objetivo:Google sobre cada candidato para saber como esse arquivo foi usado.
Um bom candidato para incluir scripts personalizados são as linhas de:
Como cada dispositivo é único, pode ser necessário adivinhar os critérios de pesquisa ...
Por exemplo, descobri
/etc/mkshrc
qual usado pelo shell Korn. Eu atualizo este arquivo para estenderPATH
env var e agora, toda vez queadb shell
tenho, tenho links simbólicos do Busybox no meu PATH!Veja também o caminho difícil (se você não tiver sorte em encontrar o arquivo mágico ): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
fonte
/system
estásystem.img
e/etc
é um link simbólico para/system
.Eu tentei todos esses métodos e nenhum deles funcionou para mim. O que funcionou, no entanto, foi baseado na resposta de lord-ralf-adolf aqui Como executar um script de inicialização no CM12.1?
basicamente, encontre o arquivo
/system/etc/install-recovery.sh
e adicione a seguinte linha no início/data/init.sh &
então
Feito! Agora você pode colocar o que quiser
/data/init.sh
e ele será executado na inicialização. Se o arquivo/system/etc/install-recovery.sh
não estiver no seu sistema, esta resposta não funcionará para você. Não se preocupe em criá-lo.fonte
/system/etc/install-recovery.sh
não estava presente, mas ele ainda é executado na inicialização, se presente, então vale a pena conferir.As coisas eram simples antes do Android 5, quando o SELinux não era
enforcing
. Você pode colocar seu código em qualquer script ou substituir um binário por script que foi executado com privilégios de root na inicialização. Outro método foi definir uminit
serviço personalizado especificamente para executar scripts em lote de algum diretório.Baseado nessas abordagens desenvolvedores ROM personalizado introduzidas diferente pseudo-
init.d
fenômeno 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.No entanto, um processo em execução com o UID,
0
mas em um contexto restrito do SELinux, é bastante impotente. Um serviço começou eminit.rc
arquivo comu:r:init:s0
contexto não pode mesmo executar um script shell a partir/system/bin/
, por isso as necessidades da política SELinux para ser corrigido para injetar um irrestrito contexto por exemplo Magisk defineu:r:magisk:s0
. Depois disso, é possível executar um script diretamente comoinit
serviço ou noinit.d
diretório -like.Para obter detalhes, consulte Como executar um executável na inicialização e mantê-lo em execução?
fonte
Maneira simples (trabalhando):
Prepare seus comandos pós-inicialização em um script, diga / system / xbin / post-boot (set exec perm)
Adicione o caminho do script personalizado acima no final de /system/etc/init.qcom.post_boot.sh
Por exemplo:
echo / system / xbin / pós-inicialização >> /system/etc/init.qcom.post_boot.sh
Feito!
(Se você não conseguir encontrar o qcom post_boot (dispositivos Qualcomm), procure por scripts post_boot)
fonte
Se você tiver o magisk instalado, poderá colocar o .sh em:
ou para
Não se esqueça de torná-lo executável:
chmod +x your-script.sh
.Mais informações: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
fonte