pulling out apk's from /data/app - Click Android Development

Hello I've rooted my phone and I'd like to copy my apks from /data/app
My phone is rooted but I didn't flash custom image, BTW I just type su and get #
Code:
$ su
su
# id
id
uid=0(root) gid=0(root) groups=1003(graphics),1004(input),1007(log),1011(adb),10
15(sdcard_rw),3001(net_bt_admin),3002(net_bt),3003(inet)
if I try to pull apks from /system/app it works:
Code:
G:\root\prova>adb pull /system/app .
pull: building file list...
pull: /system/app/htcmailwidgets.odex -> ./htcmailwidgets.odex
pull: /system/app/MarketUpdater.apk -> ./MarketUpdater.apk
pull: /system/app/HtcClockWidget.odex -> ./HtcClockWidget.odex
^C
but If I try the same command for /data/app it does NOT work
Code:
G:\root\prova>adb pull /data/app .
pull: building file list...
0 files pulled. 0 files skipped.
if I log as root and ls the dir I get:
Code:
# ls /data/app
ls /data/app
org.xbmc.android.remote.apk
com.rechild.advancedtaskkillerfull.apk
com.twofortyfouram.locale.apk
com.eolwral.osmonitor.apk
com.DroidMunkey.LocaleWifiConditions.zip
what's the matter then ? I do I copy those files ? thanks
Edit: I was able to copy some files using cat name.apk > /sdcard/nameagain.apk but I'm looking for a way to backup the entire directory

If you want to back up your apps just use one of the many apps that can do this. Like Astro.

Did u try to install busybox first and using cp * /sdcard/backup? Maybe this can help...

all issues fixed flashing custom boot image
thanks guys

Related

Google Maps 3.2.0 and New Youtube App

OK, for those on any cupcake or donut build, I've included instruction to get the new Maps 3.2.0 and the new YouTube app from Eclair (Android 2.0).
1. Download the zip file. View attachment 2.0_Apps.zip
2. Extract and place Maps.apk and YouTube.apk on the root of your SDCard
I'm using CyanogenMod 4.2.2 with CM-Recovery 1.4
In CM 4.2.2 the apps are found in /system/app ***while the phone is on and operation, if it's off or in recovery the symlink won't be active so please make sure your phone is completely booted. Don't do this from Recovery Console***
If you're using a different rom... go through your phone and locate Maps.apk and YouTube.apk update the links below accordingly
Windows users (with ADB working)
1. Open a CMD (command promt window)
Type:
- adb remount
- adb shell
- rm /system/app/Maps.apk
- rm /system/app/YouTube.apk
- cd /sdcard
- cp Maps.apk /system/app
- cp YouTube.apk /system/app
Phone Users:
1. Open a Terminal Window:
2. Type the following:
- su
- mount /system -o remount,rw
- rm /system/app/Maps.apk
- rm /system/app/YouTube.apk
- cd /sdcard
- cp Maps.apk /system/app
- cp YouTube.apk /system/app
You don't need to reboot... Apps will show up immediately in your menu. (You'll need to put them back on your Home Screen if you had them there though)
You're done... enjoy!
Is this the new maps with turn by turn?
You might want to change from
rm /system/app/Maps.apk
rm /system/app/Youtube.apk
to
mv /system/app/Maps.apk /sdcard/Maps.apk.old
mv /system/app/Youtube.apk /sdcard/Youtube.apk.old
the youtube app isn't all that stable and it never hurts to keep a backup, also I believe you need to remove any .obex files for maps and youtube to avoid problems although I didn't see any under CM 4.2.2
edit: I also believe these don't work on 1.5 might be worth pointing out in the OP
persiansown said:
Is this the new maps with turn by turn?
Click to expand...
Click to collapse
No just the one from the sholes dump, its faster to load and has layers for wikipedia, latitude and things like that
edit: more info here http://forum.xda-developers.com/showthread.php?t=574329
will this in a Hero rom? thanks!
Moved to apps location
might have to give this a shot
Totally doesn't work for me:
Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation. All rights reserved.
C:\Users\DamianV>adb remount
remount succeeded
C:\Users\>adb shell
# rm /system/app/maps.apk
rm /system/app/maps.apk
rm failed for /system/app/maps.apk, No such file or directory
# rm /system/app_s/Maps.apk
rm /system/app_s/Maps.apk
rm failed for /system/app_s/Maps.apk, No such file or directory
# cp Maps.apk /system/app
cp Maps.apk /system/app
cp: cannot stat 'Maps.apk': No such file or directory
# cp Maps.apk /system/app
cp Maps.apk /system/app
cp: cannot stat 'Maps.apk': No such file or directory
#
I tried a few different variations.
remember to remount first and make sure you have the correct directories.
some roms uses system/app, some roms uses data/app_s
NguyenHuu said:
remember to remount first
Click to expand...
Click to collapse
Yeah I did do that...odd
do u have the origional file.. i made a booboo and didnt back up. forgot to backup origional file.
can u use a file explorer and browse and double check which directories the files are actually in? i see you tried both system/app and app_s. and i see you have lowercase for maps.apk. it could be uppercase, case sensitive.
for example your first cmd #rm /system/app/maps.apk, it should be Maps.apk
also for the copying part you need to do adb push, dont do it from shell. if you do from shell it would have to be from sdcard to that directory. i noticed in your log you didnt change directory to sdcard.
IronCross1788 said:
do u have the origional file.. i made a booboo and didnt back up. forgot to backup origional file.
Click to expand...
Click to collapse
Hahah yeah I made the same mistake--was getting 'Cross-Linked' errors so I said ehh fudge it and just wiped the original out. After that I was able to get the new Maps.apk loaded up though and DAMN, definitely an improvement
I thought these apps wouldnt work on anything below android 1.6?
If you're having trouble finding the app and want to check the directory you're in you can use ls (that's LS) to list the contents of the current directory. ROMs store things in different places so if you haven't already try....
adb remount
adb shell
cd /data/
ls
At that point see if you have app, app_s, app-private etc then if you do you can ....
cd app or app_s etc
Then do..
ls Maps.apk (this is case-sensitive)
If you get nothing do
cd ..
That'll take you back one directory, so if you're in /data/app it'll put you in /data
With those few commands you can probably find it. I don't use Linux enough to know what if there's a 'find' command available in console. The other option that might be quicker would be to find the .zip of the ROM you're using, create a new folder for it, move the .zip file to the new folder and then extract it there. That way you can browse through directories more easily or use Windows / OS X / Linux search functions to find Maps.apk
Phew...
Dyonas said:
If you're having trouble finding the app and want to check the directory you're in you can use ls (that's LS) to list the contents of the current directory. ROMs store things in different places so if you haven't already try....
adb remount
adb shell
cd /data/
ls
At that point see if you have app, app_s, app-private etc then if you do you can ....
cd app or app_s etc
Then do..
ls Maps.apk (this is case-sensitive)
If you get nothing do
cd ..
That'll take you back one directory, so if you're in /data/app it'll put you in /data
With those few commands you can probably find it. I don't use Linux enough to know what if there's a 'find' command available in console. The other option that might be quicker would be to find the .zip of the ROM you're using, create a new folder for it, move the .zip file to the new folder and then extract it there. That way you can browse through directories more easily or use Windows / OS X / Linux search functions to find Maps.apk
Phew...
Click to expand...
Click to collapse
Sound advise, one last thing for anyone who didn't know the remount command is
mount -o rw,remount /system (assuming your apps are in /system/app)
so full instructions for a CyanogenMod install from the sd card would be as follows
- su
- mount -o rw,remount /system
- cd /sdcard
- mv /system/app/Maps.apk /sdcard/Maps.apk.old
- mv /system/app/YouTube.apk /sdcard/Youtube.apk.old
- cp Maps.apk /system/app
- cp YouTube.apk /system/app
To revert back to old apps if you decide you don't like the new ones
- su
- mount -o rw,remount /system
- cd /sdcard
- cp Maps.apk.old /system/app/Maps.apk
- cp Youtube.apk.old /system/app/Youtube.apk
Breakthecycle2 said:
Totally doesn't work for me:
Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation. All rights reserved.
C:\Users\DamianV>adb remount
remount succeeded
C:\Users\>adb shell
# rm /system/app/maps.apk
rm /system/app/maps.apk
rm failed for /system/app/maps.apk, No such file or directory
# rm /system/app_s/Maps.apk
rm /system/app_s/Maps.apk
rm failed for /system/app_s/Maps.apk, No such file or directory
# cp Maps.apk /system/app
cp Maps.apk /system/app
cp: cannot stat 'Maps.apk': No such file or directory
# cp Maps.apk /system/app
cp Maps.apk /system/app
cp: cannot stat 'Maps.apk': No such file or directory
#
Click to expand...
Click to collapse
If you have a2sd, try mapping to /system/sd/app or /system/sd/app_s
Make sure you remount before doing so.
hey guys!
for those who are having problems...
I just put the apk files in my sdcard and then upgraded it using ASTRO.. it worked fine!
yeah well every1 is doing this mad confusing lmfao i just installed with appsinstaller and it worked like a charm lol why is everything always confusing

[Q] Newbie trying to confirm root on Nexus One 2.2.1 FRG83

Ladies and Gents:
Please help me out.
I am trying to install a "Japanese IME" that sir JMaurice has kindly provided through one of the forums.
Did everything (I think) required in order to get my N1 connected and recognized by my laptop. Then used SuperOneClickv1.5.5-ShortFuse to gain root. Started on the IME installation and got the following.
>adb devices
List of devices attached
HTxxxPxxxxxx device
>adb kill-server
* server not running *
>adb root
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
adbd cannot run as root in production builds
>adb remount
remount failed: Operation not permitted
So I decided to confirm root.
>adb shell
$ su
su
# exit
exit
$ exit
exit
I couldn't start the "adb push" sequence due to the errors above. What am I doing wrong?
Did you reboot after executing SuperOneClick? Try that.
Jack_R1 said:
Did you reboot after executing SuperOneClick? Try that.
Click to expand...
Click to collapse
Believe I rebooted. Rebooted again just in case. Still gives me the following:
>adb root
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
adbd cannot run as root in production builds
>adb remount
remount failed: Operation not permitted
Weird, but already seen on the forum not a long time ago, I think. I'm not sure what can be done in this situation. "adb remount" can be easily substituted by shell commands, root shell you're still achieving by "su", but how to solve this - I have no idea. Might be permissions thing.
Jack_R1 said:
Weird, but already seen on the forum not a long time ago, I think. I'm not sure what can be done in this situation. "adb remount" can be easily substituted by shell commands, root shell you're still achieving by "su", but how to solve this - I have no idea. Might be permissions thing.
Click to expand...
Click to collapse
Thanks for your replies. Am searching the forums for a similar post; still no luck. Hopefully someone will chime in with an answer.
Thanks again.
You have root, you just don't have an insecure boot.img
Rusty! said:
You have root, you just don't have an insecure boot.img
Click to expand...
Click to collapse
Please clarify. Where possible, detailed explanation/instructions would be most appreciated.
You have root, that's all fine.
To use the command adb remount, you need an insecure bootloader, as you don't have this (due to using the stock boot.img) you have to mount /system as RW in a different way:
su
mount -o remount,rw /dev/mtdblock3 /system
Rusty! said:
You have root, that's all fine.
To use the command adb remount, you need an insecure bootloader, as you don't have this (due to using the stock boot.img) you have to mount /system as RW in a different way:
su
mount -o remount,rw /dev/mtdblock3 /system
Click to expand...
Click to collapse
What I am trying to achieve after adb remount is:
adb push iWnnIME/jp.co.omronsoft.iwnnime /data/data/
adb push iWnnIME/[email protected]@[email protected] /data/dalvik-cache/
adb push iWnnIME/libiwnn.so /system/lib/
.
.
.
adb push iWnnIME/libnjubase2.so /system/lib/
adb push iWnnIME/DroidSansJapanese.ttf /system/fonts/
adb install iWnnIME/iWnnIME.apk
This will actaully be the first time for me to use su. Could you confirm whether the following sequence of commands are correct?
>adb shell
$ su
# mount -o remount,rw /dev/mtdblock3 /data
# exit
$ exit
> adb push iWnnIME/jp.co.omronsoft.iwnnime /data/data/
> adb push iWnnIME/[email protected]@[email protected] /data/dalvik-cache/
>adb shell
$ su
# mount -o remount,rw /dev/mtdblock3 /system
# exit
$ exit
> adb push iWnnIME/libiwnn.so /system/lib/
.
.
.
> adb push iWnnIME/libnjubase2.so /system/lib/
> adb push iWnnIME/DroidSansJapanese.ttf /system/fonts/
> adb install iWnnIME/iWnnIME.apk
Please let me know if I am missing anything.
Wrong. You don't need to remount data, it's always writeable, and the command is erroneous - you're mounting system partition and calling it "data". You need to just push the apps to /data, as shown below:
> adb push iWnnIME/jp.co.omronsoft.iwnnime /data/data/
> adb push iWnnIME/[email protected]@[email protected] /data/dalvik-cache/
> adb shell
$ su
# mount -o remount,rw /dev/mtdblock3 /system
# exit
$ exit
> adb push iWnnIME/libiwnn.so /system/lib/
.
.
.
> adb push iWnnIME/libnjubase2.so /system/lib/
> adb push iWnnIME/DroidSansJapanese.ttf /system/fonts/
> adb install iWnnIME/iWnnIME.apk
Jack_R1 said:
Wrong. You don't need to remount data, it's always writeable, and the command is erroneous - you're mounting system partition and calling it "data". You need to just push the apps to /data, as shown below:
> adb push iWnnIME/jp.co.omronsoft.iwnnime /data/data/
> adb push iWnnIME/[email protected]@[email protected] /data/dalvik-cache/
> adb shell
$ su
# mount -o remount,rw /dev/mtdblock3 /system
# exit
$ exit
> adb push iWnnIME/libiwnn.so /system/lib/
.
.
.
> adb push iWnnIME/libnjubase2.so /system/lib/
> adb push iWnnIME/DroidSansJapanese.ttf /system/fonts/
> adb install iWnnIME/iWnnIME.apk
Click to expand...
Click to collapse
I think I am starting to understand this. I punched in the first adb push sequence and got the following:
> adb push iWnnIME/jp.co.omronsoft.iwnnime /data/data/
push: iWnnIME/jp.co.omronsoft.iwnnime/dicset/master/njuserphone.a -> /data/data/dicset/master/njuserphone.a
failed to copy 'iWnnIME/jp.co.omronsoft.iwnnime/dicset/master/njuserphone.a' to '/data/data/dicset/master/njuserphone.a': No such file or directory
Checked in tools directory and the appropriate directory/file combination was there. Does this indicate that I have to create the appropriate directory in my phone?
Someone? Anyone?
Or is it possible to execute the same adb sequence in shell as su?
I must admit, I've never pushed more that a single file at a time over, given you appear to be trying to push an entire directory tree, perhaps you might be better off copying it over to the SD card in Windows, and using busybox to get it where you need it.
Exactly as Rusty suggested above me. Otherwise you need to create all the directories manually, through adb shell mkdir <your_directory_that_is_not_on_the_phone> .

[mod][6T] init.d / services.d framework using Magisk [linux]

This thread will allow you to set up init.d (and services.d) scripts on your phone so they can run at boot time.
Prerequisites
- understanding of what "init.d" scripts mean ...
- your phone must be rooted (see https://www.xda-developers.com/oneplus-6t-unlock-bootloader-root/)
- you must have a working Magisk (see https://forum.xda-developers.com/apps/magisk)
- linux knowledge (I am not a Windows guy but instructions below should easily apply to Windows / PowerShell)
- adb knowledge
If this scares you, stop reading and go play with something else.
Attached zip file contains
- a magisk.img file
- a directory with init.d scripts
- a directory with services.d scripts
You can use the scripts provided or not use (some) of them, or write your own.
What's the difference between init.d and services.d scripts?
The idea is to have 2 directories on your phone with scripts:
Code:
/system/etc/init.d/
/system/etc/services.d/
The init.d scripts are run early in the boot (when Magisk initializes). The scripts in /system/etc/services.d/ will run a bit "later", to be precise: when sys.boot_completed = true.
Important warrning: even when sys.boot_completed = true, this does NOT guarantee that /sdcard is mounted. Your script can "sleep" until /sdcard is mounted if it relies on things on /sdcard. See for example the code in /system/etc/services.d/LS99maxvolumewarning which will show how you can do that.
Scripts in init.d should NOT rely on any of the file systems being mounted !
The framework will run all scripts in parallel. So be careful that you do not write scripts which depend on eachother!
The framework will run all scripts as background processes so that they do not hinder the normal boot of your phone.
Prepare the basic setup
To use the scripts (or your own), you must first create the directories init.d and services.d; to do that open a linux shell and do:
Code:
> adb shell
$ su
# mount -o rw,remount /system
# mkdir /system/etc/init.d/
# mkdir /system/etc/services.d/
# chown 0.0 /system/etc/init.d
# chown 0.0 /system/etc/services.d
# chmod 755 /system/etc/init.d
# chmod 755 /system/etc/services.d
# sync; exit
Putting the scripts on your phone
Download the attached zip file (initd.zip); create a directory in your linux file system and unzip, e.g.
Code:
> mkdir mydir
> cd mydir
> unzip ~/initd.zip
> adb push init.d/ /sdcard/
> adb push services.d/ /sdcard/
> adb shell
$ su
# mount -o rw,remount /system
# mv /sdcard/LS00* /system/etc/init.d/
# mv /sdcard/LS99* /system/etc/services.d/
# chown 0.0 /system/etc/init.d/*
# chown 0.0 /system/etc/services.d/*
# chmod 755 /system/etc/init.d/*
# chmod 755 /system/etc/services.d/*
# sync
# exit
$ exit
Installing the magisk image on your phone
First important remark: I need to turn this really into a proper magisk "module" but I need to study that first. Open a linux shell and do:
Code:
> cd mydir
> gunzip magisk.img.gz
> adb push magisk.img /sdcard/
> adb shell
$ su
# cd /data/adb
# mv magisk.img magisk.img.orig
# cp /sdcard/magisk.img .
# chown 0.0 magisk.img
# chmod 644 magisk.img
# sync
# exit
$ exit
That's all !!! If you now reboot your phone your init.d and services.d scripts will run.
How can I tell this is working?
Each script has a log file in /data/; whose name is LS00 (for init.d) or LS99 (for services.d) appended with the name of the script. That log file is passed as "$1" into the script and the script code can write to this log file using:
Code:
LOGFILE=$1
echo "Hi I am writing to the log" | tee -a $LOGFILE
To check that the log files are there, open a linux shell and do:
Code:
> adb shell
$ su
# ls /data/LS*
And you should see something like:
Code:
16 /data/LS00blockdev 4 /data/LS99bootclean 4 /data/LS99maxvolumewarning 4 /data/LS99sysctl
4 /data/LS00governors 4 /data/LS99callrecording 4 /data/LS99network 4 /data/LS99trimcaches
4 /data/LS00kerneltweaks 4 /data/LS99cputweaks 4 /data/LS99overlays 4 /data/LS99turnoffnightmode
4 /data/LS00procgate 4 /data/LS99enablecallrecording 4 /data/LS99remounts 4 /data/LS99workqueue
4 /data/LS00readahead 4 /data/LS99hdparm 4 /data/LS99resetprop
4 /data/LS00resetprop 4 /data/LS99magiskhide 4 /data/LS99sqlite
To check the contents of the log files, do:
Code:
> adb shell
$ su
# cat /data/LS*
And you will see logging info:
Code:
>> Starting /system/etc/init.d/LS00procgate at 19700110-17:21:12
-- remounting: mount -o remount,hidepid=2,gid=3009 /proc
<< Ending /system/etc/init.d/LS00procgate at 19700110-17:21:12
>> Starting /system/etc/services.d/LS99maxvolumewarning at 20181201-07:34:00
-- slept for 4 seconds waiting for /sdcard/Android
-- disabling max volume warning
<< Ending /system/etc/services.d/LS99maxvolumewarning at 20181201-07:33:58
What's next
Write your own scripts (and share them). Note that scripts must be owned by root (chown 0.0) and have 755 linux permissions (chmod) to run.
How does it really work?
No secrets ... magisk.img is actually a magisk module which runs the scripts. To see the inner details, do the following after you have installed the magisk image and rebooted your phone:
Code:
> adb shell
$ su
# ls -l /sbin/.core/img/template/
total 12
0 -rw-r--r-- 1 root root 0 2018-03-12 21:19 auto_mount
4 -rw-r--r-- 1 root root 935 2018-08-06 17:59 post-fs-data.sh
4 -rwxr-xr-x 1 root root 498 2018-08-05 10:11 scriptwrapper*
4 -rw-r--r-- 1 root root 2750 2018-08-11 12:07 service.sh
Magisk will run the post-fs-data.sh first and service.sh later. Check the code of both of these files to understand how init.d and services.d are ran (using run-parts). If you want more details please read: https://topjohnwu.github.io/Magisk/guides.html#scripts.
Disable ALL scripts from running
If you want to disable any script from running do:
Code:
> adb shell
$ su
# touch /data/noinitrd
To undo this and get your scripts running again, do:
Code:
> adb shell
$ su
# rm /data/noinitrd
What do my init.d scripts do?
Code:
LS00blockdev: change properties of block devices (non rotational, no kernel io stats, ...)
LS00governors: set all CPU governers (to schedutil; which is actually the 6T default)
LS00kerneltweaks: a few basic kernel tweaks + stop debug of kernel modules
LS00procgate: protections against the procgate security vulnerability (thanks to @topjohnwu)
LS00readahead: change the readahead amount on logical disk devicesw
LS00resetprop: reset model, brand, manufacturer (only useful if you would want to get your phone appear externally as a Pixel; check the code)
What do my services.d scripts do?
Code:
LS99bootclean: clean junk and log files
LS99cputweaks: improve scaling governor
LS99enablecallrecording: enable call recording (must be done at every device boot)
LS99execonce: a whole series of settings; this is only executed ONCE
LS99hdparm: increase readahead on /system and /data
LS99magiskhide: hide some packages from seeing root
LS99maxvolumewarning: remove the high volume warning (I am not sure this will always work !!!)
LS99network: TCP transmit queue and congestion control
LS99overlays: enable all overlays automatically (if you use substratum then no need to enable them manually)
LS99remounts: improve file system performance of multiple partitions
LS99resetprop: increase memory used by dalvik
LS99sqlite: REINDEX and VACCUM sqlite database files (the script only runs every 3rd day)
LS99sysctl: optimize linux kernel settings and TCP/IP performance
LS99trimcaches: trim android cache files
LS99turnoffnightmode: reset the night mode to OFF (night mode conflicts with dark mode in newer Google apps)
LS99workqueue: tune kernel work queue
Thanks man I have been trying to get boot scripts to run.
jacksummers said:
Thanks man I have been trying to get boot scripts to run.
Click to expand...
Click to collapse
excuse me for the ignorance, but what is the use of this mod?
Sent from my [device_name] using XDA-Developers Legacy app
isoladisegnata said:
excuse me for the ignorance, but what is the use of this mod?
Sent from my [device_name] using XDA-Developers Legacy app
Click to expand...
Click to collapse
At the end of OP he's got a summary of what the different scripts do.
I am stuck here > unzip ~/initd.zip
It keeps saying:
1|OnePlus6T:/mydir # unzip /initd.zip
unzip: can't open /initd.zip[.zip]
Any ideas I extracted initd to the directory where my platform tools are and where I do my system updates am I supposed to extract it somewhere else? How do I create a directory in my linux shell using windows cmd promts?
kirschdog1 said:
I am stuck here > unzip ~/initd.zip
It keeps saying:
1|OnePlus6T:/mydir # unzip /initd.zip
unzip: can't open /initd.zip[.zip]
Any ideas I extracted initd to the directory where my platform tools are and where I do my system updates am I supposed to extract it somewhere else? How do I create a directory in my linux shell using windows cmd promts?
Click to expand...
Click to collapse
Looks like a simple typo "/initd.zip" implies that the file is located in the root directory. "~/initd.zip" would be in your "home" directory. Since I don't know if "/mydir" is defined as your home directory and presuming initd.zip is located there try "unzip /mydir/initd.zip" (no quotes).
Still not working
Base2 said:
Looks like a simple typo "/initd.zip" implies that the file is located in the root directory. "~/initd.zip" would be in your "home" directory. Since I don't know if "/mydir" is defined as your home directory and presuming initd.zip is located there try "unzip /mydir/initd.zip" (no quotes).
Click to expand...
Click to collapse
1|OnePlus6T:/ # cd mydir
OnePlus6T:/mydir # unzip ~/initd.zip
unzip: can't open //initd.zip[.zip]
1|OnePlus6T:/mydir # unzip /mydir/initd.zip
unzip: can't open /mydir/initd.zip[.zip]
Any ideas? How to get this working? I tried both commands to no avail.
kirschdog1 said:
I am stuck here > unzip ~/initd.zip
It keeps saying:
1|OnePlus6T:/mydir # unzip /initd.zip
unzip: can't open /initd.zip[.zip]
Any ideas I extracted initd to the directory where my platform tools are and where I do my system updates am I supposed to extract it somewhere else? How do I create a directory in my linux shell using windows cmd promts?
Click to expand...
Click to collapse
You have to create the directory mydir on your linux machine, not on your phone.
Base2 said:
Looks like a simple typo "/initd.zip" implies that the file is located in the root directory. "~/initd.zip" would be in your "home" directory. Since I don't know if "/mydir" is defined as your home directory and presuming initd.zip is located there try "unzip /mydir/initd.zip" (no quotes).
Click to expand...
Click to collapse
No, not a typo. mydir is on your PC, not on the phone !
foobar66 said:
No, not a typo. mydir is on your PC, not on the phone !
Click to expand...
Click to collapse
How do I create the directory? I'm using a windows device using adb command prompts?
kirschdog1 said:
How do I create the directory? I'm using a windows device using adb command prompts?
Click to expand...
Click to collapse
Search how to create directories in PowerShell ... I am not a Windows guru :crying:
foobar66 said:
Search how to create directories in PowerShell ... I am not a Windows guru :crying:
Click to expand...
Click to collapse
Ok thank you.ill hold off as it appears to be above my pay grade.
foobar66 said:
You have to create the directory mydir on your linux machine, not on your phone.
Click to expand...
Click to collapse
This won't work anymore as magisk doesn't use magisk.img anymore

How To Guide How to change the home directory for the user root on an Android phone

How to change the home directory for the user root on an Android phone
When working a lot in a shell via adb on an Android phone it's usefull to be able to store some user dependent config files in the home directory of the user. So let's see how that can be implemented on a phone running Android.
Note: The config was done and tested on a phone running OmniROM (based on Android 12)
The home directory for all user used in an (adb) shell on Android is the root directory "/".
Using a home directory for more then one user is not really usefull and in addition on Android "/" is mounted read-only so more or less useless as home directory.
Therefor this should be changed . Unfortunately there is no /etc/passwd file in Android to configure the home directory for a user.
Well, there is an /etc/passwd file (probably for compatibily reasons) but it's empty:
Code:
[email protected]_I006D:/ $ ls -l /etc/passwd
-rw-r--r-- 1 root root 0 2009-01-01 01:00 /etc/passwd
[email protected]_I006D:/ $
And as far as I know there is no other config file to configure the home directory of the user in the Android OS.
So we must implement some work around to get this working.
The shell on Android behaves like normal shells on Linux and executes the file /etc/profile when starting a new session.
In Android /etc is a symbolic link to /system/etc:
Code:
[email protected]_I006D:/ # ls -ld /etc
lrw-r--r-- 1 root root 11 2009-01-01 01:00 /etc -> /system/etc
[email protected]_I006D:/ #
And in the default config there is no file called profile in that directory:
Code:
[email protected]_I006D:/ $ ls -l /etc/system/profile
ls: /etc/system/profile: No such file or directory
[email protected]_I006D:/ $
Because /system is also mounted read-only we need the magic tool Magisk again to create the file /system/etc/profile.
To create the file /system/etc/profile create these directories and files on the phone as user root (assuming Magisk is already installed on the phone):
Code:
[email protected]_I006D:/ # find /data/adb/modules/initshell/
/data/adb/modules/initshell/
/data/adb/modules/initshell/system
/data/adb/modules/initshell/system/etc
/data/adb/modules/initshell/system/etc/profile
[email protected]_I006D:/ #
and reboot the phone. After the reboot there should be the writable file /etc/profile:
Code:
[email protected]_I006D:/ # ls -l /etc/profile
-rw-rw-rw- 1 root root 1100 2022-07-14 14:51 /etc/profile
[email protected]_I006D:/ #
which is in reality the file
Code:
/data/adb/modules/initshell/system/etc/profile
Now you can edit the file /etc/profile as user root until it fullfills your requirements (be aware that all changes in that file are now persistent).
To test the changes open a new adb session (you should not close the current adb session to be able to fix an error in the profile if opening a new adb session fails).
This file can now be used to define the home directory for the user. The home directory should be on one of the writable filesystem, e.g. in /data:
Code:
# add in /etc/profile
HOME="/data/home/root"
export HOME
and the result is:
Code:
[email protected]_I006D:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_rw),1079(ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid) context=u:r:su:s0
[email protected]_I006D:/ # echo $HOME
/data/home/root
[email protected]_I006D:/ #
Note that there is not really a writable filesystem for the user shell so this approach to change the home directory is mainly usable for the user root.
The file /etc/profile can also be used to init some other settings for (adb) sessions (e..g. change the PATH, etc) . This feature can be used for sessions for non-root users also.
For additional user dependent configs you can also create the file .profile in the home directory of the user; the file ${HOME}/.profile will be executed after the execution of the file /etc/profile.
Notes:
Be aware that creating a profile for the user root and changing the home directory for the user root might have some side effects on other processes using the shell!
Therefor it's recommended to use the command "tty -s" to test if the profile is executed in an interactive session:
Code:
#
# check if we're running in an interactive session
#
if ! tty -s; then
#
# this is not an interactive session - so we're just doing nothing at all
#
:
else
#
# running in an interactive session
#
...
fi
You can also check if the parent process is the adb daemon to not do anything in non-adb sessions.
Code:
ps -fp $PPID| grep adbd >/dev/null
if [ $? -ne 0 ] ; then
#
# not running in an adb session
:
else
#
# running in an adb session
...
fi
For testing purpose I suggest to open at least two shells via adb to be able to fix an error in case opening a new shell fails due to a bug in the profile.
If opening a shell session fails due to an error in the /etc/profile and you do not have another open shell either delete the file /data/adb/modules/initshell/system/etc/profile with a filemanager with root access on the phone or boot the phone from a recovery image (like TWRP) and delete or edit the file /data/adb/modules/initshell/system/etc/profile.
I initially looked at this feature to enable a persistent command history for the shell on the Android phone. But after some google searches I found out that persistent history shells are disabled for the shell binary on Android. So this will not work without recompiling the shell binary.
The attached example for the profile (rename the attached file profile.txt to profile) will use the directory /data/home/root as home directory for the user root and will not change the home directory for other users. The profile will do nothing if not running in an interactive session.
The directory /data/home/root will be created by the profile if it does not yet exist.
As always, if the config is working you should create a real Magisk Module for the profile.
The Magisk Module attached, initshell.zip, can be used to create a Magisk Module with your own profile:
To create a new Magisk Module with your own /etc/profile do:
Code:
# create an empty working directory
#
TEMPDIR="/tmp/newdir"
mkdir "${TEMPDIR}"
cd "${TEMPDIR}"
# unpack the zip file in the new directory
#
unzip ../initshell.zip
# now edit the file ${TEMPDIR}/system/etc/profile
# also (optional) edit the files config.sh and module.prop in the new directory to document your changes
# the script customize.sh from the module will be executed once when the module is installed. You might add the code
# create the home directories or any other code here
#
# and recreate the zip file
#
zip -r ../initshell.zip .
Note:
Both attached files are also available from my web site: http://bnsmb.de/My_HowTos_for_Android.html

How To Guide How to make files in /system writable

How to make files in /system writable
In Android 12 and newer /system is mounted read-only can not be remounted read-write anymore.
Sometimes it's useful that one or more files in /system are writable (for example for develop tasks or for testing)
This can be implemented using Magisk (see How to change files in the directory /system for more details)
Example :
Make the file /system/etc/vimrc writable
Note:
In Android 12 /etc is a symbolic link to /system/etc.
Open a (adb) shell as user root and do
Bash:
# create a dummy Magisk module
#
mkdir -p /data/adb/modules/writable_system/system/etc
# copy the file that should be writable to the Magisk module directory
#
cp /system/etc/vimrc /data/adb/modules/writable_system/system/etc/
# make the file in the Magisk module directory writable
#
chmod +w /data/adb/modules/writable_system/system/etc/vimrc
Now reboot the phone.
After the reboot the file /system/etc/vimrc is writable by the user root, Example:
Code:
ASUS_I006D:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
ASUS_I006D:/ #
ASUS_I006D:/ # ls -l /system/etc/vimrc
-rw-r--r-- 0 root root 3350 2022-11-04 11:36 /system/etc/vimrc
ASUS_I006D:/ # tail -2 /system/etc/vimrc
\ | wincmd p | diffthis
endif
ASUS_I006D:/ #
ASUS_I006D:/ # echo '" Test Comment' >>/system/etc/vimrc
ASUS_I006D:/ #
ASUS_I006D:/ # tail -2 /system/etc/vimrc
endif
" Test Comment
ASUS_I006D:/ #
Only the user root can access the directory /data/adb. Therefor the files configured using this approach are only writable by the user root.
To make a file in /system writable for non-root users use this method:
Open a (adb) shell and execute as user shell:
Bash:
#
# create a directory that is writable for the user shell
#
mkdir /data/local/tmp/writable_system
mkdir /data/local/tmp/writable_system/etc
#
# copy the file that should be writable to that directory
#
cp /system/etc/vimrc /data/local/tmp/writable_system/etc
The next commands must be executed as user root:
Bash:
# create dummy Magisk module
#
mkdir -p /data/adb/modules/writable_system/system/etc
#
# create a symbolic link to the file in the writable directory in the directory with the dummy Magisk module
#
ln -s /data/local/tmp/writable_system/etc/vimrc /data/adb/modules/writable_system/system/etc
Now reboot the phone.
After the reboot the file /system/etc/vimrc is writable by the user shell, Example:
Code:
ASUS_I006D:/ $ id
uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_rw),1079(ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid),3012(readtracefs) context=u:r:shell:s0
ASUS_I006D:/ $
ASUS_I006D:/ $ tail -2 /system/etc/vimrc
\ | wincmd p | diffthis
endif
ASUS_I006D:/ $
ASUS_I006D:/ $ echo '" Test Comment' >>/system/etc/vimrc
ASUS_I006D:/ $
ASUS_I006D:/ $ tail -2 /system/etc/vimrc
endif
" Test Comment
ASUS_I006D:/ $
Important:
The writable directory can also be in a sub directory in /sdcard. But be aware that /sdcard is mounted late in the boot process so it might be that the overwritten file in /system will be used by the OS when the bind mount points to a non-existent file if using a sub directory in /sdcard.
The changes to the file done using these methods are "persistent" as long as Magisk is installed in the boot partition.
To restore the file with the original contents after each new reboot of the phone without removing the writable config open a (adb) shell as user root and execute:
Bash:
#
# restore the file /data/adb/modules/writable_system/system/etc/vimrc from the original file /system/etc/vimrc
#
# this must be done before Magisk creates the bind mounts
#
echo "cp /system/etc/vimrc /data/adb/modules/writable_system/system/etc/vimrc">/data/adb/post-fs-data.d/restore_vimrc.sh
chmod 755 /data/adb/post-fs-data.d/restore_vimrc.sh
Now the file in the dummy Magisk module will be restored with the contents of the original file from /system after each reboot
To temporary access the original file from /system just stop the Magisk daemon, Example:
Code:
ASUS_I006D:/ # echo '"Test Test' >>/etc/vimrc
ASUS_I006D:/ #
ASUS_I006D:/ # tail -1 /etc/vimrc
"Test Test
ASUS_I006D:/ #
ASUS_I006D:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
ASUS_I006D:/ #
ASUS_I006D:/ # magisk --stop
ASUS_I006D:/ #
ASUS_I006D:/ # id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
ASUS_I006D:/ #
ASUS_I006D:/ # tail -1 /etc/vimrc
endif
ASUS_I006D:/ #
Note
Stopping the Magisk daemon will disable all bind mounts done by Magisk.
Restarting the Magisk daemon will not re-create the bind mount - to re-activate the bind mount for the writable file after stopping the Magisk daemon the phone must be rebooted.
To make more then one file writable in a sub directory in /system you can also replace the complete folder using these commands as user root:
Bash:
#
# make all files in /system/etc writable by the user root
#
mkdir -p /data/adb/modules/writable_system/system/etc/
cd /system/etc
find . | cpio -pdum /data/adb/modules/writable_system/system/etc/
touch /data/adb/modules/writable_system/system/etc/.replace
Now Magisk will replace the directory /system/etc with the directory /data/adb/modules/writable_system/system/etc after the next reboot
Notes
You should test these commands with a not important file like /system/etc/vimrc before changing important files.
It is NOT recommended to use this approach on productive phones.
See How to change any file or directory using Magisk for another approach to change files on read-only mounted filesystems.
Trouble Shooting
As always: If something does not work like expected check the Magisk log file /cache/magisk.log and also check the infos in this post.
Does this method require root on device?
FormulaSea said:
Does this method require root on device?
Click to expand...
Click to collapse
yes
Is there any method don't require root?
This looks interesting. Are you using OverlayFS for this? Looks like you did quite the research on this
Read-only is boring even as root. It's time for some RW baby
FormulaSea said:
Does this method require root on device?
Click to expand...
Click to collapse
I don't know a method to do this without root access.
But you can disable the root access in Magisk after implementing the changes . You could even uninstall tne Magisk app afterwards (but not the Magisk part from the boot partition)
regards
Bernd
lebigmac said:
This looks interesting. Are you using OverlayFS for this? Looks like you did quite the research on this
Read-only is boring even as root. It's time for some RW baby
Click to expand...
Click to collapse
I don't know what exactly you mean by "OverlayFS" - I use MagiskModules to modify files in /system and as far as I know Magisk used bind mounts to implement it.
>>Read-only is boring even as root.
Correct, but if you made the changes directly in /system, they would not survive the next OS upgrade.
One of the great advantages of this feature of Magisk is that it survives an OS upgrade - so as long as the change is compatible with the installed OS version, it only needs to be done once.
regards
Bernd
Thanks it worked on the audio folders on my 7t pro but didn't work on the boot animation folder. Both folders appear in the adb though with there files. Let me know op if you figure out how to do the boot animation folder it's moved to /my_product/ instead of /system/ I see that the my product folder and boot animation appear in the adb modules like the audio folder does and I swapped files the same way as with my audio modding but the changes for boot didn't take effect.
cbomb1337 said:
Thanks it worked on the audio folders on my 7t pro but didn't work on the boot animation folder. Both folders appear in the adb though with there files. Let me know op if you figure out how to do the boot animation folder it's moved to /my_product/ instead of /system/ I see that the my product folder and boot animation appear in the adb modules like the audio folder does and I swapped files the same way as with my audio modding but the changes for boot didn't take effect.
Click to expand...
Click to collapse
/my_product is not in the list of folders supported by Magisk so that may not work
Please post the output of these commands (executed as root user):
df -h
mount
ls -ald /*
ls -lZd /my_product
and a
ls -ldZ $( find /data/adb/modules/ )
and
cat /cache/magisk.log
(or attach the log file to the post if too big)
regards
Bernd
Here is this the correct log file. Thank you for responding to me.
cbomb1337 said:
Here is this the correct log file. Thank you for responding to me.
Click to expand...
Click to collapse
can you also post the output of the OS commands listed?
I Don't know how.
It didn't let me add the log here. Sorry that's it's cut and paste I tried a few termux commands to save a log but the were blank. I don't understand how to do it right.
Edit here I managed to upload the log to drive
https://drive.google.com/uc?id=1uWurf_462b5uLC_D21SFcgLcBWiXQZOn&export=download
bnsmb said:
can you also post the output of the OS commands listed?
Click to expand...
Click to collapse
Linefeeds are missing in that file so it's very hard to interpret the file contents correct
Can you do in a adb shell on the phone:
Bash:
(
set -x
set -v
su -
echo
df -h
echo
mount
echo
ls -ald /*
echo
ls -lZd /my_product
echo
ls -ldZ $( find /data/adb/modules/ )
echo
) > /sdcard/Download/oscmds.log 2>&1
then
Bash:
gzip /sdcard/Download/oscmds.log
and post / upload the file
/sdcard/Download/oscmds.log.gz
regards
Bernd
and
Here is the gzip I wasn't sure what was going on after entering that first command the termux was frozen for a few minutes. Also With the folders in the module folder and them being a copy of the original folder is it ok to delete them as a whole folder to remove the rw and revert it of needed. I tried it and didn't see any issues doing it but wanted to know if it reverted it properly and does deleting the module folders make me lose anything original that was in it or is my stock stuff safe because it's through magisk.
cbomb1337 said:
Here is the gzip I wasn't sure what was going on after entering that first command the termux was frozen for a few minutes. Also With the folders in the module folder and them being a copy of the original folder is it ok to delete them as a whole folder to remove the rw and revert it of needed. I tried it and didn't see any issues doing it but wanted to know if it reverted it properly and does deleting the module folders make me lose anything original that was in it or is my stock stuff safe because it's through magisk.
Click to expand...
Click to collapse
Looks like /my_product is a directory in the root filesystem but on the other hand there is a mount point called /mnt/vendor/my_product so I'm not sure about that.
If /my_product is really only a separate directory in the root filesystem the only method to change it is to manipulate the ramdisk used for booting the phone (only if the phone is using a ramdisk, of course).
Can you check if there are other directories called my_product:
find / -type d -name my_product 2>/dev/null
And, if there are any, compare the files in that directory with the files in the directory /my_product?
regards
Bernd
The only folder that has the same boot animation files is the /dev/ ones and the mnt one like you said.
It's all good if it can't be done i just found a magisk module before which works for flashing my boot animation
cbomb1337 said:
The only folder that has the same boot animation files is the /dev/ ones and the mnt one like you said.
Click to expand...
Click to collapse
Then it can't be done using the standard Magisk feature for making r/o mounted filesystems read-write.
cbomb1337 said:
It's all good if it can't be done i just found a magisk module before which works for flashing my boot animation
Click to expand...
Click to collapse
OK, do you have the URL?
And you could just check the contents of the zip file with the Magisk Module on how it's implemented
regards
Bernd
bnsmb said:
Then it can't be done using the standard Magisk feature for making r/o mounted filesystems read-write.
OK, do you have the URL?
And you could just check the contents of the zip file with the Magisk Module on how it's implemented
regards
Bernd
Click to expand...
Click to collapse
I read the module it mentions binding. I don't understand none of it :/ I upload the module here and removed the boot animation to make it small.
cbomb1337 said:
I read the module it mentions binding. I don't understand none of it :/ I upload the module here and removed the boot animation to make it small.
Click to expand...
Click to collapse
Cool -- that's the solution I also found in the meantime (and successfully tested it on my Zenfone 8)
In principle the module does for the bootanimation file what Magisk does if you replace some directories or files in /system
I will write a general HowTo how that works today or in the next days
regards
Bernd

Categories

Resources