[TUTORIAL] The updater-script completely explained

Search This thread

KINGbabasula

Inactive Recognized Developer
Jan 28, 2013
2,301
5,165
Treviso
Hi all XDA Members :)
This is not at all an updater-script guide but an explanation

Example of updater-script:

Code:
[COLOR="Red"]assert(getprop("ro.product.device") == "janice" || getprop("ro.build.product") == "janice" || 
       getprop("ro.product.device") == "i9070" || getprop("ro.build.product") == "i9070" || 
       getprop("ro.product.device") == "GT-I9070" || getprop("ro.build.product") == "GT-I9070");[/COLOR]
[COLOR="Silver"]mount("ext4", "EMMC", "/dev/block/mmcblk0p3", "/system");[/COLOR]
[COLOR="Green"]package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");[/COLOR]
[COLOR="DarkRed"]set_perm(0, 0, 0777, "/tmp/backuptool.sh");
set_perm(0, 0, 0644, "/tmp/backuptool.functions");[/COLOR]
[COLOR="Lime"]run_program("/tmp/backuptool.sh", "backup");[/COLOR]
[COLOR="RoyalBlue"]unmount("/system");[/COLOR]
[COLOR="Pink"]show_progress(0.500000, 0);[/COLOR]
unmount("/system");
[COLOR="DarkSlateGray"]format("ext4", "EMMC", "/dev/block/mmcblk0p3", "0", "/system")[/COLOR];
[COLOR="silver"]mount("ext4", "EMMC", "/dev/block/mmcblk0p3", "/system");[/COLOR]
[COLOR="Purple"]package_extract_dir("recovery", "/system");
package_extract_dir("system", "/system");[/COLOR]
[COLOR="Olive"]symlink("/system/xbin/su", "/system/bin/su");
symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf");
symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");
symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
        "/system/xbin/adjtimex", "/system/xbin/arp", "/system/xbin/ash",
        "/system/xbin/awk", "/system/xbin/base64", "/system/xbin/basename",
        "/system/xbin/bbconfig", "/system/xbin/blkid", "/system/xbin/blockdev",
        "/system/xbin/brctl", "/system/xbin/bunzip2", "/system/xbin/bzcat",
        "/system/xbin/bzip2", "/system/xbin/cal", "/system/xbin/cat",
        "/system/xbin/catv", "/system/xbin/chattr", "/system/xbin/chgrp",
        "/system/xbin/chmod", "/system/xbin/chown", "/system/xbin/chroot",
        "/system/xbin/clear", "/system/xbin/cmp", "/system/xbin/comm",
        "/system/xbin/cp", "/system/xbin/cpio", "/system/xbin/crond",
        "/system/xbin/crontab", "/system/xbin/cut", "/system/xbin/date",
        "/system/xbin/dc", "/system/xbin/dd", "/system/xbin/depmod",
        "/system/xbin/devmem", "/system/xbin/df", "/system/xbin/diff",
        "/system/xbin/dirname", "/system/xbin/dmesg", "/system/xbin/dnsd",
        "/system/xbin/dos2unix", "/system/xbin/du", "/system/xbin/echo",
        "/system/xbin/ed", "/system/xbin/egrep", "/system/xbin/env",
        "/system/xbin/expand", "/system/xbin/expr", "/system/xbin/false",
        "/system/xbin/fbsplash", "/system/xbin/fdisk", "/system/xbin/fgrep",
        "/system/xbin/find", "/system/xbin/flash_lock",
        "/system/xbin/flash_unlock", "/system/xbin/flashcp",
        "/system/xbin/flock", "/system/xbin/fold", "/system/xbin/free",
        "/system/xbin/freeramdisk", "/system/xbin/fstrim", "/system/xbin/fsync",
        "/system/xbin/ftpget", "/system/xbin/ftpput", "/system/xbin/fuser",
        "/system/xbin/getopt", "/system/xbin/grep", "/system/xbin/groups",
        "/system/xbin/gunzip", "/system/xbin/gzip", "/system/xbin/halt",
        "/system/xbin/head", "/system/xbin/hexdump", "/system/xbin/id",
        "/system/xbin/ifconfig", "/system/xbin/inetd", "/system/xbin/insmod",
        "/system/xbin/install", "/system/xbin/ionice", "/system/xbin/iostat",
        "/system/xbin/ip", "/system/xbin/kill", "/system/xbin/killall",
        "/system/xbin/killall5", "/system/xbin/less", "/system/xbin/ln",
        "/system/xbin/losetup", "/system/xbin/ls", "/system/xbin/lsattr",
        "/system/xbin/lsmod", "/system/xbin/lsusb", "/system/xbin/lzcat",
        "/system/xbin/lzma", "/system/xbin/lzop", "/system/xbin/lzopcat",
        "/system/xbin/man", "/system/xbin/md5sum", "/system/xbin/mesg",
        "/system/xbin/mkdir", "/system/xbin/mke2fs", "/system/xbin/mkfifo",
        "/system/xbin/mkfs.ext2", "/system/xbin/mkfs.vfat",
        "/system/xbin/mknod", "/system/xbin/mkswap", "/system/xbin/mktemp",
        "/system/xbin/modinfo", "/system/xbin/modprobe", "/system/xbin/more",
        "/system/xbin/mount", "/system/xbin/mountpoint", "/system/xbin/mpstat",
        "/system/xbin/mv", "/system/xbin/nanddump", "/system/xbin/nandwrite",
        "/system/xbin/nbd-client", "/system/xbin/netstat", "/system/xbin/nice",
        "/system/xbin/nohup", "/system/xbin/nslookup", "/system/xbin/ntpd",
        "/system/xbin/od", "/system/xbin/patch", "/system/xbin/pgrep",
        "/system/xbin/pidof", "/system/xbin/ping", "/system/xbin/pipe_progress",
        "/system/xbin/pkill", "/system/xbin/pmap", "/system/xbin/poweroff",
        "/system/xbin/printenv", "/system/xbin/printf", "/system/xbin/ps",
        "/system/xbin/pstree", "/system/xbin/pwd", "/system/xbin/pwdx",
        "/system/xbin/rdev", "/system/xbin/readlink", "/system/xbin/realpath",
        "/system/xbin/renice", "/system/xbin/reset", "/system/xbin/resize",
        "/system/xbin/rev", "/system/xbin/rm", "/system/xbin/rmdir",
        "/system/xbin/rmmod", "/system/xbin/route", "/system/xbin/run-parts",
        "/system/xbin/rx", "/system/xbin/sed", "/system/xbin/seq",
        "/system/xbin/setconsole", "/system/xbin/setserial",
        "/system/xbin/setsid", "/system/xbin/sh", "/system/xbin/sha1sum",
        "/system/xbin/sha256sum", "/system/xbin/sha3sum",
        "/system/xbin/sha512sum", "/system/xbin/sleep", "/system/xbin/sort",
        "/system/xbin/split", "/system/xbin/stat", "/system/xbin/strings",
        "/system/xbin/stty", "/system/xbin/sum", "/system/xbin/swapoff",
        "/system/xbin/swapon", "/system/xbin/sync", "/system/xbin/sysctl",
        "/system/xbin/tac", "/system/xbin/tail", "/system/xbin/tar",
        "/system/xbin/taskset", "/system/xbin/tee", "/system/xbin/telnet",
        "/system/xbin/telnetd", "/system/xbin/test", "/system/xbin/tftp",
        "/system/xbin/tftpd", "/system/xbin/time", "/system/xbin/timeout",
        "/system/xbin/top", "/system/xbin/touch", "/system/xbin/tr",
        "/system/xbin/traceroute", "/system/xbin/true", "/system/xbin/ttysize",
        "/system/xbin/tune2fs", "/system/xbin/umount", "/system/xbin/uname",
        "/system/xbin/uncompress", "/system/xbin/unexpand", "/system/xbin/uniq",
        "/system/xbin/unix2dos", "/system/xbin/unlzma", "/system/xbin/unlzop",
        "/system/xbin/unxz", "/system/xbin/unzip", "/system/xbin/uptime",
        "/system/xbin/usleep", "/system/xbin/uudecode", "/system/xbin/uuencode",
        "/system/xbin/vi", "/system/xbin/watch", "/system/xbin/wc",
        "/system/xbin/wget", "/system/xbin/which", "/system/xbin/whoami",
        "/system/xbin/xargs", "/system/xbin/xz", "/system/xbin/xzcat",
        "/system/xbin/yes",
        "/system/xbin/zcat");
symlink("mksh", "/system/bin/sh");
symlink("toolbox", "/system/bin/cat", "/system/bin/chmod",
        "/system/bin/chown", "/system/bin/cmp", "/system/bin/cp",
        "/system/bin/date", "/system/bin/dd", "/system/bin/df",
        "/system/bin/dmesg", "/system/bin/du", "/system/bin/getevent",
        "/system/bin/getprop", "/system/bin/grep", "/system/bin/hd",
        "/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop",
        "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice",
        "/system/bin/kill", "/system/bin/ln", "/system/bin/log",
        "/system/bin/ls", "/system/bin/lsmod", "/system/bin/lsof",
        "/system/bin/md5", "/system/bin/mkdir", "/system/bin/mount",
        "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat",
        "/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv",
        "/system/bin/ps", "/system/bin/r", "/system/bin/reboot",
        "/system/bin/renice", "/system/bin/restart", "/system/bin/rm",
        "/system/bin/rmdir", "/system/bin/rmmod", "/system/bin/route",
        "/system/bin/schedtop", "/system/bin/sendevent",
        "/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep",
        "/system/bin/smd", "/system/bin/start", "/system/bin/stop",
        "/system/bin/sync", "/system/bin/top", "/system/bin/touch",
        "/system/bin/umount", "/system/bin/uptime", "/system/bin/vmstat",
        "/system/bin/watchprops",
        "/system/bin/wipe");[/COLOR]
[COLOR="SandyBrown"]set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 0, 0755, 0755, "/system/addon.d");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");[/COLOR]
[COLOR="DarkRed"]set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");[/COLOR]
[COLOR="SandyBrown"]set_perm_recursive(0, 2000, 0755, 0755, "/system/etc/init.d");[/COLOR]
[COLOR="DarkRed"]set_perm(0, 0, 0755, "/system/etc/init.d");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");[/COLOR]
[COLOR="SandyBrown"]set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");[/COLOR]
[COLOR="DarkRed"]set_perm(0, 2000, 0755, "/system/vendor");
set_perm(0, 2000, 0755, "/system/vendor/etc");
set_perm(0, 2000, 0755, "/system/vendor/firmware");[/COLOR]
[COLOR="SandyBrown"]set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/lib");[/COLOR]
[COLOR="DarkRed"]set_perm(0, 0, 0644, "/system/vendor/lib/libbt-vendor.so");[/COLOR]
[COLOR="SandyBrown"]set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");[/COLOR]
[COLOR="DarkRed"]set_perm(0, 0, 06755, "/system/xbin/librank");
set_perm(0, 0, 06755, "/system/xbin/procmem");
set_perm(0, 0, 06755, "/system/xbin/procrank");
set_perm(0, 0, 06755, "/system/xbin/su");[/COLOR]
[COLOR="Pink"]show_progress(0.200000, 0);
show_progress(0.200000, 10);[/COLOR]
[COLOR="Green"]package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");[/COLOR]
[COLOR="DarkRed"]set_perm(0, 0, 0777, "/tmp/backuptool.sh");
set_perm(0, 0, 0644, "/tmp/backuptool.functions");[/COLOR]
[COLOR="Lime"]run_program("/tmp/backuptool.sh", "restore");[/COLOR]
[COLOR="Navy"]delete("/system/bin/backuptool.sh");
delete("/system/bin/backuptool.functions");[/COLOR]
[COLOR="Pink"]show_progress(0.200000, 10);[/COLOR]
assert(package_extract_file("boot.img", "/tmp/boot.img"),
       write_raw_image("/tmp/boot.img", "/dev/block/mmcblk0p15"),
       delete("/tmp/boot.img"));
[COLOR="Pink"]show_progress(0.100000, 0);[/COLOR]
unmount("/system");

1. getprop

The assert getprop lines aren't a must but their use is to make a safer installation.
Example: This updater-script is for GT-I9070 so with that lines it will check in build.prop if product name matches.
If "ro.product.device is janice, i9070 or GT-I9070 the installation will continue. If not it will abort.

2. mount

Mount command will mount a partition as something.
Example: For GT-I9070 the /system partition is dev/block/mmcblk0p3
The partitions change device by device.

3. package_extract_file

This line extracts a specific file contained in the zip to a specific directory.
Example: This updater-script extracts backuptool.sh to the temporary directory /tmp

4. set_perm

These lines are needed to give the correct permissions to the files extracted.
Example: backuptool.sh needs 777 permission to be executed correctly.

5. run_program

This line execute a bash script (*.sh).
Example: backuptool.sh will be executed then after it will close itself and the updater-script will continue.

6. unmount

This command will unmount the specificated partition.
Example: In this case it will unmount system partition.

7. format

This command will format the specificated partition.
Example: This updater-script will format system partition. it needs to be unmounted before being formatted.

8. package_extract_dir

This command extracts a specificated folder to another folder.
Example: This updater-script extracts system folder to system partition.

9. symlink

This command links executable files to a file.
Example: busybox contains a lot of commands but they are all separated binaries that are linked to busybox binary by the symlinks.

10. set_perm_recursive

This command is the same as set_perm but for folders
Example: is used to set permissions of the folder system/etc/init.d

11 . delete

This command deletes a file
Example: In this updater-script is used to delete backuptool.sh.

12. delete_recursive

Same as delete but for folders
 
Last edited:

KINGbabasula

Inactive Recognized Developer
Jan 28, 2013
2,301
5,165
Treviso
Aroma Installer

Folder structure:

Blue = Folders
Black = Files

META-INF
|--com
|..|--google
|.....|--android
|........|--aroma
|........|..|--exec_demo < Little executables to sleep or take a screenshot
|........|..|--fonts < Fonts: There must be a "small.png" for lowercase and a "big.png"
|........|..|--icons < The icons that will be showed if called by the aroma-config
|........|..|--langs < It may contain translations
|........|..|--splash < The splash image/s that are showed at the start as static or animation if called by aroma-config
|........|..|--themes < Can be chosen from the aroma-config
|........|..|--ttf < Fonts
|........|..|--unicode < Chinese and Cyrillic
|........|--aroma-config < File that controls the installation
|........|--update-binary < Executable
|........|--update-binary-installer < Executable
|........|--updater-script < File that controls the installation
|--CERT.RSA < Sign files
|--CERT.SF < Sign files
|--MANIFEST.MF < Sign files


Will come soon...
 
Last edited:

Kurotsuchi

Senior Member
Aug 29, 2013
127
16
I am lucky because I really needed help, this may not be so related but I made my Rom using Android Kitchen, but I get the Status 0 ERROR which is related to the '' updater-script '' as described in the original thread

Status 0 might be two things: 1) You used an update-script (Amend format, which is very old) when you should be using an updater-script (Edify format), or the other way around; OR 2) Your updater-script is using the "MTD" partition type when mounting a partition rather than another type such as EMMC (and thus, you need the device defined under the kitchen's /tools/edify_defs folder).

do you have any clue for this buddy ? none of the 2 solutions above worked for me.

Thanks again, and sorry if it's not so related to your thread!
 

KINGbabasula

Inactive Recognized Developer
Jan 28, 2013
2,301
5,165
Treviso
I am lucky because I really needed help, this may not be so related but I made my Rom using Android Kitchen, but I get the Status 0 ERROR which is related to the '' updater-script '' as described in the original thread

Status 0 might be two things: 1) You used an update-script (Amend format, which is very old) when you should be using an updater-script (Edify format), or the other way around; OR 2) Your updater-script is using the "MTD" partition type when mounting a partition rather than another type such as EMMC (and thus, you need the device defined under the kitchen's /tools/edify_defs folder).

do you have any clue for this buddy ? none of the 2 solutions above worked for me.

Thanks again, and sorry if it's not so related to your thread!

Please post your updater script here and i will take a look at it

Inviato dal mio GT-I9070 con Tapatalk 2
 
  • Like
Reactions: mallikvala

Kurotsuchi

Senior Member
Aug 29, 2013
127
16
Please post your updater script here and i will take a look at it

Inviato dal mio GT-I9070 con Tapatalk 2

Thanks for the answer buddy, here it's, ( this is for Galaxy note 8.0 ) my previous phones rom didn't have this problem because it was NOT using
MTD.


show_progress(0.1, 0);
format("MTD", "system");
mount("MTD", "system", "/system");
package_extract_dir("system", "/system");
symlink("mksh", "/system/bin/sh");
symlink("toolbox", "/system/bin/vmstat");
symlink("toolbox", "/system/bin/rmdir");
symlink("toolbox", "/system/bin/lsof");
symlink("toolbox", "/system/bin/umount");
symlink("toolbox", "/system/bin/log");
symlink("toolbox", "/system/bin/setconsole");
symlink("toolbox", "/system/bin/ioctl");
symlink("toolbox", "/system/bin/touch");
symlink("toolbox", "/system/bin/playback");
symlink("toolbox", "/system/bin/id");
symlink("toolbox", "/system/bin/start");
symlink("toolbox", "/system/bin/getevent");
symlink("toolbox", "/system/bin/insmod");
symlink("toolbox", "/system/bin/top");
symlink("toolbox", "/system/bin/notify");
symlink("toolbox", "/system/bin/setprop");
symlink("toolbox", "/system/bin/ionice");
symlink("toolbox", "/system/bin/ln");
symlink("toolbox", "/system/bin/kill");
symlink("toolbox", "/system/bin/cat");
symlink("toolbox", "/system/bin/chmod");
symlink("toolbox", "/system/bin/watchprops");
symlink("toolbox", "/system/bin/mkdir");
symlink("toolbox", "/system/bin/touchinput");
symlink("toolbox", "/system/bin/rmmod");
symlink("toolbox", "/system/bin/renice");
symlink("toolbox", "/system/bin/date");
symlink("toolbox", "/system/bin/iftop");
symlink("toolbox", "/system/bin/stop");
symlink("toolbox", "/system/bin/schedtop");
symlink("toolbox", "/system/bin/uptime");
symlink("toolbox", "/system/bin/route");
symlink("toolbox", "/system/bin/cmp");
symlink("toolbox", "/system/bin/rm");
symlink("toolbox", "/system/bin/wipe");
symlink("toolbox", "/system/bin/chown");
symlink("toolbox", "/system/bin/df");
symlink("toolbox", "/system/bin/nandread");
symlink("toolbox", "/system/bin/dd");
symlink("toolbox", "/system/bin/sendevent");
symlink("toolbox", "/system/bin/smd");
symlink("toolbox", "/system/bin/getprop");
symlink("toolbox", "/system/bin/ls");
symlink("toolbox", "/system/bin/ps");
symlink("toolbox", "/system/bin/printenv");
symlink("toolbox", "/system/bin/newfs_msdos");
symlink("toolbox", "/system/bin/mv");
symlink("toolbox", "/system/bin/hd");
symlink("toolbox", "/system/bin/md5");
symlink("toolbox", "/system/bin/lsmod");
symlink("toolbox", "/system/bin/dmesg");
symlink("toolbox", "/system/bin/sleep");
symlink("toolbox", "/system/bin/netstat");
symlink("toolbox", "/system/bin/reboot");
symlink("toolbox", "/system/bin/ifconfig");
symlink("toolbox", "/system/bin/sync");
symlink("toolbox", "/system/bin/mount");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 3003, 06755, "/system/bin/ip");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/etc");
set_perm_recursive(0, 0, 0755, 0644, "/system/vendor/firmware");
set_perm(0, 2000, 0755, "/system/vendor/firmware");
set_perm(0, 2000, 0755, "/system/vendor/lib");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 1000, 0755, "/system/xbin/busybox");
symlink("/system/xbin/busybox", "/system/bin/busybox");
run_program("/system/xbin/busybox", "--install", "-s", "/system/xbin");
set_perm(0, 0, 06755, "/system/xbin/su");
symlink("/system/xbin/su", "/system/bin/su");
show_progress(0.1, 10);
show_progress(0.2, 0);
assert(package_extract_file("boot.img", "/tmp/boot.img"),
write_raw_image("/tmp/boot.img", "boot"),
delete("/tmp/boot.img"));
show_progress(0.2, 10);
unmount("/system");
 

Dark Wraith

Senior Member
Feb 18, 2013
250
1,022
Bangalore
Thanks for the answer buddy, here it's, ( this is for Galaxy note 8.0 ) my previous phones rom didn't have this problem because it was NOT using
MTD.

Problem is with
format("MTD", "system");
mount("MTD", "system", "/system");

Open your ramdisk contents extracted from your kernel. There you should see something like fstab or .fstab. Open those files with notepad++. you will see the path to your system or data..say for xperia s the mount point for the system is dev/block/mmcblk0p12 and format is ext4 so the command becomes format("ext4","EMMC","dev/block/mmcblk0p12") and mount("ext4","EMMC","dev/block/mmcblk0p12)respectively.

Similarly for assert(package_extract_file("boot.img", "/tmp/boot.img").This tells cwm to extract boot.img and load it in /tmp/boot.img which is wrong..again you need to find the mount point of your phone where you need to extract the boot.img...Again taking xperia s as an example. it is
package_extract_file("boot.img", "/dev/block/mmcblk0p3").
Hope that helps
 

Kurotsuchi

Senior Member
Aug 29, 2013
127
16
Problem is with
format("MTD", "system");
mount("MTD", "system", "/system");

Open your ramdisk contents extracted from your kernel. There you should see something like fstab or .fstab. Open those files with notepad++. you will see the path to your system or data..say for xperia s the mount point for the system is dev/block/mmcblk0p12 and format is ext4 so the command becomes format("ext4","EMMC","dev/block/mmcblk0p12") and mount("ext4","EMMC","dev/block/mmcblk0p12)respectively.

Similarly for assert(package_extract_file("boot.img", "/tmp/boot.img").This tells cwm to extract boot.img and load it in /tmp/boot.img which is wrong..again you need to find the mount point of your phone where you need to extract the boot.img...Again taking xperia s as an example. it is
package_extract_file("boot.img", "/dev/block/mmcblk0p3").
Hope that helps

MANY THANKS BUDDY! really appreciate it,
 

dstruct2k

Senior Member
Jan 31, 2008
1,253
938
Winnipeg
Google Pixel 4
I seem to remember reading somewhere that you can just replace the update-binary with a shell script in plain text and some recoveries will read it, but I can't seem to find the post. Anyone else know what I'm talking about?

If that's not possible and I've just gone crazy, is there a way to force a reboot into recovery in an Edify script? I'm wanting to fix my bootloader update packages so they automatically reboot back to recovery after install, otherwise the recovery doesn't know the new bootloader version and ROMs still fail on asserts that check it until after a reboot.

EDIT: I just tried using run_program("/sbin/busybox", "reboot", "recovery"); but busybox doesn't understand "reboot recovery" and simply reboots back to the currently installed ROM.
 
Last edited:

demkantor

Inactive Recognized Contributor
Nov 10, 2011
6,861
3,764
mpls
try this
run_program("/system/xbin/busybox", "reboot recovery");
or
run_program("/system/xbin/busybox", "reboot-recovery");
cant remember but its something like this


EDIT:
@dstruct2k
run_program("/sbin/reboot", "recovery");
is the proper syntax
 
Last edited:

dstruct2k

Senior Member
Jan 31, 2008
1,253
938
Winnipeg
Google Pixel 4
try this
run_program("/system/xbin/busybox", "reboot recovery");
or
run_program("/system/xbin/busybox", "reboot-recovery");
cant remember but its something like this


EDIT:
@dstruct2k
run_program("/sbin/reboot", "recovery");
is the proper syntax
"/sbin/reboot" does not exist in TWRP, is there another way you can think of? Busybox also does not have a reboot-recovery applet, only "reboot" (which starts Android)
 

Top Liked Posts

  • There are no posts matching your filters.
  • 111
    Hi all XDA Members :)
    This is not at all an updater-script guide but an explanation

    Example of updater-script:

    Code:
    [COLOR="Red"]assert(getprop("ro.product.device") == "janice" || getprop("ro.build.product") == "janice" || 
           getprop("ro.product.device") == "i9070" || getprop("ro.build.product") == "i9070" || 
           getprop("ro.product.device") == "GT-I9070" || getprop("ro.build.product") == "GT-I9070");[/COLOR]
    [COLOR="Silver"]mount("ext4", "EMMC", "/dev/block/mmcblk0p3", "/system");[/COLOR]
    [COLOR="Green"]package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
    package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");[/COLOR]
    [COLOR="DarkRed"]set_perm(0, 0, 0777, "/tmp/backuptool.sh");
    set_perm(0, 0, 0644, "/tmp/backuptool.functions");[/COLOR]
    [COLOR="Lime"]run_program("/tmp/backuptool.sh", "backup");[/COLOR]
    [COLOR="RoyalBlue"]unmount("/system");[/COLOR]
    [COLOR="Pink"]show_progress(0.500000, 0);[/COLOR]
    unmount("/system");
    [COLOR="DarkSlateGray"]format("ext4", "EMMC", "/dev/block/mmcblk0p3", "0", "/system")[/COLOR];
    [COLOR="silver"]mount("ext4", "EMMC", "/dev/block/mmcblk0p3", "/system");[/COLOR]
    [COLOR="Purple"]package_extract_dir("recovery", "/system");
    package_extract_dir("system", "/system");[/COLOR]
    [COLOR="Olive"]symlink("/system/xbin/su", "/system/bin/su");
    symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf");
    symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");
    symlink("busybox", "/system/xbin/[", "/system/xbin/[[",
            "/system/xbin/adjtimex", "/system/xbin/arp", "/system/xbin/ash",
            "/system/xbin/awk", "/system/xbin/base64", "/system/xbin/basename",
            "/system/xbin/bbconfig", "/system/xbin/blkid", "/system/xbin/blockdev",
            "/system/xbin/brctl", "/system/xbin/bunzip2", "/system/xbin/bzcat",
            "/system/xbin/bzip2", "/system/xbin/cal", "/system/xbin/cat",
            "/system/xbin/catv", "/system/xbin/chattr", "/system/xbin/chgrp",
            "/system/xbin/chmod", "/system/xbin/chown", "/system/xbin/chroot",
            "/system/xbin/clear", "/system/xbin/cmp", "/system/xbin/comm",
            "/system/xbin/cp", "/system/xbin/cpio", "/system/xbin/crond",
            "/system/xbin/crontab", "/system/xbin/cut", "/system/xbin/date",
            "/system/xbin/dc", "/system/xbin/dd", "/system/xbin/depmod",
            "/system/xbin/devmem", "/system/xbin/df", "/system/xbin/diff",
            "/system/xbin/dirname", "/system/xbin/dmesg", "/system/xbin/dnsd",
            "/system/xbin/dos2unix", "/system/xbin/du", "/system/xbin/echo",
            "/system/xbin/ed", "/system/xbin/egrep", "/system/xbin/env",
            "/system/xbin/expand", "/system/xbin/expr", "/system/xbin/false",
            "/system/xbin/fbsplash", "/system/xbin/fdisk", "/system/xbin/fgrep",
            "/system/xbin/find", "/system/xbin/flash_lock",
            "/system/xbin/flash_unlock", "/system/xbin/flashcp",
            "/system/xbin/flock", "/system/xbin/fold", "/system/xbin/free",
            "/system/xbin/freeramdisk", "/system/xbin/fstrim", "/system/xbin/fsync",
            "/system/xbin/ftpget", "/system/xbin/ftpput", "/system/xbin/fuser",
            "/system/xbin/getopt", "/system/xbin/grep", "/system/xbin/groups",
            "/system/xbin/gunzip", "/system/xbin/gzip", "/system/xbin/halt",
            "/system/xbin/head", "/system/xbin/hexdump", "/system/xbin/id",
            "/system/xbin/ifconfig", "/system/xbin/inetd", "/system/xbin/insmod",
            "/system/xbin/install", "/system/xbin/ionice", "/system/xbin/iostat",
            "/system/xbin/ip", "/system/xbin/kill", "/system/xbin/killall",
            "/system/xbin/killall5", "/system/xbin/less", "/system/xbin/ln",
            "/system/xbin/losetup", "/system/xbin/ls", "/system/xbin/lsattr",
            "/system/xbin/lsmod", "/system/xbin/lsusb", "/system/xbin/lzcat",
            "/system/xbin/lzma", "/system/xbin/lzop", "/system/xbin/lzopcat",
            "/system/xbin/man", "/system/xbin/md5sum", "/system/xbin/mesg",
            "/system/xbin/mkdir", "/system/xbin/mke2fs", "/system/xbin/mkfifo",
            "/system/xbin/mkfs.ext2", "/system/xbin/mkfs.vfat",
            "/system/xbin/mknod", "/system/xbin/mkswap", "/system/xbin/mktemp",
            "/system/xbin/modinfo", "/system/xbin/modprobe", "/system/xbin/more",
            "/system/xbin/mount", "/system/xbin/mountpoint", "/system/xbin/mpstat",
            "/system/xbin/mv", "/system/xbin/nanddump", "/system/xbin/nandwrite",
            "/system/xbin/nbd-client", "/system/xbin/netstat", "/system/xbin/nice",
            "/system/xbin/nohup", "/system/xbin/nslookup", "/system/xbin/ntpd",
            "/system/xbin/od", "/system/xbin/patch", "/system/xbin/pgrep",
            "/system/xbin/pidof", "/system/xbin/ping", "/system/xbin/pipe_progress",
            "/system/xbin/pkill", "/system/xbin/pmap", "/system/xbin/poweroff",
            "/system/xbin/printenv", "/system/xbin/printf", "/system/xbin/ps",
            "/system/xbin/pstree", "/system/xbin/pwd", "/system/xbin/pwdx",
            "/system/xbin/rdev", "/system/xbin/readlink", "/system/xbin/realpath",
            "/system/xbin/renice", "/system/xbin/reset", "/system/xbin/resize",
            "/system/xbin/rev", "/system/xbin/rm", "/system/xbin/rmdir",
            "/system/xbin/rmmod", "/system/xbin/route", "/system/xbin/run-parts",
            "/system/xbin/rx", "/system/xbin/sed", "/system/xbin/seq",
            "/system/xbin/setconsole", "/system/xbin/setserial",
            "/system/xbin/setsid", "/system/xbin/sh", "/system/xbin/sha1sum",
            "/system/xbin/sha256sum", "/system/xbin/sha3sum",
            "/system/xbin/sha512sum", "/system/xbin/sleep", "/system/xbin/sort",
            "/system/xbin/split", "/system/xbin/stat", "/system/xbin/strings",
            "/system/xbin/stty", "/system/xbin/sum", "/system/xbin/swapoff",
            "/system/xbin/swapon", "/system/xbin/sync", "/system/xbin/sysctl",
            "/system/xbin/tac", "/system/xbin/tail", "/system/xbin/tar",
            "/system/xbin/taskset", "/system/xbin/tee", "/system/xbin/telnet",
            "/system/xbin/telnetd", "/system/xbin/test", "/system/xbin/tftp",
            "/system/xbin/tftpd", "/system/xbin/time", "/system/xbin/timeout",
            "/system/xbin/top", "/system/xbin/touch", "/system/xbin/tr",
            "/system/xbin/traceroute", "/system/xbin/true", "/system/xbin/ttysize",
            "/system/xbin/tune2fs", "/system/xbin/umount", "/system/xbin/uname",
            "/system/xbin/uncompress", "/system/xbin/unexpand", "/system/xbin/uniq",
            "/system/xbin/unix2dos", "/system/xbin/unlzma", "/system/xbin/unlzop",
            "/system/xbin/unxz", "/system/xbin/unzip", "/system/xbin/uptime",
            "/system/xbin/usleep", "/system/xbin/uudecode", "/system/xbin/uuencode",
            "/system/xbin/vi", "/system/xbin/watch", "/system/xbin/wc",
            "/system/xbin/wget", "/system/xbin/which", "/system/xbin/whoami",
            "/system/xbin/xargs", "/system/xbin/xz", "/system/xbin/xzcat",
            "/system/xbin/yes",
            "/system/xbin/zcat");
    symlink("mksh", "/system/bin/sh");
    symlink("toolbox", "/system/bin/cat", "/system/bin/chmod",
            "/system/bin/chown", "/system/bin/cmp", "/system/bin/cp",
            "/system/bin/date", "/system/bin/dd", "/system/bin/df",
            "/system/bin/dmesg", "/system/bin/du", "/system/bin/getevent",
            "/system/bin/getprop", "/system/bin/grep", "/system/bin/hd",
            "/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop",
            "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice",
            "/system/bin/kill", "/system/bin/ln", "/system/bin/log",
            "/system/bin/ls", "/system/bin/lsmod", "/system/bin/lsof",
            "/system/bin/md5", "/system/bin/mkdir", "/system/bin/mount",
            "/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat",
            "/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv",
            "/system/bin/ps", "/system/bin/r", "/system/bin/reboot",
            "/system/bin/renice", "/system/bin/restart", "/system/bin/rm",
            "/system/bin/rmdir", "/system/bin/rmmod", "/system/bin/route",
            "/system/bin/schedtop", "/system/bin/sendevent",
            "/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep",
            "/system/bin/smd", "/system/bin/start", "/system/bin/stop",
            "/system/bin/sync", "/system/bin/top", "/system/bin/touch",
            "/system/bin/umount", "/system/bin/uptime", "/system/bin/vmstat",
            "/system/bin/watchprops",
            "/system/bin/wipe");[/COLOR]
    [COLOR="SandyBrown"]set_perm_recursive(0, 0, 0755, 0644, "/system");
    set_perm_recursive(0, 0, 0755, 0755, "/system/addon.d");
    set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");[/COLOR]
    [COLOR="DarkRed"]set_perm(0, 3003, 02750, "/system/bin/netcfg");
    set_perm(0, 3004, 02755, "/system/bin/ping");
    set_perm(0, 2000, 06750, "/system/bin/run-as");
    set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
    set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");[/COLOR]
    [COLOR="SandyBrown"]set_perm_recursive(0, 2000, 0755, 0755, "/system/etc/init.d");[/COLOR]
    [COLOR="DarkRed"]set_perm(0, 0, 0755, "/system/etc/init.d");
    set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");[/COLOR]
    [COLOR="SandyBrown"]set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");[/COLOR]
    [COLOR="DarkRed"]set_perm(0, 2000, 0755, "/system/vendor");
    set_perm(0, 2000, 0755, "/system/vendor/etc");
    set_perm(0, 2000, 0755, "/system/vendor/firmware");[/COLOR]
    [COLOR="SandyBrown"]set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/lib");[/COLOR]
    [COLOR="DarkRed"]set_perm(0, 0, 0644, "/system/vendor/lib/libbt-vendor.so");[/COLOR]
    [COLOR="SandyBrown"]set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");[/COLOR]
    [COLOR="DarkRed"]set_perm(0, 0, 06755, "/system/xbin/librank");
    set_perm(0, 0, 06755, "/system/xbin/procmem");
    set_perm(0, 0, 06755, "/system/xbin/procrank");
    set_perm(0, 0, 06755, "/system/xbin/su");[/COLOR]
    [COLOR="Pink"]show_progress(0.200000, 0);
    show_progress(0.200000, 10);[/COLOR]
    [COLOR="Green"]package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
    package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");[/COLOR]
    [COLOR="DarkRed"]set_perm(0, 0, 0777, "/tmp/backuptool.sh");
    set_perm(0, 0, 0644, "/tmp/backuptool.functions");[/COLOR]
    [COLOR="Lime"]run_program("/tmp/backuptool.sh", "restore");[/COLOR]
    [COLOR="Navy"]delete("/system/bin/backuptool.sh");
    delete("/system/bin/backuptool.functions");[/COLOR]
    [COLOR="Pink"]show_progress(0.200000, 10);[/COLOR]
    assert(package_extract_file("boot.img", "/tmp/boot.img"),
           write_raw_image("/tmp/boot.img", "/dev/block/mmcblk0p15"),
           delete("/tmp/boot.img"));
    [COLOR="Pink"]show_progress(0.100000, 0);[/COLOR]
    unmount("/system");

    1. getprop

    The assert getprop lines aren't a must but their use is to make a safer installation.
    Example: This updater-script is for GT-I9070 so with that lines it will check in build.prop if product name matches.
    If "ro.product.device is janice, i9070 or GT-I9070 the installation will continue. If not it will abort.

    2. mount

    Mount command will mount a partition as something.
    Example: For GT-I9070 the /system partition is dev/block/mmcblk0p3
    The partitions change device by device.

    3. package_extract_file

    This line extracts a specific file contained in the zip to a specific directory.
    Example: This updater-script extracts backuptool.sh to the temporary directory /tmp

    4. set_perm

    These lines are needed to give the correct permissions to the files extracted.
    Example: backuptool.sh needs 777 permission to be executed correctly.

    5. run_program

    This line execute a bash script (*.sh).
    Example: backuptool.sh will be executed then after it will close itself and the updater-script will continue.

    6. unmount

    This command will unmount the specificated partition.
    Example: In this case it will unmount system partition.

    7. format

    This command will format the specificated partition.
    Example: This updater-script will format system partition. it needs to be unmounted before being formatted.

    8. package_extract_dir

    This command extracts a specificated folder to another folder.
    Example: This updater-script extracts system folder to system partition.

    9. symlink

    This command links executable files to a file.
    Example: busybox contains a lot of commands but they are all separated binaries that are linked to busybox binary by the symlinks.

    10. set_perm_recursive

    This command is the same as set_perm but for folders
    Example: is used to set permissions of the folder system/etc/init.d

    11 . delete

    This command deletes a file
    Example: In this updater-script is used to delete backuptool.sh.

    12. delete_recursive

    Same as delete but for folders
    28
    Aroma Installer

    Folder structure:

    Blue = Folders
    Black = Files

    META-INF
    |--com
    |..|--google
    |.....|--android
    |........|--aroma
    |........|..|--exec_demo < Little executables to sleep or take a screenshot
    |........|..|--fonts < Fonts: There must be a "small.png" for lowercase and a "big.png"
    |........|..|--icons < The icons that will be showed if called by the aroma-config
    |........|..|--langs < It may contain translations
    |........|..|--splash < The splash image/s that are showed at the start as static or animation if called by aroma-config
    |........|..|--themes < Can be chosen from the aroma-config
    |........|..|--ttf < Fonts
    |........|..|--unicode < Chinese and Cyrillic
    |........|--aroma-config < File that controls the installation
    |........|--update-binary < Executable
    |........|--update-binary-installer < Executable
    |........|--updater-script < File that controls the installation
    |--CERT.RSA < Sign files
    |--CERT.SF < Sign files
    |--MANIFEST.MF < Sign files


    Will come soon...
    9
    Thanks for creating this guide. I've featured on the XDA Portal. :)
    4
    Thanks for the answer buddy, here it's, ( this is for Galaxy note 8.0 ) my previous phones rom didn't have this problem because it was NOT using
    MTD.

    Problem is with
    format("MTD", "system");
    mount("MTD", "system", "/system");

    Open your ramdisk contents extracted from your kernel. There you should see something like fstab or .fstab. Open those files with notepad++. you will see the path to your system or data..say for xperia s the mount point for the system is dev/block/mmcblk0p12 and format is ext4 so the command becomes format("ext4","EMMC","dev/block/mmcblk0p12") and mount("ext4","EMMC","dev/block/mmcblk0p12)respectively.

    Similarly for assert(package_extract_file("boot.img", "/tmp/boot.img").This tells cwm to extract boot.img and load it in /tmp/boot.img which is wrong..again you need to find the mount point of your phone where you need to extract the boot.img...Again taking xperia s as an example. it is
    package_extract_file("boot.img", "/dev/block/mmcblk0p3").
    Hope that helps