O
ooo
Enthusiast
- 3.449
[E 2015][Stock-ROM][MOD] Fehlendes init.d für Start-Scripte einrichten (über su.d - SuperSU Daemon)
Root erforderlich.
Hier wird (exemplarisch für ein Moto E 2015) beschrieben, wie man trotzdem an funktionierende init.d-Start-Scripte kommen kann, wenn andere einschlägige Möglichkeiten versagt haben.
Das Problem
Besonders Lollipop-Stock-ROMs weigern sich gerne beharrlich, sich ein funktionierendes init.d abringen zu lassen (Security-Enhanced Linux - SELinux Enforcing - strict mode).
Die Lösung
Die angehängte Datei mit TWRP Recovery installieren und neu starten stellt init.d zur Verfügung.
Vorbemerkungen
Voraussetzungen
Checkliste
Was bringt das jetzt?
Ab diesem Zeitpunkt kann man im Verzeichnis /system/etc/init.d/ beliebige (eigene) Start-Scripte anlegen, die bestimmte Dinge erledigen (Tweaks, Mods, Performance-/Kernel-Parameter-Tuning, Starten von Servern - z. B. SSH etc.), die vor dem Start von Android erledigt werden sollen. - Oder für die Windows-Nutzer einfach ausgedrückt: Man hat so etwas, wie eine funktionierende C:\autoexec.bat.
Manche installierbaren (Root-)Apps benötigen/benutzen auch selbst init.d-Scripte, um korrekt Laufen zu können.
Ein wichtiges Beispiel ist das Sperr-Script der AFWall+ Firewall (Datei /system/etc/init.d/afwallstart).
Diese Datei wird mit der Option "Start-Datenleck Fix" in den Einstellungen der Firewall aktiviert bzw. angelegt.
Mit dieser Einstellung wird verhindert, dass Daten von anderen Apps in das Internet gesendet werden, bevor die Firewall selbst startet.
Ohne das erzeugte init.d-Script (afwallstart) kann man das nicht verhindern, wenn man das W-LAN und/oder die Mobilen Daten beim Start bereits aktiviert hat.
Ohne die in der Stock-ROM fehlende init.d-Unterstützung hat man bereits "verloren".
Was macht die angehängte Flashable-zip-Datei jetzt?
Die Datei legt in der system-Partition die Verzeichnisse
mit den benötigten Berechtigungen an.
Zusätzlich wird die benötigte busybox binary im Verzeichnis /system/xbin/ angelegt.
Diese Datei ist aus einer CM12.1 ROM entnommen (cm-12.1-20150908-UNOFFICIAL-surnia-44.zip von scritch007 @ xda) und sollte (nebenbei gesagt) in keiner gerooteten ROM fehlen.
Im Verzeichnis /system/su.d/ befindet sich danach die ausführbare Script-Datei runpartsinitd, die bei jedem Start vom SuperSU-Daemon aufgerufen wird.
(Deswegen müssen auch als Voraussetzung die App SuperSU bzw. die su binaries installiert sein.)
Die Script-Datei runpartsinitd ruft dann ihrerseits alle im Verzeichnis /system/etc/init.d/ liegenden init.d-Scripte (in deren alphabetischen Reihenfolge) auf.
(Was eigentlich ab hier das Standard-Verhalten ist, wenn ein Kernel/Boot-Image init.d-fähig ist.- Nicht jedoch in einer beschnittenen Stock-ROM.)
Im Verzeichnis /system/etc/init.d/ liegen nach der Installation zunächst die beiden (Text-)Dateien (= init.d-Scripte)
Die Datei afwallstart wird eigentlich von der Firewall-App AFWall+ verwaltet (s. o. Einstellungen in AFWall+) und sollte auch gelöscht werden, wenn AFWall+ nicht installiert ist.
(Tipp: Bitte dringend AFWall+ installieren und korrekt einrichten, falls noch immer nicht geschehen. - Die NSA ist absolut harmlos im Vergleich mit der Gesamt-Situation ...)
Die (Text-)Datei 99userinit sieht nach, ob im Verzeichnis /data/local/ die ausführbare Datei userinit.sh liegt.
Ist dies der Fall, wird die Datei automatisch ausgeführt (das ist die identische Mimik, wie bei einer CyanogenMod Custom ROM, die init.d bereits integriert mitbringt).
Man kann jetzt entweder in /system/etc/init.d/ eigene Scripts hineinpacken (Nachteil: bei system-Wipes ist dort alles weg) oder die Datei /data/local/userinit.sh als "hook" benutzen, um dort die eigenen Start-Tweaks zu integrieren.
Die Datei /data/local/userinit.sh wird zwar aufgerufen, macht aber inhaltlich noch nichts. - Sie ist eine änderbare Dummy-Datei, in der man eigene Ideen umsetzen kann.
Tipp:
Um herauszufinden, ob ein init.d-Start-Script funktioniert, kann man sich Datum/Uhrzeit und den Datei-Pfad des Scripts in eine Log-Datei schreiben lassen.
Wenn das Script korrekt ausgeführt wird, enthält die Log-Datei einen neuen Eintrag, anderenfalls fehlt dieser.
In der Datei /system/etc/init.d/99userinit ist diese Zeile vorbereitet und auskommentiert (ein "#" am Anfang der Zeile) = Logging ausgeschaltet.
Wird dieses "#" entfernt und die Datei abgespeichert, so wird die Log-Datei (im Beispiel /data/local/sud.ooo; man kann das auch für eigene Zwecke abändern) bei jedem Start beschrieben, wenn das Start-Script korrekt läuft.
Zum Deaktivieren kommentiert man die Zeile wieder mit "#" am Anfang aus. - Die Log-Datei /data/local/sud.ooo kann man jederzeit löschen.
Wie bekommt man das alles wieder weg?
Einfach die Verzeichnisse
komplett und die Datei
mit einem Root-fähigen Datei-Manager löschen (z. B. fx File Explorer + fx Root Add-on oder Amaze).
Viel Erfolg beim Ausprobieren!
_
Root erforderlich.
Hier wird (exemplarisch für ein Moto E 2015) beschrieben, wie man trotzdem an funktionierende init.d-Start-Scripte kommen kann, wenn andere einschlägige Möglichkeiten versagt haben.
Das Problem
Besonders Lollipop-Stock-ROMs weigern sich gerne beharrlich, sich ein funktionierendes init.d abringen zu lassen (Security-Enhanced Linux - SELinux Enforcing - strict mode).
Die Lösung
Die angehängte Datei mit TWRP Recovery installieren und neu starten stellt init.d zur Verfügung.
Vorbemerkungen
- Bitte immer ein Backup machen, bevor man etwas tut
- Die Benutzung der verlinkten Informationen und Software erfolgt auf eigenes Risiko
- Dieses How-to ist nicht für Leute mit einer Custom ROM, die bereits init.d integriert hat. - Also z. B. bei einer CyanogenMod ROM bitte nicht benutzen
- Dieses How-to ist für Leute mit einer SuperSU-gerooteten Stock-ROM ohne init.d-Unterstützung
Voraussetzungen
- Moto E 2015 4g/LTE (2. Generation), es sollte aber mit allen aktuellen, mit SuperSU gerooteten Lollipop-Motos funktionieren (Moto E, E2, G, G LTE, G2, G2 LTE, G3, X, X2, X Play etc.); und evtl. auch mit Geräten anderer Hersteller (noch nicht getestet)
- (Motorola) Stock-ROM (Android 5.x.x Lollipop) == kein Custom ROM, welches bereits init.d-Unterstützung besitzt
- Optional: Installierte USB-Treiber (Windows)
- Optional: Funktionierendes ADB/Fastboot (Linux/Windows), für fastboot boot <twrp-recovery.img> bzw. adb sideload <flashable.zip>
- Optional: Root-fähiger Datei-Manager (z. B. fx File Explorer mit fx File Explorer (root add.on), Amaze)
- Erforderlich: Bootloader bereits entsperrt (zum Starten eines TWRP Recovery/Rooten, Schreiben auf die system-Partition)
- Erforderlich: TWRP Recovery (entweder zum Booten vom Rechner via fastboot aus oder bereits geflasht)
- Erforderlich: Stock-ROM korrekt gerootet mit UPDATE-SuperSU-v2.46.zip (su binaries und App SuperSU installiert)
Checkliste
- Die Datei ooo-initd-v1-for-moto-e2-rooted-stock-rom.flashable.zip auf die SD Card herunterladen
- In das TWRP Recovery booten
- Dort [ Install ] > /sdcard/ooo-initd-v1-for-moto-e2-rooted-stock-rom.flashable.zip ausführen
- Abschließend mit [ Reboot System ] neu starten
Was bringt das jetzt?
Ab diesem Zeitpunkt kann man im Verzeichnis /system/etc/init.d/ beliebige (eigene) Start-Scripte anlegen, die bestimmte Dinge erledigen (Tweaks, Mods, Performance-/Kernel-Parameter-Tuning, Starten von Servern - z. B. SSH etc.), die vor dem Start von Android erledigt werden sollen. - Oder für die Windows-Nutzer einfach ausgedrückt: Man hat so etwas, wie eine funktionierende C:\autoexec.bat.
Manche installierbaren (Root-)Apps benötigen/benutzen auch selbst init.d-Scripte, um korrekt Laufen zu können.
Ein wichtiges Beispiel ist das Sperr-Script der AFWall+ Firewall (Datei /system/etc/init.d/afwallstart).
Diese Datei wird mit der Option "Start-Datenleck Fix" in den Einstellungen der Firewall aktiviert bzw. angelegt.
Mit dieser Einstellung wird verhindert, dass Daten von anderen Apps in das Internet gesendet werden, bevor die Firewall selbst startet.
Ohne das erzeugte init.d-Script (afwallstart) kann man das nicht verhindern, wenn man das W-LAN und/oder die Mobilen Daten beim Start bereits aktiviert hat.
Ohne die in der Stock-ROM fehlende init.d-Unterstützung hat man bereits "verloren".
Was macht die angehängte Flashable-zip-Datei jetzt?
Die Datei legt in der system-Partition die Verzeichnisse
/system/su.d/
/system/etc/init.d/
/system/etc/init.d/
mit den benötigten Berechtigungen an.
Zusätzlich wird die benötigte busybox binary im Verzeichnis /system/xbin/ angelegt.
Diese Datei ist aus einer CM12.1 ROM entnommen (cm-12.1-20150908-UNOFFICIAL-surnia-44.zip von scritch007 @ xda) und sollte (nebenbei gesagt) in keiner gerooteten ROM fehlen.
Im Verzeichnis /system/su.d/ befindet sich danach die ausführbare Script-Datei runpartsinitd, die bei jedem Start vom SuperSU-Daemon aufgerufen wird.
(Deswegen müssen auch als Voraussetzung die App SuperSU bzw. die su binaries installiert sein.)
Die Script-Datei runpartsinitd ruft dann ihrerseits alle im Verzeichnis /system/etc/init.d/ liegenden init.d-Scripte (in deren alphabetischen Reihenfolge) auf.
(Was eigentlich ab hier das Standard-Verhalten ist, wenn ein Kernel/Boot-Image init.d-fähig ist.- Nicht jedoch in einer beschnittenen Stock-ROM.)
Im Verzeichnis /system/etc/init.d/ liegen nach der Installation zunächst die beiden (Text-)Dateien (= init.d-Scripte)
afwallstart
99userinit
99userinit
Die Datei afwallstart wird eigentlich von der Firewall-App AFWall+ verwaltet (s. o. Einstellungen in AFWall+) und sollte auch gelöscht werden, wenn AFWall+ nicht installiert ist.
(Tipp: Bitte dringend AFWall+ installieren und korrekt einrichten, falls noch immer nicht geschehen. - Die NSA ist absolut harmlos im Vergleich mit der Gesamt-Situation ...)
Die (Text-)Datei 99userinit sieht nach, ob im Verzeichnis /data/local/ die ausführbare Datei userinit.sh liegt.
Ist dies der Fall, wird die Datei automatisch ausgeführt (das ist die identische Mimik, wie bei einer CyanogenMod Custom ROM, die init.d bereits integriert mitbringt).
Man kann jetzt entweder in /system/etc/init.d/ eigene Scripts hineinpacken (Nachteil: bei system-Wipes ist dort alles weg) oder die Datei /data/local/userinit.sh als "hook" benutzen, um dort die eigenen Start-Tweaks zu integrieren.
Die Datei /data/local/userinit.sh wird zwar aufgerufen, macht aber inhaltlich noch nichts. - Sie ist eine änderbare Dummy-Datei, in der man eigene Ideen umsetzen kann.
Tipp:
Um herauszufinden, ob ein init.d-Start-Script funktioniert, kann man sich Datum/Uhrzeit und den Datei-Pfad des Scripts in eine Log-Datei schreiben lassen.
Wenn das Script korrekt ausgeführt wird, enthält die Log-Datei einen neuen Eintrag, anderenfalls fehlt dieser.
In der Datei /system/etc/init.d/99userinit ist diese Zeile vorbereitet und auskommentiert (ein "#" am Anfang der Zeile) = Logging ausgeschaltet.
Wird dieses "#" entfernt und die Datei abgespeichert, so wird die Log-Datei (im Beispiel /data/local/sud.ooo; man kann das auch für eigene Zwecke abändern) bei jedem Start beschrieben, wenn das Start-Script korrekt läuft.
Zum Deaktivieren kommentiert man die Zeile wieder mit "#" am Anfang aus. - Die Log-Datei /data/local/sud.ooo kann man jederzeit löschen.
Wie bekommt man das alles wieder weg?
Einfach die Verzeichnisse
/system/su.d/
/system/etc/init.d/
/system/etc/init.d/
komplett und die Datei
/data/local/userinit.sh
mit einem Root-fähigen Datei-Manager löschen (z. B. fx File Explorer + fx Root Add-on oder Amaze).
Viel Erfolg beim Ausprobieren!
_
Anhänge
-
ooo-initd-v1-for-moto-e2-rooted-stock-rom.flashable.zip587,9 KB · Aufrufe: 485
-
Screenshot_2015-02-07-20-55-12.png10,5 KB · Aufrufe: 450
-
Screenshot_2015-02-07-20-55-22.png8,8 KB · Aufrufe: 435
-
Screenshot_2015-02-07-20-55-42.png11,8 KB · Aufrufe: 430
-
Screenshot_2015-02-07-20-55-50.png7,1 KB · Aufrufe: 433
-
Screenshot_2015-02-07-20-56-02.png9,5 KB · Aufrufe: 454
-
Screenshot_2015-02-07-20-56-22.png9,2 KB · Aufrufe: 465
-
Screenshot_2015-02-07-20-58-03.png15,7 KB · Aufrufe: 449
-
Screenshot_2015-02-07-20-58-25.png8,6 KB · Aufrufe: 456
-
Screenshot_2015-02-07-21-06-20.png13,9 KB · Aufrufe: 477
Zuletzt bearbeitet: