[Galaxy Note II General] Tha TechnoCrat:
How to Write an Updater-Script with Edify Code

________________________________________

First and foremost I take no credit for the majority of this thread. I am merely posting this here as a reference for you all. I had to dig around a lot for this information and piece it together from several different threads as well as pull examples from updater-scripts in several different roms/theme/etc. Everyone else put in the work, I am just trying to make it easier for the rest of us .

After looking through several threads I have found multiple ways of doing the same thing. I will be posting everything here and then update as we go in regard to what works, what doesn't work, and what works best.

There is a basic structure for nearly all update/theme/rom/etc zip files. The one thing you need for all of them is a META-INF folder. This is the folder that holds all of the generic files/folders and your scripts. The META-INF folder contains a folder labeled "com" and three other files labeled CERT.RSA, CERT.SF, and MANIFEST.MF.

The updater-script and update-binary are kind of burried in the META-INF folder. They are located:

YourZipFile\META-INF\com\google\android\HERE

The updater-script is built using the code below. The update-binary is universal and does not need to be changed.

When working with partitions in edify, you must mount them before you do anything. So if you want to copy, delete, or modify a partition you have to first mount it.

Generic:

Code:

mount("kind", "what", "path");

Kind: Type of partition. In our case it is MTD.

What: Sort of like a description. Notice the examples below.

Path: Somewhat self explanatory.

Code:

mount("MTD", "system", "/system");

mount("MTD", "userdata", "/data");

mount("MTD", "cache", "/cache");

mount("MTD", "sdcard", "/sdcard");

I also noticed this:

Code:

mount("yaffs2", "MTD", "system", "/system");

In an updater-script from a CM7 nightly. I have been able to mount and modify system without using the "yaffs2" portion, but maybe they know something I don't.

Once you are done with you modifications/changes/etc, unmount the partition.

Code:

unmount("/system");

unmount("/data"); OR unmount("/userdata");

unmount("/cache");

unmount("/sdcard");

Format and entire partition and start with a clean slate.

Generic:

Code:

format("MTD", "partition");

MTD: Stays the same regardless.

Partition: Obviously the partition we want to format.

Code:

format("MTD", "system");

format("MTD", "cache");

format("MTD", "data");

format("MTD", "boot");

Again, a reference to "yaffs2" from CM7.

Code:

format("yaffs2", "MTD", "system");

Copy files from you .zip to phone partitions or sdcard.

Generic:

Code:

package_extract_dir("Source", "Destination");

Source: Where the file/folder is located in your .zip

Destination: Where you want to copy said file/folder to.

In your .zip, you would have a(n) folder(s) labeled system, data, or sdcard. (I can't think of any reasons you would copy anything to your cache partition and when dealing with /boot you would write to it and not copy which we will cover later on.)

Code:

package_extract_dir("system", "/system");

package_extract_dir("data", "/data");

package_extract_dir("sdcard", "/sdcard");

Write a file to a given partition. This is what I referenced in the directions directly above these. In this case, you would have the .img file in the same directory as your system, data, and sdcard folders. The same directory as the META-INF folder.

Generic:

Code:

assert(package_extract_file("partition.img", "/tmp/partition.img"),

write_raw_image("/tmp/partition.img", "partition"),

delete("/tmp/partition.img"));

Partition.img: The .img you want to write (usually boot.img)

Partition: The partition you want to write to.

Code:

package_extract_file("boot.img", "/tmp/boot.img");

write_raw_image("/tmp/boot.img", "boot");

delete("/tmp/boot.img");

Output a line of text.

Generic:

Code:

ui_print("Text Here");

Won't go into to much depth here. Just replace "text here" with whatever you want your message to be. Will have to do some testing with this. I believe using certain punctuation, such as a single period, at the end of your message my muck things up. We will see though

Delete a file. There are two different delete commands. I will see if I can give a decent definition for each.

Generic:

Code:

delete("file/path");

delete_recursive("file/path");

Code:

delete("/system/app/Email.apk");

delete_recursive("/data/dalvik-cache");

The first command will delete and continue to delete if the previous delete failed. The second command (recursive) will stop if it fails to delete. This is one of those things where I am relying on you for help. In my script is use "delete" for a single file and "recursive" for a directory. Not sure if this is correct but will update as necessary.

This is just a start for now. I have a lot more to add to this. Will update later with more code/descriptions/examples. Will also be adding links to other threads/users where credit is due. Do not think that I am trying to claim ownership of these directions. I am merely lazy and want to post this for now and will come back and edit with the appropriate information.

[TUT]Edify Installation Script Syntax's

________________________________________

Hi,

I'm making this thread for guiding some ppl to learn Edify Installation Script Syntax's

I promise u will find everything about Edify updater-Script here...

DO NOT USE NOTEPAD OR SOMETHING LIKE THAT SOFTWARE FOR MAKING UPDATER-SCRIPT, THEREFOR ERROR 6

RECOMMEND SOFTWARE FOR EDITING UPDATER-SCRIPT.

NOTEPAD++

[MENTION=535343]all[/MENTION] plz helping me here...

If u have any prob... post ur Amend update-script here will convert it to Edify updater-script...

Code:

Amend Script Syntax----------Edify Script Syntax

Info Print:-

Don't Know...----------ui_print("Ur Message Here...");

Code:

Formating:-

format SYSTEM:--------------------------format("MTD", "system");

format DATA:----------------------------format("MTD", "userdata");

format CACHE:---------------------------format("MTD", "cache");

format SDEXT:---------------------------Don't Know...

Code:

Clean Up

format("yaffs2", "MTD", "system");

format("yaffs2", "MTD", "userdata");

run_program("/sbin/busybox", "mount", "-t", "auto", "/dev/block/mmcblk0p2", "/sd-ext");

run_program("/sbin/busybox", "rm", "-rf", "/sd-ext/*");

run_program("/sbin/busybox", "rm", "-rf", "/sdcard/.android_secure/*");

run_program("/sbin/busybox", "umount", "/sd-ext");

run_program("/sbin/e2fsck", "-pv", "/dev/block/mmcblk0p2");

Code:

Copy To System & Data:-

copy_dir PACKAGE:system SYSTEM:---------mount("MTD", "system", "/system");

........................................package_extract_dir("system", "/system");

copy_dir PACKAGE:data DATA:-------------mount("MTD", "userdata", "/data");

........................................package_extract_dir("data", "/data");

Copy To SDCard:-

copy_dir PACKAGE:sdcard SDCARD:---------mount("vfat","/dev/block/mmcblk0p1","/sdcard");

........................................package_extract_dir("sdcard", "/sdcard");

Code:

Copy To SD-EXT Works With EXT 2/3/4, btrfs, Reiserfs, jfs:-

copy_dir PACKAGE:SDEXT SDEXT:-----------run_program("/sbin/busybox", "mount", "-t", "auto", "/dev/block/mmcblk0p2", "/sd-ext");

........................................package_extract_dir("sdext", "/sd-ext");

Copy To SD-EXT Externel Syntax:-

copy_dir PACKAGE:SDEXT SDEXT:-----------mount("ext4","/dev/block/mmcblk0p2","/sd-ext");

........................................package_extract_dir("sdext", "/sd-ext");

copy_dir PACKAGE:SDEXT SDEXT:-----------mount("ext3","/dev/block/mmcblk0p2","/sd-ext");

........................................package_extract_dir("sdext", "/sd-ext");

copy_dir PACKAGE:SDEXT SDEXT:-----------mount("ext2","/dev/block/mmcblk0p2","/sd-ext");

........................................package_extract_dir("sdext", "/sd-ext");

Code:

Deleting Folder:-

delete_recursive DATA:app----------delete_recursive("/data/app");

Deleting Files:-

delete DATA:etc/hosts--------------delete("/data/etc/hosts");

Folder Permission:-

set_perm_recursive 1000 1000 0771 0644 DATA:app---------set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");

File Permission:-

set_perm 2000 2000 0771 DATA:etc------------------------set_perm(2000, 2000, 0771, "/data/etc");

Symlink Setup:-

symlink /data/app/apps.apk SYSTEM:app/apps.apk----------symlink("/data/app/apps.apk", "/system/app/apps.apk");

symlink /data/etc/hosts SYSTEM:etc/hosts----------------symlink("/data/etc/hosts", "/system/etc/hosts");

ToolBox Setup:-

symlink toolbox SYSTEM:bin/date-------------------------symlink("toolbox", "/system/bin/date");

Busybox Setup:-

run_program PACKAGE:installbusybox----------------------run_program("installbusybox");

........................................................set_perm(0, 1000, 0755, "/system/xbin/busybox");

Writing Boot:-

format BOOT:-------------------------------------------package_extract_file("boot.img","/tmp/boot.img");

write_raw_image PACKAGE:boot.img BOOT:..................write_raw_image("/tmp/boot.img", "boot");

........................................................delete("/tmp/boot.img");

Writing Boot:-

format BOOT:-------------------------------------------assert(package_extract_file("boot.img", "/tmp/boot.img"),

write_raw_image PACKAGE:boot.img BOOT:..................write_raw_image("/tmp/boot.img", "boot"),

........................................................delete("/tmp/boot.img"));

Code:

Toolbox Setup Into Updater-Script:-

symlink("toolbox", "/system/bin/cat","/system/bin/chmod",

"/system/bin/chown","/system/bin/chownto",

"/system/bin/cmp","/system/bin/date",

"/system/bin/dd","/system/bin/df",

"/system/bin/dmesg","/system/bin/getevent",

"/system/bin/getprop","/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/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/renice","/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/umount",

"/system/bin/vmstat","/system/bin/watchprops",

"/system/bin/wipe");

set_perm(0, 0, 04755, "/system/bin/toolbox");

Code:

Busybox Setup Into Updater-Script:-

symlink("busybox", "/system/xbin/[","/system/xbin/[[","/system/xbin/addgroup",

"/system/xbin/adduser","/system/xbin/adjtimex","/system/xbin/ar",

"/system/xbin/arp","/system/xbin/arping","/system/xbin/ash",

"/system/xbin/awk","/system/xbin/basename","/system/xbin/bbconfig",

"/system/xbin/beep","/system/xbin/blkid","/system/xbin/brctl",

"/system/xbin/bunzip2","/system/xbin/bzcat","/system/xbin/bzip2",

"/system/xbin/cal","/system/xbin/cat","/system/xbin/catv",

"/system/xbin/chat","/system/xbin/chattr","/system/xbin/chgrp",

"/system/xbin/chmod","/system/xbin/chown","/system/xbin/chpasswd",

"/system/xbin/chpst","/system/xbin/chroot","/system/xbin/chrt",

"/system/xbin/chvt","/system/xbin/cksum","/system/xbin/clear",

"/system/xbin/cmp","/system/xbin/comm","/system/xbin/cp",

"/system/xbin/cpio","/system/xbin/crond","/system/xbin/crontab",

"/system/xbin/cryptpw","/system/xbin/cttyhack","/system/xbin/cut",

"/system/xbin/date","/system/xbin/dc","/system/xbin/dd",

"/system/xbin/deallocvt","/system/xbin/delgroup","/system/xbin/deluser",

"/system/xbin/depmod","/system/xbin/devmem","/system/xbin/df",

"/system/xbin/diff","/system/xbin/dirname","/system/xbin/dmesg",

"/system/xbin/dnsd","/system/xbin/dnsdomainname","/system/xbin/dos2unix",

"/system/xbin/du","/system/xbin/dumpkmap","/system/xbin/echo",

"/system/xbin/ed","/system/xbin/egrep","/system/xbin/eject",

"/system/xbin/env","/system/xbin/envdir","/system/xbin/envuidgid",

"/system/xbin/ether-wake","/system/xbin/expand","/system/xbin/expr",

"/system/xbin/fakeidentd","/system/xbin/false","/system/xbin/fbset",

"/system/xbin/fbsplash","/system/xbin/fdflush","/system/xbin/fdformat",

"/system/xbin/fdisk","/system/xbin/fgrep","/system/xbin/find",

"/system/xbin/findfs","/system/xbin/fold","/system/xbin/free",

"/system/xbin/fsck","/system/xbin/fsck.minix","/system/xbin/fsync",

"/system/xbin/ftpd","/system/xbin/ftpget","/system/xbin/ftpput",

"/system/xbin/fuser","/system/xbin/getopt","/system/xbin/getty",

"/system/xbin/grep","/system/xbin/gunzip","/system/xbin/gzip",

"/system/xbin/halt","/system/xbin/hd","/system/xbin/hdparm",

"/system/xbin/head","/system/xbin/hexdump","/system/xbin/hostid",

"/system/xbin/hostname","/system/xbin/httpd","/system/xbin/hush",

"/system/xbin/hwclock","/system/xbin/id","/system/xbin/ifconfig",

"/system/xbin/ifdown","/system/xbin/ifenslave","/system/xbin/ifplugd",

"/system/xbin/ifup","/system/xbin/inetd","/system/xbin/init",

"/system/xbin/insmod","/system/xbin/install","/system/xbin/ionice",

"/system/xbin/ip","/system/xbin/ipaddr","/system/xbin/ipcalc",

"/system/xbin/ipcrm","/system/xbin/ipcs","/system/xbin/iplink",

"/system/xbin/iproute","/system/xbin/iprule","/system/xbin/iptunnel",

"/system/xbin/kbd_mode","/system/xbin/kill","/system/xbin/killall",

"/system/xbin/killall5","/system/xbin/klogd","/system/xbin/last",

"/system/xbin/length","/system/xbin/less","/system/xbin/linux32",

"/system/xbin/linux64","/system/xbin/linuxrc","/system/xbin/ln",

"/system/xbin/loadfont","/system/xbin/loadkmap","/system/xbin/logger",

"/system/xbin/login","/system/xbin/logname","/system/xbin/logread",

"/system/xbin/losetup","/system/xbin/lpd","/system/xbin/lpq",

"/system/xbin/lpr","/system/xbin/ls","/system/xbin/lsattr",

"/system/xbin/lsmod","/system/xbin/lzmacat","/system/xbin/lzop",

"/system/xbin/lzopcat","/system/xbin/makedevs","/system/xbin/makemime",

"/system/xbin/man","/system/xbin/md5sum","/system/xbin/mdev",

"/system/xbin/mesg","/system/xbin/microcom","/system/xbin/mkdir",

"/system/xbin/mkdosfs","/system/xbin/mkfifo","/system/xbin/mkfs.minix",

"/system/xbin/mkfs.vfat","/system/xbin/mknod","/system/xbin/mkpasswd",

"/system/xbin/mkswap","/system/xbin/mktemp","/system/xbin/modprobe",

"/system/xbin/more","/system/xbin/mount","/system/xbin/mountpoint",

"/system/xbin/msh","/system/xbin/mt","/system/xbin/mv","/system/xbin/nameif",

"/system/xbin/nc","/system/xbin/netstat","/system/xbin/nice",

"/system/xbin/nmeter","/system/xbin/nohup","/system/xbin/nslookup",

"/system/xbin/od","/system/xbin/openvt","/system/xbin/passwd",

"/system/xbin/patch","/system/xbin/pgrep","/system/xbin/pidof",

"/system/xbin/ping","/system/xbin/ping6","/system/xbin/pipe_progress",

"/system/xbin/pivot_root","/system/xbin/pkill","/system/xbin/popmaildir",

"/system/xbin/poweroff","/system/xbin/printenv","/system/xbin/printf",

"/system/xbin/ps","/system/xbin/pscan","/system/xbin/pwd","/system/xbin/raidautorun",

"/system/xbin/rdate","/system/xbin/rdev","/system/xbin/readahead",

"/system/xbin/readlink","/system/xbin/readprofile","/system/xbin/realpath",

"/system/xbin/reformime","/system/xbin/renice","/system/xbin/reset",

"/system/xbin/resize","/system/xbin/rm","/system/xbin/rmdir",

"/system/xbin/rmmod","/system/xbin/route","/system/xbin/rtcwake",

"/system/xbin/run-parts","/system/xbin/runlevel","/system/xbin/runsv",

"/system/xbin/runsvdir","/system/xbin/rx","/system/xbin/script",

"/system/xbin/scriptreplay","/system/xbin/sed","/system/xbin/sendmail",

"/system/xbin/seq","/system/xbin/setarch","/system/xbin/setconsole",

"/system/xbin/setfont","/system/xbin/setkeycodes","/system/xbin/setlogcons",

"/system/xbin/setsid","/system/xbin/setuidgid","/system/xbin/sh",

"/system/xbin/sha1sum","/system/xbin/sha256sum","/system/xbin/sha512sum",

"/system/xbin/showkey","/system/xbin/slattach","/system/xbin/sleep",

"/system/xbin/softlimit","/system/xbin/sort","/system/xbin/split",

"/system/xbin/start-stop-daemon","/system/xbin/stat","/system/xbin/strings",

"/system/xbin/stty","/system/xbin/sulogin","/system/xbin/sum",

"/system/xbin/sv","/system/xbin/svlogd","/system/xbin/swapoff",

"/system/xbin/swapon","/system/xbin/switch_root","/system/xbin/sync",

"/system/xbin/sysctl","/system/xbin/syslogd","/system/xbin/tac",

"/system/xbin/tail","/system/xbin/tar","/system/xbin/tcpsvd",

"/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/tty","/system/xbin/ttysize",

"/system/xbin/tunctl","/system/xbin/udpsvd","/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/unzip","/system/xbin/uptime",

"/system/xbin/usleep","/system/xbin/uudecode","/system/xbin/uuencode",

"/system/xbin/vconfig","/system/xbin/vi","/system/xbin/vlock",

"/system/xbin/volname","/system/xbin/watch","/system/xbin/watchdog",

"/system/xbin/wc","/system/xbin/wget","/system/xbin/which",

"/system/xbin/who","/system/xbin/whoami","/system/xbin/xargs",

"/system/xbin/yes","/system/xbin/zcat","/system/xbin/zcip");

set_perm(0, 1000, 0755, "/system/xbin/busybox");