[TUT] adding shell script to your rom - Sony Ericsson Xperia Mini, Mini Pro, Xperia Pro, A

I understood how it do it so I'm posting here for people like me who search this forum for the same reason, first you just have to add the shell script which you want to execute, in your Rom . Add it where meta-inf and system folders are present i.e, the root of the Rom folder . Then you just have to add few lines to the updater-script to run the shell script just once while just flashing the Rom . For example to run a shell script called autoroot.sh only once while flashing the Rom , the lines to be added to the updater-script are,
#this line copies the shell script from the Rom's zip package to the temporary directory in the phone
package_extract_file("autoroot.sh", "/tmp/autoroot.sh");
#setting permission for the shell script to execute it . 777 permission is set to avoid any discrepancy while executing the script. The script will get deleted automatically on next boot as it it placed in the temporary folder.
set_perm(0, 0, 0777, "/tmp/autoroot.sh");
#the script is being executed by issuing the following command in the updater-script.
run_program("/tmp/autoroot.sh");
#to make sure that the script was executed properly you can add a line in the shell script at last , to create a file and display few text in it which you want. By this way you can understand if there is a file created at the directory defined in the script then the script ran perfectly otherwise the script didn't get executed as expected. For example,
echo "autoroot.sh was executed successfully" >> /data/local/tmp/autorootlog.txt
#here the autorootlog.txt file will be created and inside that autoroot.sh was executed successfully will be displayed.
REMEMBER THE ABOVE LINE HAS TO BE INSERTED IN THE SHELL SCRIPT ITSELF ALL THE OTHER LINES HAS TO BE ADDED TO THE UPDATER-SCRIPT WHICH IS PRESENT IN META-INF FOLDER .
Always edit the updater-script as well as shell scripts using notepad++ and keep the eol conversion to Unix format and save . (eol conversion can be found in the edit menu of notepad ++) always add a empty line at the end of scripts and updater-script .
I'm just a noob trying to learn something about linux and android . Just post your questions here. I'll answer if I have the proper knowledge about it.
Thanks for spending your valuable time in reading my post
Sent from my smultron using xda app-developers app

Related

[Q] init.d support for stock rom P500

Hi, I just read some tips about using script for enhancing performance.
It says that the script must be places in system/etc/init.d
But in stock rom P500 (GB 2.3.3 v20G) I can't find folder init.d
The questions:
1. Is the stock rom already support init.d script execution?
2. If yes, will it works just by creating folder init.d and place script there?
3. If not, how to enable support init.d for Optimus One, stock ROM rooted?
I search this forum and find some guide about init.d support in other phone models, will it works on Optimus One too, or perhaps it needs particular way to do it?
1. No
2. If you have init.d support in rom.
3. Only way to do it is cook a custom rom through kitchen to add init.d support
terratrix said:
1. No
2. If you have init.d support in rom.
3. Only way to do it is cook a custom rom through kitchen to add init.d support
Click to expand...
Click to collapse
3. answer is some wrong:
you doesnt need to cook a custom rom, you only need the adb (android debug bridge) to "speak" with your phone:
0.) on your phone download busybox from market
1.) install android sdk on your computer
2.) install LG usb drivers on your computer
3.) open a console (on windows use the "cmd" command)
4.) remount "root" to read/write (type following commands in the cmd)
Code:
adb shell
mount -o remount,rw /dev/block/mmcblk1 /
exit
5.) retrive the init.rc file from your device: (type the command in the cmd)
Code:
adb pull /init.rc C:\users\XXXXX\Desktop\init.rc
6.) open the init.rc file and add the busybox command to execute scripts in the /system/etc/init.d folder
after the lines that does mkdirs etc but BEFORE zygote starts (this stars the whole android)...
Code:
service userinit /system/xbin/busybox run-parts /system/etc/init.d
oneshot
7.) close and save the file, push it back to your device, than reboot:
Code:
adb push XXXX\XXXX\init.rc /init.rc
now you can use the init.d folder as in CyanogenMod / other custom roms.
andy572 said:
3. answer is some wrong:
you doesnt need to cook a custom rom, you only need the adb (android debug bridge) to "speak" with your phone:
0.) on your phone download busybox from market
1.) install android sdk on your computer
2.) install LG usb drivers on your computer
3.) open a console (on windows use the "cmd" command)
4.) remount "root" to read/write (type following commands in the cmd)
Code:
adb shell
mount -o remount,rw /dev/block/mmcblk1 /
exit
5.) retrive the init.rc file from your device: (type the command in the cmd)
Code:
adb pull /init.rc C:\users\XXXXX\Desktop\init.rc
6.) open the init.rc file and add the busybox command to execute scripts in the /system/etc/init.d folder
after the lines that does mkdirs etc but BEFORE zygote starts (this stars the whole android)...
Code:
service userinit /system/xbin/busybox run-parts /system/etc/init.d
oneshot
7.) close and save the file, push it back to your device:
Code:
adb push XXXX\XXXX\init.rc /init.rc
now you can use the init.d folder as in CyanogenMod / other custom roms.
Click to expand...
Click to collapse
Ah thanks for correcting my answer ^^
Dear Andy,
Thanks 4 the procrdure, however i wanted to ask you whether there is any tool to check that the scripts in the init.d folder r getting executed?
andy572 said:
.....guide...
Click to expand...
Click to collapse
That works? I mean init.rc is in ramdisk in boot partition, and gets unpacked on boot, so any changes in / are lost on reboot - at least that is what was told to me.
Kanad said:
Dear Andy,
Thanks 4 the procrdure, however i wanted to ask you whether there is any tool to check that the scripts in the init.d folder r getting executed?
Click to expand...
Click to collapse
Option 1 - run logcat during boot (Trough ADB, type logcat in adb shell, a little simpler if using Droid Explorer)
Option 2 - Run a script that changes something that was previously different. Try installing the supercharger (with different from normal minfree values), rebooting and running the script again to make sure the minfree values are modified. If so, init.d is working and vice versa.
andy572 said:
6.) open the init.rc file and add the busybox command to execute scripts in the /system/etc/init.d folder
after the lines that does mkdirs etc but BEFORE zygote starts (this stars the whole android)...
Code:
service userinit /system/xbin/busybox run-parts /system/etc/init.d
oneshot
Click to expand...
Click to collapse
I go directly to this step, using root explorer on phone (not using PC+ADB)
But after reboot, init.rc i've already edited before has been restored again to original value, as said by Tasssadar.
Maybe I should do it using PC+ADB instead of direct edit on phone?
optimuswhite said:
I go directly to this step, using root explorer on phone (not using PC+ADB)
But after reboot, init.rc i've already edited before has been restored again to original value, as said by Tasssadar.
Maybe I should do it using PC+ADB instead of direct edit on phone?
Click to expand...
Click to collapse
you are trying to modify a running system, sure - you have to do such things
in the boot.img file and have to re-flash it. there is no way to modify a running
system, sorry for misunderstanding.
andy572 said:
you are trying to modify a running system, sure - you have to do such things
in the boot.img file and have to re-flash it. there is no way to modify a running
system, sorry for misunderstanding.
Click to expand...
Click to collapse
I see.
so, is someone can guide me how to deal with boot.img on stock rom?
optimuswhite said:
I see.
so, is someone can guide me how to deal with boot.img on stock rom?
Click to expand...
Click to collapse
go to your recovery, make a backup of your current system and connect the
phone via usb to your computer and copy the rom from the phone to your computer.
then, use the htc kitchen to modify the created rom / or the boot.img

[DEV HELP] make an apk execute a shell command when opening

Hey, i have recently been working on my own theming system, im not that good with .apk files yet, i know XML and am learning smali, but i am clueless with building..
so basically this is how my theming system works, i have a directory called /system/etc/SPRtools containing an ORS(openrecoveryscript) and a flashable .zip file called theme.zip, at the moment to start the theming system i have made a bin file that executes the following
#!/system/bin/sh
cp /system/etc/ORS /cache/recovery/openrecoveryscript
cp /system/etc/theme.zip /sdcard/
reboot recovery
now how would i go about making a .apk file that you click on and does this?
or even give me a hand on integrating it in SecSettings.apk??
oh and i also have an init.d script that deletes the copied theme.zip for the sdcard!
thanks guys!!

init.d doesn't work

Hi,
I've followed this how-to: http://forum.xda-developers.com/showthread.php?t=1933849 to enable init.d support on my phone (GT-S5570i, Android 2.3.6, stock rom)
I have installed BusyBox (standard install, not smart install), then, after installing and launch Uni-init, i get "SUCCESS ! You have init.d support !"
Well, so I went into init.d folder and I manually launch the script "00test" to see if I am able to run scripts on my phone: ok: inside /data folder i see the test.log file! Then I delete this test file to see if my phone is really able to execute this script from the init.d folder at the boot.
Well, after reboot I go in /data but I don't see any test.log file.
Why? Uni-init told me that I have init.d support, but this don't seems true. The permissions on init.d folder and scripts are ok (rwxr-xr-x). I've also tried to change the ownership to 0 (root) and to 1000 (system) to the test script, and I've also tried another init.d activator, this one: http://download.apks.org/?apkid=com.broodplank.initdtoggler&ver=1.3&server=apk-s#.VbluDvldLcc bot no luck again.
Then I've found this solution: http://forum.xda-developers.com/showthread.php?t=2725680 which, differently from the other solutions, has inserted the runinit script inside /bin. Well: so I rebooted again, but the init scripts aren't still able to run at boot.
If i start the runinit script from a shell window, ok: scripts from init.d folder are properly executed, but again, when I boot my phone, these scripts aren't executed. Maybe I should tell to some system files to execute runinit at the boot time? I miss something?
Many thanks.
In another discussion I've read the following statement:
- the boot process calls install-recovery.sh while executing init.rc
- the install-recovery.sh calls sysinit script
- the sysinit script runs /system/etc/init.d/* in order
Click to expand...
Click to collapse
But I've found that my init.rc exclude the install-recovery.sh script:
Code:
#service flash_recovery /system/etc/install-recovery.sh
# oneshot
So, I don't have any chance to implement the init.d solution?

Extract files and permissions help?

Hi guys,
I'm trying to make some changes to an android box firmware. Ultimately what I'm trying to do is extract some files from a tar.gz into a folder on the root.
I have got as far as creating the directory on the root, and having a shell script run that extracts the files to the root folder. Problem is, the files aren't appearing in my folder.
This is what I've done so far:
1. Extracted the boot image in the firmware to edit "init.rc". I've made the changes so I can make my "test" folder with 777 permissions.
In the "on init" section of init.rc I have this:
Code:
mkdir /test 777
2. I've created the following script (test.h) that runs from init.amlogic.board.rc
Code:
#!/system/bin/sh
MARK=/data/local/test
if [ ! -e $MARK ]; then
echo "test script"
busybox tar -zxf /system/test.tar.gz -C /test/
touch $MARK
echo "OK, installation complete."
fi
This is the code in the init.amlogic.board.rc
Code:
service test_copy /system/bin/test.sh
user root
group root
disabled
oneshot
on property:sys.boot_completed=1
start test_copy
Once the box has booted I can see the "test_copy" file but the tar.gz files are not in my root folder.
The last thing I need is the files from the tar.gz to be 777 permissions.
Obviously I'm a complete noob at this, hope that makes sense and someone can help?

Using shell before mounting system partition

Hi, I'd like to ask a general question about device boot. I've made some changes in init.rc and I packed again boot.img. In particular, I've added a .sh script to ramdisk root directory.
The script is named mount_partitions.sh and it does just this task. However, boot.img needs a shell to execute it, but /system is not mounted yet, at that point. So, I need to add a shell to to ramdisk root directory so that init executable can run the .sh script.
Exactly, how I could add shell support in boot.img without mounting the system partition? Any ideas?
Solved
I've found a way to use a shell before mounting system partition. Essentially, it's possible to place a busybox binary (i.e. taken from /system/xbin directory located in another android phone with installed busybox) into ramdisk root directory of boot.img, giving it execute permission in init.rc by chmod command, after remounted ramdisk root directory in read-write mode (by mount command put always in init.rc). It could be also be needed to give execute permission to the shell script (always by chmod command).
Then, it's needed run the shell script by busybox ash command, putting it into init.rc. The line looks like as following:
Code:
exec /busybox ash /myscript.sh
Don't forget to put also a line for remounting ramdisk root directory in read-only mode, after ash shell finished to execute the script (always using mount command in init.rc).
Remember to use the following shebang at the beginning of the shell script:
Code:
#!/busybox sh
shouldn't the shebang end with "ash" instead of just "sh"?
it's just a sh script but it could be true.

Categories

Resources