Workshop Rom köcheln

  • Antworten:10
Martin
  • Forum-Beiträge: 861

12.10.2011, 08:18:21 via Website

Ich möchte Euch einmal zeigen, wie man sich mit einfachen Mitteln eine eigene Rom zurechtstellt,
die über CWM installiert werden kann.
Da die Meisten unter Euch mit Linux ehr wenig Erfahrung haben, werde ich mich hier einmal auf Windows beziehen.
Anleitungen für Linux gibt es genug.

Was brauchen wir dazu:

Eine Rom von Samsung
www.samfirmware.com
www.sammobile.com

Ein Iso Tool
IsoBuster (Kaufversion)
UltraIso
http://www.ezbsystems.com/enindex.html

Einen Editor, der Text im Unix Format speichert
Ultraedit (Kaufversion)
NoteTab
TextPad
... der Windows Editor kann das nicht.

7Zip
http://www.7-zip.org/
WinRar
http://www.winrar.de/

Ebenfalls benötigt Ihr von Google den META-INF Ordner, den kann man sich auch aus einem CWM Installationspaket hohlen.
Titanium Backup erstellt ebenfalls diesen Ordner, wenn man Titanium Backup als update.zip ertsellen lässt.
Ebenfalls der SGS Kernelflasher, wenn Ihr ein Backup vom Kernel macht.

Das Systemverzeichnis /system auf den Rechner bringen

als erstes wollen wir das System auf unseren Rechner bringen, damit wir die Rom unseren Wünschen anpassen können.
Dazu gibt es mehrere Wege.

Direkt vom Handy aus
Wer bereits eine abgespeckte und sauber laufende Rom auf seinem Handy hat,
kann das Verzeichnis /system einfach auf die SD Karte kopieren oder über das Netzwerk auf den heimischen PC.
Dazu muß das Verzsichnis mit dem Root Explorer schreibbar gemacht werden (r/w)
Dann kopiert einfach das komplette Verzeichnis /system auf die SD Karte, um es später auf den PC zu kopieren,
oder über das Netzwerk direkt auf den PC, am besten in ein eigenes Verzeichnis.
Zum Beispiel MeineRom.
Ihr habt dann MeineRom/system. Nutzt das Verzeichnis MeineRom,
oder wie auch immer Ihr es nennen möchtet als Arbeitsverzeichnis.
Ebenfalls empfehle ich odexed Roms zu verwenden.

Warnung
Gebt niemals eine Rom an Dritte weiter, die Ihr über das Handy kopiert habt und
wenn die Rom bereits von Euch an persönliche Accounts angemeldet war

Das System speichert Passwörter für Wlan Anmeldungen, Google Account usw in einigen
Systemdateien im Klartext. Wenn ich also weiss, wo ich suchen muss, würdet Ihr Eure
Passwörter mit einer solchen Rom preis geben.
Verwendet diese Roms also ausschließlich für private Zwecke.
Wer über das Handy eine Rom für Dritte erstellen möchte, sollte eine frisch installierte Rom nehmen
und sich bis zur Fertigstellung nirgends anmelden oder ein Passwort eingeben.

Für die nächste Methode gilt das natürlich nicht.

Mit einem Iso Tool
entpackt mit Winrar die factory.rfs aus dem tar Archiv der gewählten Samsung Firmware.
Bei der JVT wäre das die CODE_I9000XXJVT_CL617736_REV03_user_low_ship.tar.md5
Ihr könnt nun die factory.rfs mit dem Isotool öffnen.
Ich verwende UltraIso.
Wenn die factory.rfs nicht unter Dateiname angezeigt wird, weil die Endung nicht unterstützt wird, gebt *.rfs ein.
Dann sollte die factory.rfs als Auswahl erscheinen.
Extrahiert nun die komplette factory.rfs in ein Unterverzeichnis /system in Euer Arbeitsverzeichnis Eurer Wahl.
z.B. MeineRom

Wir haben nun das komplette Systemverzeichnis auf dem Rechner und können nun anfangen unnötige Apps
aus den Verzeichnis /app zu löschen.
Su, busybox und Superuser.apk hinzufügen, damit wir später auch eine Rom mit Superuser Rechten (root) erhalten.
Die build.prob anpassen, wenn man möchte; und auch einiges am Aussehen der Rom ändern (Theme)
Ebenso können wir eigene Anwendungen (Apps) hinzufügen, z.B. Titanium Backup.

Wer eine Samsung Firmware auf seinen Rechner extrahiert, bekommt diese dann odexed. Das hat den Vorteil,
dass odexed Roms schneller sind, als deodexed roms und nicht ganz so fehleranfällig.
Deodexed hat für mich nur einen Vorteil: Das Aussehen lässt sich einfacher anpassen.
Das aber nur mal am Rande.

Im nächsten Workshop werden wir, ein über CWM installierbares Paket erstellen
und einen entsprechenden Script schreiben, damit das System auch richtig installiert wird,
sowie rootrechte bekommt.

(gebt mir ein wenig Zeit, das zu schreiben.)

— geändert am 13.10.2011, 09:55:56

Wer nach einer Antwort sucht, wird niemals aufhören, zu fragen

Antworten
Martin
  • Forum-Beiträge: 861

12.10.2011, 08:18:35 via Website

Der META-INF Ordner

Als nächstes zeige ich, wie man sich eine update script erstellt,
damit die Rom später vom CWM installiert werden kann.
Diesen Schritt ziehe ich einmal vor, denn damit seid Ihr in der Lage
auch Anwendungen über das CWM zu installieren.

Im ersten Schritt haben wir die Rom auf den heimischen PC gebracht
und eventuell schon etwas daran angepasst.
Nun wollen wir das ganze auch installieren können
und dazu benötigen wir den META-INF Ordner.

Diesen Ordner bekommt Ihr aus jedem CWM Installationspaket,
aus einer custom rom, Titanium Backup, oder auch im Netz.
Sucht einfach nach "CWM META-INF"

Diesen Ordner kopieren wir komplett in unser Arbeitsverzeichnis.
Ich bleibe mal bei MeineRom.
Es sollten sich nun die Verzeichnisse /system und /META-INF in
MeineRom befinden.
Die Struktur von META-INF lassen wir, wie sie ist.
Uns interessiert nur die "updater-script" im Unterverzeichnis /android
Diese Datei öffnen wir in einem Editor, der im unix Format speichern kann.
Das ist wichtig, denn im reinen windows format, würde die Installation
später fehlschlagen. Daher können wir auch den Windows Editor nicht verwenden.

Das updater-script

Hier wird die Installation gesteuert.
Alle Befehel die nötig sind werden über das Script ausgeführt.
Dazu gehört:
Fortschritt auf dem Bildschirm anzeigen
Partitionen mounten
Partitionen auf dem Handy löschen und/oder formatieren
Das System und Anwendungen kopieren
Rechte anpassen
busybox, su und superuser.apk installieren (für root)
symlinks installieren
einen kernel flashen
Partitionen wieder aushängen (unmount)
... und vieles mehr
Es können auch weitere scripts aufgerufen werden, dazu später mehr ...
(Edit: nach mehrmaligen durchlesen, habe ich mich entschieden diesen Teil nochmal zu überarbeiten)

Als Erstes wollen Wir ein paar Rückmeldungen über den Verlauf der Installation.
Das geschieht über den Befehl ui_print(" ");

1ui_print(" ");
2ui_print("Installation XXXJVT..");
3ui_print("Wipe Edition");
4ui_print("Made by Mordewal");
5ui_print("bitte etwas Geduld ....");
6show_progress(0.200000, 10);

Mit diesem Block werden Wir darüber informiert, was installiert wird und von wem.
Mit show_progress(0.200000, 10); wird ein Verlaufsbalken angezeigt, der zu 10 Prozent gefüllt wird.

Im nächsten Block hängen wir die Partitionen ein (mount), damit wir auch etwas darauf
installieren können.

1#mounting
2run_program("/sbin/mount", "/system");
3run_program("/sbin/mount", "/dev/block/stl10", "/dbdata");
4run_program("/sbin/mount", "/cache");
5run_program("/sbin/mount", "/dev/block/mmcblk0p2", "/data");
6run_program("/sbin/mount", "/");

Ein Kommentar wird immer mit einer Raute (#) eingeleitet.
Die Zeile vor der eine Raute steht wird vom System ignoriert.
Gewöhnt Euch von Anfang an einen Skript übersichtlich in Blöcke zu unterteilen
und Kommentare an den wichtigen Stellen einzufügen.
#mounting
Ebenfalls kann man mit der Methode auch Befehle im Skript deaktivieren.

Nächster Schritt, altes System entfernen (wipe oder NoWipe, das ist die Frage)

Mit delete_recursive ("/verzeichnis"); lösche ich ein Verzeichnis inklusiver der Unterverzeichnisse

1delete_recursive("/system");
2delete_recursive("/data");
3delete_recursive("/dbdata");
4delete_recursive("/cache");

Wer eine Nowhipe Version davon machen möchte, der setzt nun einfach eine Raute vor
1#delete_recursive("/data");
2#delete_recursive("/dbdata");
schon werden diese beiden Zeilen ignoriert und unsere Benutzeranwendungen inkl. Daten
bleiben erhalten.

Nun installieren wir unsere Rom oder eine Anwendung mit
package_extract_dir("system", "/system");

Wir erinnern uns. Unser System befindet sich in dem Verzeichnis system, das wir in unserem
Arbeitsverzeichnis MeineRom erstellt hatten.
Mit dem Befehl package_extract_dir (""); wird der komplette Inhalt eines Verzeichnisses inkl. Unterverzeichnisse
an die angegebene Stelle kopiert. Nicht das Verzeichnis selbst.
Wenn wir nun noch ein paar Anwendungen installieren wollen, dann können wir in unserem Arbeitsverzeichnis MeineRom
das Verzeichnis data/app erstellen, in das wir unsere Anwendungen kopieren (z.B. Root Explorer.apk)
Und dann mit dem Befehl
1package_extract_dir("data", "/data");
den kompletten Inhalt nach /data auf unser Handy kopieren.

Als nächstes kommt ein wichtiger Schritt. Unser System muß die richtigen Rechte bekommen.
Das geschieht mit diesem Block.
1#set permissions
2ui_print("Setting Permissions...");
3set_perm_recursive(0,0,0755,0644,"/system/app");
4set_perm_recursive(0,0,0755,0644,"/system/framework");
5set_perm_recursive(0, 0, 0755, 0644, "/system");
6set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
7set_perm_recursive(0, 0, 0755, 0755, "/system/etc");
8set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
9set_perm_recursive(0, 2000, 0755, 0755, "/system/vendor/bin");
10set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc");
11set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/firmware");
12set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
13set_perm(0, 2000, 0755, "/system/vendor");
14set_perm(0, 2000, 0755, "/system/vendor/firmware");
15set_perm(0, 2000, 0755, "/system/vendor/bin/launch_gps.sh");
16set_perm(0, 2000, 0755, "/system/vendor/bin/gpsd");
17set_perm(0, 2000, 0755, "/system/etc/bluetooth");
18set_perm(0, 3003, 02755, "/system/bin/netcfg");
19set_perm(0, 3004, 02755, "/system/bin/ping");
20set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
21set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
22set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
23set_perm(0, 0, 06755, "/system/xbin/su");
24set_perm(0, 0, 06755, "/system/xbin/busybox");
25set_perm(0, 0, 755, "/tmp/bmlwrite");
Dazu gibt es nicht viel zu sagen, es ist besser den Block so zu übernehmen.
Man muß das Rad auch nicht immer neu erfinden.

Danach müssen einige Dinge dem System bekannt gemacht werden. Dazu werden sogenannte symlinks gesetzt
1ui_print(" ");
2ui_print("Setting symlinks...");
3symlink("toolbox", "/system/bin/cat", "/system/bin/chmod", "/system/bin/chown", "/system/bin/cmp", "/system/bin/date", "/system/bin/dd",
4 "/system/bin/df", "/system/bin/dmesg", "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd", "/system/bin/id",
5 "/system/bin/ifconfig", "/system/bin/iftop", "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice", "/system/bin/kill",
6 "/system/bin/ln", "/system/bin/log", "/system/bin/ls", "/system/bin/lsmod", "/system/bin/mkdir", "/system/bin/mount",
7 "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat", "/system/bin/newfs_msdos", "/system/bin/notify",
8 "/system/bin/printenv", "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice", "/system/bin/rm", "/system/bin/rmdir",
9 "/system/bin/rmmod", "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent", "/system/bin/setconsole",
10 "/system/bin/setprop", "/system/bin/sleep", "/system/bin/smd", "/system/bin/start", "/system/bin/stop", "/system/bin/sync",
11 "/system/bin/top", "/system/bin/umount", "/system/bin/vmstat", "/system/bin/watchprops", "/system/bin/wipe");
12symlink("/system/xbin/su", "/system/bin/su");
13symlink("/system/bin/dumpstate", "/system/bin/dumpmesg");
14symlink("/system/bin/debuggerd", "/system/bin/csview");

Nun noch busybox installieren, die wir vorher an die richtige Stelle in unsere Rom kopiert haben.
Ebenso su und superuser.apk
1ui_print("Installiere busybox...");
2run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");

Jetzt noch die Dateisystem wieder aushängen und der Skript ist fertig.
1unmount("/data");
2unmount("/system");
3unmount("/dbdata");
4unmount("/cache");

Der komplette Skript sieht nun so aus:
1ui_print(" ");
2ui_print("Installation XXXJVT..");
3ui_print("Wipe Edition");
4ui_print("Made by Mordewal");
5ui_print("bitte etwas Geduld ....");
6show_progress(0.200000, 10);
7
8ui_print(" ");
9
10#mounting
11run_program("/sbin/mount", "/system");
12run_program("/sbin/mount", "/dev/block/stl10", "/dbdata");
13run_program("/sbin/mount", "/cache");
14run_program("/sbin/mount", "/dev/block/mmcblk0p2", "/data");
15run_program("/sbin/mount", "/");
16
17ui_print("aufraeumen.....");
18
19delete_recursive("/system");
20delete_recursive("/data");
21delete_recursive("/dbdata");
22delete_recursive("/cache");
23
24show_progress(0.200000, 30);
25
26ui_print(" ");
27ui_print("Installiere XXXJVT ODEX Bluetheme");
28package_extract_dir("system", "/system");
29show_progress(0.200000, 50);
30
31ui_print(" ");
32ui_print("Installiere einige Apps");
33package_extract_dir("data", "/data");
34show_progress(0.200000, 80);
35
36#set permissions
37ui_print("Setting Permissions...");
38set_perm_recursive(0,0,0755,0644,"/system/app");
39set_perm_recursive(0,0,0755,0644,"/system/framework");
40set_perm_recursive(0, 0, 0755, 0644, "/system");
41set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
42set_perm_recursive(0, 0, 0755, 0755, "/system/etc");
43set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
44set_perm_recursive(0, 2000, 0755, 0755, "/system/vendor/bin");
45set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc");
46set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/firmware");
47set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
48set_perm(0, 2000, 0755, "/system/vendor");
49set_perm(0, 2000, 0755, "/system/vendor/firmware");
50set_perm(0, 2000, 0755, "/system/vendor/bin/launch_gps.sh");
51set_perm(0, 2000, 0755, "/system/vendor/bin/gpsd");
52set_perm(0, 2000, 0755, "/system/etc/bluetooth");
53set_perm(0, 3003, 02755, "/system/bin/netcfg");
54set_perm(0, 3004, 02755, "/system/bin/ping");
55set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
56set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
57set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
58set_perm(0, 0, 06755, "/system/xbin/su");
59set_perm(0, 0, 06755, "/system/xbin/busybox");
60set_perm(0, 0, 755, "/tmp/bmlwrite");
61
62
63show_progress(0.200000, 90);
64ui_print(" ");
65ui_print("Setting symlinks...");
66symlink("toolbox", "/system/bin/cat", "/system/bin/chmod", "/system/bin/chown", "/system/bin/cmp", "/system/bin/date", "/system/bin/dd",
67 "/system/bin/df", "/system/bin/dmesg", "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd", "/system/bin/id",
68 "/system/bin/ifconfig", "/system/bin/iftop", "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice", "/system/bin/kill",
69 "/system/bin/ln", "/system/bin/log", "/system/bin/ls", "/system/bin/lsmod", "/system/bin/mkdir", "/system/bin/mount",
70 "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat", "/system/bin/newfs_msdos", "/system/bin/notify",
71 "/system/bin/printenv", "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice", "/system/bin/rm", "/system/bin/rmdir",
72 "/system/bin/rmmod", "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent", "/system/bin/setconsole",
73 "/system/bin/setprop", "/system/bin/sleep", "/system/bin/smd", "/system/bin/start", "/system/bin/stop", "/system/bin/sync",
74 "/system/bin/top", "/system/bin/umount", "/system/bin/vmstat", "/system/bin/watchprops", "/system/bin/wipe");
75symlink("/system/xbin/su", "/system/bin/su");
76symlink("/system/bin/dumpstate", "/system/bin/dumpmesg");
77symlink("/system/bin/debuggerd", "/system/bin/csview");
78
79
80ui_print("Installiere busybox...");
81run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
82
83ui_print(" ");
84ui_print("aufraeumen und Dateisysteme aushaengen...");
85
86unmount("/data");
87unmount("/system");
88unmount("/dbdata");
89unmount("/cache");
90
91show_progress(1.000000, 0);
92ui_print(" ");
93ui_print("Installation erfolgreich. Viel Spass damit!...");
94ui_print("Das System kann nun neu gestartet werden");


Wird nun unsere Rom zur Installation über CWM ausgwählt, dann wird dieser Skript ausgeführt.
Unsere Rom ist damit auf unser Handy installiert.
Ebenso kann man Anwendungen, Theme, modems, Treiber nachinstallieren.
Man braucht dann natürlich keine Partitionen zu löschen und auch nicht alle symlinks und Rechte neu setzen.
Der Skript wäre sehr viel kleiner.

— geändert am 13.10.2011, 10:08:40

Wer nach einer Antwort sucht, wird niemals aufhören, zu fragen

Antworten
Martin
  • Forum-Beiträge: 861

12.10.2011, 08:18:50 via Website

Installationspaket für CWM erstellen

Wie aber bekomme ich denn jetzt ein Installationspaket,
dass über CWM installiert werden kann?

Im Grunde ganz einfach.
Wir benötigen 7Zip dazu.

1. öffnet 7Zip
2. geht in Euer Arbeitsverzeichnis
3. markiert die Ordner, die zur Installation benötigt werden.
z.B. system, META-INF eventuell noch data.
4. klickt auf "hinzufügen" oder das Plus Zeichen
5. stellt das Archiv wie folgt ein:

Archivformat: zip
Kompressionsstärke: Ultra
Kompressionsverfahren: Deflate
6. gebt dem Archiv einen Namen
7. OK

fertig.
Nun noch das ganze auf Euer Handy kopieren und es kann losgehen.

Noch ein Tipp

ich lese immer wieder
"ich habe mir ein Theme installiert und mein Handy hat jetzt einen Bootloop"

Das muß nicht sein. Wer jetzt weiß, wie man ein solches Paket erstellt,
kann sich vorher eine Sicherung seines Theme, Treiber, TW oder sonst etwas machen.

Schaut Euch dazu vorher das Paket, dass Ihr installieren wollt, an.
Kopiert Euch die Dateien von Eurem Handy, die durch das Paket ersetzt werden,
in ein Arbeitsverzeichnis. Ihr müßt natürlich auch die Ordnerstruktur einhalten.
Erstell Euch davon ein eigenes Installationspaket mit dem Meta-INF Ordner
aus dem Paket, dass Ihr installieren wollt.
Schon habt Iher ein Backup, dass ebenfalls installiert werden kann und
der alte Zustand wird wiederhergestellt.
Das geht schneller als ein komplettes restore.
Denkt aber daran, dass die Ordnerstruktur eingehalten werden muß.
Dazu schaut Euch die updater-script aus dem jeweiligen Archiv genau an!

— geändert am 13.10.2011, 11:02:43

Wer nach einer Antwort sucht, wird niemals aufhören, zu fragen

Antworten
Martin
  • Forum-Beiträge: 861

12.10.2011, 08:19:23 via Website

reserviert für den nächste Workshop

Wer nach einer Antwort sucht, wird niemals aufhören, zu fragen

Antworten
Kevin Richter
  • Forum-Beiträge: 1.687

12.10.2011, 10:08:49 via App

saubere Anleitung!super gemacht!

Ich bin ein Kind der Straße.... keins aus dem Ghetto... mein Viertel war die Sesamstraße

Antworten
Martin
  • Forum-Beiträge: 861

12.10.2011, 11:08:01 via Website

Danke, Kevin.
Da es etwas ruhiger um das gute SGS geworden ist, hat vielleicht ja der Eine oder Andere Lust, seine Rom, seinen Wünschen anzupassen.
Jedenfalls werde ich noch einiges dazu schreiben, auch wie man das Aussehen verändern kann.
Allerdings brauch ich etwas Zeit dazu ;)

Wer nach einer Antwort sucht, wird niemals aufhören, zu fragen

Antworten
Jogu Du
  • Forum-Beiträge: 876

12.10.2011, 16:52:22 via App

von mir auch danke für die tolle Anleitung.
werde sie mir mal genauer anschauen und vllt auch umsetzen wenn ich wieder daheim bin (bin grad im Urlaub)

— geändert am 12.10.2011, 16:53:03

Antworten
Martin
  • Forum-Beiträge: 861

13.10.2011, 11:05:20 via Website

na, da wünsche ich doch noch einen schönen Urlaub :)

Bei mir dauert es noch 2 Wochen (seufz)

Wer nach einer Antwort sucht, wird niemals aufhören, zu fragen

Jogu Du

Antworten
k4rsten
  • Forum-Beiträge: 48

13.10.2011, 15:28:28 via Website

Super Anleitung =)

Antworten
Jogu Du
  • Forum-Beiträge: 876

14.10.2011, 20:07:57 via Website

Martin
na, da wünsche ich doch noch einen schönen Urlaub :)

Bei mir dauert es noch 2 Wochen (seufz)

Danke und :P ;)
Morgen gehts aber wieder heim :(

— geändert am 14.10.2011, 20:08:18

Antworten
Jogu Du
  • Forum-Beiträge: 876

06.11.2011, 14:26:02 via Website

Und wie siehts aus?

Jedenfalls werde ich noch einiges dazu schreiben, auch wie man das Aussehen verändern kann.

Wann schreibst du dazu noch was? Würde mich nämlich echt interressieren! :)
Und wozu ist die datei update-binary unter META-INF/com/google/android da?

— geändert am 06.11.2011, 14:38:17

Antworten