Hello there.
First of all, let me thank this incredible tool made by @topjohnwu, it's really a nice idea and implementation. I don't own any of the code here, it's just a modification to be able to install and run under Android-x86.org latest Nougat version (as of now, 7.1-rc2). It may work with other versions, including RemixOS and PhoenixOS, but I have not tested it. It was tested using a normal installation on a FAT32 partition, and should work with either a RW or RO system image.
Newer versions of Magisk don't use magic_magisk.sh anymore, that's why I've chosen v12.0 (it can be downloaded from the official thread on XDA). If topjohnwu want to add patches to the source code, I would be more than glad to help. But probably it's not worth the trouble... Another log is created on cache called logtmp.log if you want to check more info about what's going on.
The first step is to make a "fake" boot.img for the installer can patch the ramdisk.img. In order to do this, you will need the handy tool mkbootimg from this other XDA thread:
https://forum.xda-developers.com/showthread.php?t=2319018
Copy both kernel and ramdisk.img from the original installation and use this command (all files must be in the current directory, of course):
Code:
./mkbootimg --kernel kernel --ramdisk ramdisk.img -o boot.img
then copy the resulting boot.img to the Magisk v12.0 folder you will use to install it on your Android x86 installation. The easy way is use a flash drive connected to USB, and I will assume from now on that you have downloaded and decompressed the Magisk files to the root of your flash drive, creating a folder Magisk-v12.0 on it.
After that, if you still have su working on your installation, do the steps bellow after calling "su" (Magisk installer will remove the original su, so if you do not have it you should still be able to access root using the ALT+F1 terminal):
Code:
cd /dev
mkdir tmp
mkdir tmp/magisk
cd tmp/magisk
cp -r /storage/YOUR-FLASH-DRIVE-ID-HERE/Magisk-v12.0/* .
mv boot.img /data
sh ./META-INF/com/google/android/update-binary
YOUR-FLASH-DRIVE-ID-HERE must be replaced with your drive's unique ID. Alternatively you can copy the folder using a file manager to you internal storage (/sdcard) and then use this command instead:
Code:
cp -r /sdcard/Magisk-v12.0/* .
If everything goes well, you should see a message in the end that the new ramdisk.img is ready in the current directory, move it to somewhere else you can replace the installed one. The easiest way is moving it to a flash drive, boot on another system and replace the original one. If you can't do it, you can also move it to /data then boot in DEBUG mode and replace it on /mnt after you type "exit" once. then reboot. Also, delete boot.img from /data, it won't be necessary anymore.
This should result in a full installation of Magisk v12.0. Be aware that current modules for Magisk V14.0 won't work, so you have to dig old ones compatible with v12.0. Also, as many have asked me, probably SafetyNet won't work because it's an old version and Android x86 is a debug version anyway, you must "fake" a lot of things to pass SafetyNet test.
Attached are the modified files:
- updater-script
- magic_mask.sh
- magisk.apk (I had to use 4.3.3 for better compatibility, do not upgrade or it make break installation)
Have fun!
I do everything according to the instructions, but I can not.
Displays the following message.
I ask for help.
android-x86_64-7.1-rc2x
Code:
/dev/tmp/magisk # sh ./META-INF/com/google/android/update-binarg
unzip: can’t open [.zip]
***************************
Magisk v12.0 Boot Image Patcher
*******************************
0) /dev/tmp/magisk/common /-/
- Mounting /sistemro), /cache, /data
- Device platform: x64
chmod: /dev/tmp/magisk/chromeos: No such file or directorg
chmod: /dev/tmp/magisk/X64: No such file or directorg
- Constructing environment
cp: bad ’/dev/tmp/magisk/x64/busgbox’I No such file or directorg
cp: bad ’/dev/tmp/magisk/Xfié/magiskboot’I No such file or directorg
cp: bad ’/dev/tmp/magisk/xfié/magiskpolicg’I No such file or directorg
cp: bad ’/dev/tmp/magisk/common/init.magisk.rc’I No such file or directorg
cp: bad ’/dev/tmp/magisk/common/custom_ramdisk_patch.sh’I No such file or directorg
chmod: chmod ’sepolicy_inject’ to 120755: No such file or directorg
./METH-INF/com/google/android/update_binarg[280]: /dev/tmp/magisk/x64/busgbox: not found
./METH7INF/com/google/android/update7binarg[289]: /dev/tmp/magisk/X64/magiskpolicy: not found
- Creating /data/magisk.img
/dev/tmp/magisk/common/file_contexts_image: No such file or directorg
mount: ’/’ not in /proc/mounts
mount: ’/’ not in /proc/mounts
! Magisk image mount failed...
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Done independently. It was necessary to take the original Magisk-v12.0, in which it was necessary to replace the files from the post above and then install it.
free39 said:
I do everything according to the instructions, but I can not.
Displays the following message.
I ask for help.
android-x86_64-7.1-rc2x
Done independently. It was necessary to take the original Magisk-v12.0, in which it was necessary to replace the files from the post above and then install it.
Click to expand...
Click to collapse
I think you were successful in the end, but just to clarify: you're correct, one must first download v12.0 from the official thread then replace the files with the ones attached to OP, and only then use it. :good:
@lfom
Can you please make a video and upload to YouTube. So we can learn how to do it exactly. I did try on my pc, not work. DO wee need linux for make boot.img? Can you please explain us about more detail, if possible with video please.
@lfom
Can you give a bit more detailed guide?
Like, do we have to reboot into Android partition with debug flag enabled in the kernel, then run the magisk script?
harkaman said:
@lfom
Can you please make a video and upload to YouTube. So we can learn how to do it exactly. I did try on my pc, not work. DO wee need linux for make boot.img? Can you please explain us about more detail, if possible with video please.
Click to expand...
Click to collapse
Sorry, I cannot make a video now. It's not that simple because I cannot use a screen recorder for many steps. But it's basically what is written in the tutorial. I have used Linux, but the original thread says it should work with Cygwin., although I haven't tested, it should work are long as you have the correct files as you only need one executable (mkbootimg).
https://en.wikipedia.org/wiki/Cygwin
silv3rfox said:
@lfom
Can you give a bit more detailed guide?
Like, do we have to reboot into Android partition with debug flag enabled in the kernel, then run the magisk script?
Click to expand...
Click to collapse
No, you don't need debug mode. To run the magisk install script you need superuser rights, so the easier way it to open the console mode using ALT+F1 (you need either an external keyboard or maybe a custom keyboard that allows ALT commands, like Hacker's Keyboard).
I'll try to answer questions as soon as possible, so the information is clear enough so anyone can do it.
lfom said:
Sorry, I cannot make a video now. It's not that simple because I cannot use a screen recorder for many steps. But it's basically what is written in the tutorial. I have used Linux, but the original thread says it should work with Cygwin., although I haven't tested, it should work are long as you have the correct files as you only need one executable (mkbootimg).
https://en.wikipedia.org/wiki/Cygwin
No, you don't need debug mode. To run the magisk install script you need superuser rights, so the easier way it to open the console mode using ALT+F1 (you need either an external keyboard or maybe a custom keyboard that allows ALT commands, like Hacker's Keyboard).
I'll try to answer questions as soon as possible, so the information is clear enough so anyone can do it.
Click to expand...
Click to collapse
Would these steps work for the latest magisk 14.0?
Sent from my ONEPLUS A5000 using Tapatalk
the_mentor said:
Would these steps work for the latest magisk 14.0?
Click to expand...
Click to collapse
No, it won't. As stated in OP, v12.0 was the last version to use the magic_mask.sh. Newer versions use binaries so it's much more difficult to mod unless you change the source code and re-compile the tool.
It works :good: tried on two different pcs. Windows users can use Android Image Kitchen for creating boot.img
maxriter said:
It works :good: tried on two different pcs. Windows users can use Android Image Kitchen for creating boot.img
Click to expand...
Click to collapse
I have createed bootimg . what shell i do next? do i need to copy and go in android x86?
harkaman said:
I have createed bootimg . what shell i do next? do i need to copy and go in android x86?
Click to expand...
Click to collapse
follow steps from OP, download magisk, replace files in magisk with that from the attachment, copy magisk along with boot.img to sdcard or usb drive, boot to android-x86, run the commands from OP, as a result you will get a patched ramdisk.img, copy this ramdisk to usb drive, boot back to windows, replace the original ramdisk from android x86 with the patched one.
hi.
I have installed magisk in android x86 and new ramdisk is created. BUt where and how can i copy, since i lose root. How can I copy new ramdisk?
Code:
x86_64:/ $ su
x86_64:/ # cd /dev
x86_64:/dev # mkdir tmp
x86_64:/dev # mkdir tmp/magisk
x86_64:/dev # cd tmp/magisk
x86_64:/dev/tmp/magisk # cp -r /storage/B6B4-79A3/Magisk-v12.0/* .
x86_64:/dev/tmp/magisk # mv boot.img /data
x86_64:/dev/tmp/magisk # sh ./META-INF/com/google/android/update-binary
unzip: cannot find or open , .zip or .ZIP.
*****************************
Magisk v12.0 Boot Image Patcher
*****************************
0) /dev/tmp/magisk/common /-/
- Mounting /system(ro), /cache, /data
! System installed root detected, mount rw :(
- Device platform: x64
- Constructing environment
- Creating /data/magisk.img
Creating filesystem with parameters:
Size: 67108864
Block size: 4096
Blocks per group: 32768
Inodes per group: 4096
Inode size: 256
Journal blocks: 1024
Label:
Blocks: 16384
Block groups: 1
Reserved block group size: 7
Created filesystem with 11/4096 inodes and 1294/16384 blocks
losetup: /data/magisk.img
losetup: /data/magisk.img
losetup: /data/magisk.img
- Mounting /data/magisk.img to /magisk
- Found Boot Image: /data/boot.img
- Unpacking boot image
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Parsing boot image: [/data/boot.img]
IMG [AOSP]
KERNEL [6098096] @ 0x10008000
RAMDISK [1795598] @ 0x11000000
SECOND [0] @ 0x10f00000
DTB [0] @ 0x10000100
PAGESIZE [2048]
NAME []
CMDLINE []
COMPRESSION [gzip]
Decompressing to [ramdisk.cpio]
- Checking patch status
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
- Backing up stock boot image
15424+0 records in
15424+0 records out
7897088 bytes (7.5MB) copied, 0.067583 seconds, 111.4MB/s
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Compressing to [/data/stock_boot_1b72ffffff9317ffffffdaffffffe6ffffffe7ffffff8870ffffffc0ffffffabffffff8dffffffc4fffffff356ffffff937e7c16ffffffb0.img.gz]
- Patching ramdisk
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Extracting [init.rc] to [init.rc]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Add entry [init.rc] (0750)
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Extracting [sepolicy] to [sepolicy]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Add entry [sepolicy] (0644)
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Create directory [magisk] (0755)
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Add entry [init.magisk.rc] (0750)
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Add entry [sbin/magic_mask.sh] (0750)
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Loading cpio: [ramdisk.cpio.orig]
Entry [init.magisk.rc] is new
Entry [init.rc] missmatch
Entry [magisk] is new
Entry [sbin/magic_mask.sh] is new
Entry [sepolicy] missmatch
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
- Repacking boot image
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Parsing boot image: [/data/boot.img]
IMG [AOSP]
KERNEL [6098096] @ 0x10008000
RAMDISK [1795598] @ 0x11000000
SECOND [0] @ 0x10f00000
DTB [0] @ 0x10000100
PAGESIZE [2048]
NAME []
CMDLINE []
COMPRESSION [gzip]
Repack to boot image: [new-boot.img]
Compressing to [ramdisk.cpio.gz]
KERNEL [6098096] @ 0x10008000
RAMDISK [1851668] @ 0x11000000
SECOND [0] @ 0x10f00000
DTB [0] @ 0x10000100
PAGESIZE [2048]
NAME []
CMDLINE []
COMPRESSION [gzip]
Boot partition too small!
! Boot partition space insufficient
! Remove ramdisk backups and try again
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Loading cpio: [ramdisk.cpio]
Remove [.backup]
Remove [.backup]
Remove [.backup]
Remove [.backup]
Dump cpio: [ramdisk.cpio]
MagiskBoot (by topjohnwu) - Boot Image Modification Tool
Parsing boot image: [/data/boot.img]
IMG [AOSP]
KERNEL [6098096] @ 0x10008000
RAMDISK [1795598] @ 0x11000000
SECOND [0] @ 0x10f00000
DTB [0] @ 0x10000100
PAGESIZE [2048]
NAME []
CMDLINE []
COMPRESSION [gzip]
Repack to boot image: [new-boot.img]
Compressing to [ramdisk.cpio.gz]
KERNEL [6098096] @ 0x10008000
RAMDISK [1797690] @ 0x11000000
SECOND [0] @ 0x10f00000
DTB [0] @ 0x10000100
PAGESIZE [2048]
NAME []
CMDLINE []
COMPRESSION [gzip]
Boot partition too small!
! Boot partition size still too small...
Do not worry, it's fine...
New ramdisk.img ready - /dev/tmp/magisk/ramdisk.img
Copy it to an external drive to replace Android boot one
- Done
x86_64:/dev/tmp/magisk #
Replace installed system.img from the one in android-x86 iso, and repeat the procedure.
Copy this new ramdisk: /dev/tmp/magisk/ramdisk.img to your usb drive: /storage/B6B4-79A3/ and reboot to windows.
A standard android-x86 iso contains initrd.img, system.img/sfs and ramdisk.img + kernel (used to create the boot.img)
installed somewhere in your pc. Replace this ramdisk.img with the patched one from the usb drive.
Thanks for the guide !
I managed to get magisk v15.3 work on latest CM 14.1 x86 on my "tesco connect 7" , a z3735g atom bay-trail based tablet.
inorder to make the patched ramdisk.img I used virtualbox and ran lubuntu x32 16.04 - since I couldn't used mkbootimg on the android directly:
A. because the linked tool is for x64 systems, so x86 android can't run it.
B. because I was emulating android on virtual machine so I ran it as "live", making system as read only I think.
C. although on my x86 virtual android it doesn't work, on my virtual ubuntu x32 it does ( guess it can run x64 binaries somehow ).
once I make boot.img I moved it to android's sdcard ( on my virtual machine running the same image as my tablet ) -> installed magisk manager ( v5.5.5 -the current latest ) then I picked install -> install -> direct install -> picked my boot.img from /sdcard -> then magisk created SDcard/MagiskManager/patched_boot.img.
* in retrospect, a very similar guide can be found here.
then once I had patched_boot.img I moved it to my virtual ubuntu, and ran "unkbootimg patched_boot.img".
this gave me a "ramdisk.cpio.gz", which is actually the "ramdisk.img" needed for the android's iso ( i.e booting using grub ).
so i've rename it "ramdisk.img" and replaced the one found on the android iso root folder.
then I rebooted that modded iso ( i.e with the modded ramdisk.img ) on my virtual -> installed magisk manager -> AND IT SHOWS IT IS INSTALLED !!!!!
now I need to replace my current ramdisk.img on my tablet to actually "magisking" my tablet.
@gps3dx Thanks, your method works. Updated Magisk from 12 to 15.3!
maxriter said:
@gps3dx Thanks, your method works. Updated Magisk from 12 to 15.3!
Click to expand...
Click to collapse
nice to hear.
I suggest you check the magisk log to see if any issue like non-mounted error occurs.
Although magisk reports installed, I have issues - but I see from the magisk beta thread that i'm not the only one... so I guess it's the specific version fault and not the way I install it.
also make sure that you've got magisk files under /data/magisk that resembles (not 1:1) the magisk zip...
i.e that you've got files like "magiskinit", "magiskboot".... I think that if you don't do "direct install" these files won't appear, since I don't think that patching the boot.img alone installs these files on the device.
/data/magisk (ln to /data/adb/magisk ?) does contain those files, I can use root related functions and magisk hide works. Seems good so far.
Moreover i updated from 12 to 15.3, so there is that.
gps3dx said:
nice to hear.
I suggest you check the magisk log to see if any issue like non-mounted error occurs.
Although magisk reports installed, I have issues - but I see from the magisk beta thread that i'm not the only one... so I guess it's the specific version fault and not the way I install it.
also make sure that you've got magisk files under /data/magisk that resembles (not 1:1) the magisk zip...
i.e that you've got files like "magiskinit", "magiskboot".... I think that if you don't do "direct install" these files won't appear, since I don't think that patching the boot.img alone installs these files on the device.
Click to expand...
Click to collapse
do you know Android x86 special mount ?
mount /dev/xxxx on /mnt
mount /mnt/$SRC/system /android/system
mount /mnt/$SRC/data /android/data
https://forum.xda-developers.com/showpost.php?p=75345518&postcount=4926
P.S my android is NOT running from an img or sfs file, since i've expanded and extract the system onto my tablet's hdd ext4 partition.
Click to expand...
Click to collapse
your Android system is hdd ext4 partition /Android-x86/system folder.
so "Mounting mirrors,Magisk : mount /dev/block/mmcblk1p5->/sbin/.core/mirror/system",even though success,no use.
if you use system.sfs or system.img,"Mounting mirrors,Magisk : mount /dev/loop0(or /dev/loop1)->/sbin/.core/mirror/system",must failed,should be mount /dev/block/loop0(/dev/block/loop1)
if you understand magisk 12 magic_mask.sh
SYSTEMBLOCK=`mount | grep " /system " | awk '{print $1}' | awk '{print substr($0,6)}'`
busybox mount -o noatime /dev/block/$SYSTEMBLOCK $MIRRDIR/system
if you not use magisk dummy,you needn't magisk mirror system.
for example,this example must use mirror system.
PHP:
Replace with dummy: /system/app
New directory: /system/app/ChromeCustomizations
Replace with dummy: /system/app
New directory: /system/app/com.google.android.apps.nexuslauncher
Replace with dummy: /system/app
New directory: /system/app/com.google.android.nexusicons
New directory: /system/priv-app/Greenify
Replace with dummy: /system/priv-app
Clone skeleton: /system/priv-app/AnalyticsService
Clone skeleton: /system/priv-app/AudioFX
Clone skeleton: /system/priv-app/BackupRestoreConfirmation
…………
…………
Clone skeleton: /system/app/AndroidTerm
Clone skeleton: /system/app/BasicDreams
Clone skeleton: /system/app/Bluetooth
…………
Does this work with ubuntu? I'm opening the terminal in the folder where every file is but after entering the first command it says file or directory not found. Also i'm running it from a live usb.
youling257 said:
do you know Android x86 special mount ?
mount /dev/xxxx on /mnt
mount /mnt/$SRC/system /android/system
mount /mnt/$SRC/data /android/data
https://forum.xda-developers.com/showpost.php?p=75345518&postcount=4926
your Android system is hdd ext4 partition /Android-x86/system folder.
so "Mounting mirrors,Magisk : mount /dev/block/mmcblk1p5->/sbin/.core/mirror/system",even though success,no use.
if you use system.sfs or system.img,"Mounting mirrors,Magisk : mount /dev/loop0(or /dev/loop1)->/sbin/.core/mirror/system",must failed,should be mount /dev/block/loop0(/dev/block/loop1)
if you understand magisk 12 magic_mask.sh
SYSTEMBLOCK=`mount | grep " /system " | awk '{print $1}' | awk '{print substr($0,6)}'`
busybox mount -o noatime /dev/block/$SYSTEMBLOCK $MIRRDIR/system
if you not use magisk dummy,you needn't magisk mirror system.
for example,this example must use mirror system.
PHP:
Replace with dummy: /system/app
New directory: /system/app/ChromeCustomizations
Replace with dummy: /system/app
New directory: /system/app/com.google.android.apps.nexuslauncher
Replace with dummy: /system/app
New directory: /system/app/com.google.android.nexusicons
New directory: /system/priv-app/Greenify
Replace with dummy: /system/priv-app
Clone skeleton: /system/priv-app/AnalyticsService
Clone skeleton: /system/priv-app/AudioFX
Clone skeleton: /system/priv-app/BackupRestoreConfirmation
…………
…………
Clone skeleton: /system/app/AndroidTerm
Clone skeleton: /system/app/BasicDreams
Clone skeleton: /system/app/Bluetooth
…………
Click to expand...
Click to collapse
I don't understand what do you think I need to do inorder to make it work ?
Also, you're wrong... my "system" folder sits at the root of my android partition...
so it's /dev/mmcblk1p5 partition... which after I mount it... I have "System", "data" and kernel, ramdisk.img & initrd.img files AT THE ROOT of that partition....
Gionikva said:
Does this work with ubuntu? I'm opening the terminal in the folder where every file is but after entering the first command it says file or directory not found. Also i'm running it from a live usb.
Click to expand...
Click to collapse
try ubuntu x64...
I use 'ubuntu-16.04.3-desktop-amd64.iso'
How to install TWRP via script
The recovery image TWRP is very useful for the maintenance of the Android OS. You can either boot the phone from the TWRP image without installing it using these commands:
Bash:
adb reboot bootloader
sudo fastboot boot ./twrp-3.7.0_12-0-I006D.img
or install the TWRP image into the boot partition and use the command
Bash:
adb reboot recovery
or
Bash:
sudo fastboot boot recovery
to boot into TWRP. Depending on the OS used there is also an option in the reboot dialog in the GUI to reboot into the recovery.
While the phone is booted from TWRP you can open a shell as user root via adb.
The only official method to install TWRP into the boot partition of the phone is via the TWRP GUI, e.g.:
boot the phone from the TWRP image (see above)
install TWRP into the boot partition using the menu entry "Advanced" and then "Flash Current TWRP". TWRP will then install itself into both boot partitions.
There is no method to install TWRP without user interaction via a script (at least I did not found any ...). Therefor I wrote a shell script to install TWRP without user input:
install_twrp_from_within_twrp.sh
The script install_twrp_from_within_twrp.sh can be used to install TWRP either into a boot partition or into an image file for the boot partition. The script must be executed in a shell on the phone while the phone is booted from the TWRP image that should be installed.
The usage of the script is:
Code:
ASUS_I006D:/data/local/tmp $ ./install_twrp_from_within_twrp.sh -h
install_twrp_from_within_twrp.sh - script to install TWRP into a boot partition or into a file
Usage:
install_twrp_from_within_twrp.sh [-f] [boot_image_file] [new_boot_image_file]
boot_image can be either an image file from the boot partition or a boot partition block device
(e.g. /dev/block/by-name/boot_a)
new_boot_partition_file must be the absolute name of a file.
Both parameter are optional
If the script is called without a parameter TWRP will be installed in the current boot partition.
If boot_image_file is a block device and new_boot_image_file is missing TWRP will be installed in the block device.
If the parameter new_boot_image_file is used the script will only write a boot partition image with TWRP into that file.
Use the parameter -f to ignore missing or invalid checksums.
This script must run in a shell in TWRP
Environment variables used by the script if set:
BIN_DIR (Current value: "/system/bin")
TMPDIR (Current value: "/data/local/tmp")
|ASUS_I006D:/data/local/tmp $
The commands used in the script install_twrp_from_within_twrp.sh to install TWRP are copied from the TWRP source file with the code to install TWRP:
https://github.com/TeamWin/android_bootable_recovery/blob/android-12.1/twrpRepacker.cpp
Note that TWRP contains a copy of the binary magiskboot to unpack and repack the boot partition. Therefor the installation should work on all phones that are supported by Magisk.
Be aware that the installation of TWRP will wipe out the installation of Magisk (or any other tool for enabling root access). So for installing TWRP and Magisk they must be installed in this order:
install TWRP
install Magisk (or a similar tool)
Example usage:
Code:
ASUS_I006D:/ # /cache/install_twrp_from_within_twrp.sh /dev/block/by-name/boot_b
Installing TWRP into a boot image or boot partition via script
Checking the running OS ...
OK, running a shell in TWRP: "twrp_I006D" version "3.7.0_12-0"
Checking the prerequisites for installing TWRP ...
Using the partition "/dev/block/by-name/boot_b" as source for the installation of TWRP
Creating the new boot image with TWRP in the file "/data/local/tmp/img.568/new-boot.img"
Checking if the required executables exist ...
OK, the file "/system/bin/magiskboot" exists and is executable
OK, the file "/system/bin/cpio" exists and is executable
OK, the file "/system/bin/sha256sum" exists and is executable
OK, the file "/system/bin/getprop" exists and is executable
OK, the file "/system/bin/dd" exists and is executable
Checking if the requried data files exist ...
OK, the file "/ramdisk-files.sha256sum" exists
OK, the file "/ramdisk-files.txt" exists
OK, the file "/dev/block/by-name/boot_b" exists
Checking the check sums of the files for the new ramdisk ...
OK, the check sums of the files for the new ramdisk are okay
Directory "/data/local/tmp" successfully created
Directory "/data/local/tmp/img.568" successfully created
Directory "/data/local/tmp/img_files.568" successfully created
The temporary directory to unpack the boot image is "/data/local/tmp/img_files.568"
Unpacking the boot image from "/dev/block/by-name/boot_b" ...
Parsing boot image: [/dev/block/by-name/boot_b]
HEADER_VER [3]
KERNEL_SZ [42027520]
RAMDISK_SZ [34080747]
OS_VERSION [12.0.0]
OS_PATCH_LEVEL [2022-05]
PAGESIZE [4096]
CMDLINE []
KERNEL_FMT [raw]
RAMDISK_FMT [gzip]
VBMETA
OK, "/dev/block/by-name/boot_b" successfully unpacked to "/data/local/tmp/img_files.568" :
Creating a backup of the original ramdisk ...
total 74412
-rw-rw-rw- 1 root root 50 2022-10-24 19:35 header
-rw-r--r-- 1 root root 42027520 2022-10-24 19:35 kernel
-rw-r--r-- 1 root root 34080747 2022-10-24 19:35 ramdisk.cpio.org
Creating the new ramdisk with TWRP ...
New ramdisk with TWRP "/data/local/tmp/img_files.568/ramdisk.cpio" successfully created.
-rw-rw-rw- 1 root root 85852380 2022-10-24 19:35 /data/local/tmp/img_files.568/ramdisk.cpio
-rw-r--r-- 1 root root 34080747 2022-10-24 19:35 /data/local/tmp/img_files.568/ramdisk.cpio.org
Repacking the boot image into the file "/data/local/tmp/img.568/new-boot.img" ...
+ cd /data/local/tmp/img_files.568
+ /system/bin/magiskboot repack /dev/block/by-name/boot_b /data/local/tmp/img.568/new-boot.img
Parsing boot image: [/dev/block/by-name/boot_b]
HEADER_VER [3]
KERNEL_SZ [42027520]
RAMDISK_SZ [34080747]
OS_VERSION [12.0.0]
OS_PATCH_LEVEL [2022-05]
PAGESIZE [4096]
CMDLINE []
KERNEL_FMT [raw]
RAMDISK_FMT [gzip]
VBMETA
Repack to boot image: [/data/local/tmp/img.568/new-boot.img]
HEADER_VER [3]
KERNEL_SZ [42027520]
RAMDISK_SZ [34080769]
OS_VERSION [12.0.0]
OS_PATCH_LEVEL [2022-05]
PAGESIZE [4096]
CMDLINE []
+ TEMPRC=0
+ set +x
OK, the new boot image "/data/local/tmp/img.568/new-boot.img" successfully created
-rw-r--r-- 1 root root 100663296 2022-10-24 19:35 /data/local/tmp/img.568/new-boot.img
Now rewriting "/dev/block/by-name/boot_b" using "/data/local/tmp/img.568/new-boot.img" ...
196608+0 records in
196608+0 records out
100663296 bytes (96 M) copied, 4.498630 s, 21 M/s
TWRP successfully installed in "/dev/block/by-name/boot_b"
ASUS_I006D:/ #
To install TWRP using the script without user input these steps are neccessary:
reboot the phone into the bootloader
boot the phone from the TWRP image that should be installed on the phone
copy the script install_twrp_from_within_twrp.sh to the phone
execute the script install_twrp_from_within_twrp.sh on the phone in an adb shell
To automate these steps I wrote a wrapper script :
install_twrp.sh
The wrapper script install_twrp.sh must be executed on a machine running Linux with the phone attached via USB.
The wrapper script will check the current status of the phone, boot the phone from the TWRP image, copy the script install_twrp_from_within_twrp.sh to the phone and execute it on the phone to install TWRP into either the active or the inactive boot partition.
The script install_twrp_from_within_twrp.sh must be in the same directory as install_twrp.sh (if not set the variable TWRP_INSTALL_SCRIPT before executing the script -- see the script usage below).
The usage for the script install_twrp.sh is:
Code:
[[email protected] /data/develop/android/scripts_on_linux]$ ./install_twrp.sh -h
./install_twrp.sh version - 1.0.0.0 - install TWRP to the boot partition of a phone running Android using TWRP
Usage
install_twrp_via_twrp.sh [boot_slot] [wait=n] [dd|fastboot] [twrp_image]
All parameter are optional
The parameter "boot_slot" can be a, b, active, inactive, next, current; default is the current boot slot of the phone
Use the parameter "dd" to request repatching via dd in an adb session ; use the parameter "fastboot" to request repatching via "fastboot"
Default is to use "dd" to flash the patched boot image
The value for the parameter "wait" is the number of seconds to wait before starting the script "install_twrp_from_within_twrp.sh" on the phone
This seems to be necessary to avoid errors while repacking the boot image. The default wait time is 10 seconds.
The parameter "twrp_image" can be used to define another TWRP image to use. The parameter is optional - the
default for "twrp_image" is hardcoded in the script (variable TWRP_IMAGE)
The default TWRP image of the script is the TWRP for the ASUS Zenfone 8.
The phone to patch must be attached via USB.
The phone can be either in fastboot mode, in normal mode with enabled adb support, or already booted from the TWRP image
The script uses the script "install_twrp_from_within_twrp.sh" to install TWRP. The script install_twrp_from_within_twrp.sh must
be in the same directory as this script. The script will be copied to the phone and then executed on the phone.
Set the variable TWRP_INSTALL_SCRIPT to the name of the script to use before starting this script if another script should be used .
To change some of the values used by the script you can set environment variables before starting the script:
Set the environment variable REBOOT to "yes" before starting the script to automatically reboot the phone after patching the new image
Set the environment variable REBOOT to "no" before starting the script to disable the automatic reboot after patching the new image.
Set the environment variable SERIAL_NUMBER to the serial number of the phone to patch if there is more then one phone connected via USB
Set the environment variable ADB_OPTIONS to the options to be used with the adb command
Set the environment variable FASTBOOT_OPTIONS to the options to be used with the fastboot command
Set the environment variable TMP_DIR_ON_THE_PHONE to the temporary directory to use on the phone
The default TWRP image to use is "/data/backup/ASUS_ZENFONE8/twrp/twrp-3.7.0_12-0-I006D.img"
The default script executed on the phone to install TWRP is "./install_twrp_from_within_twrp.sh"
[[email protected] /data/develop/android/scripts_on_linux]$
Without any parameter the script install_twrp.sh will install TWRP into the active boot partition.
Example:
Code:
[[email protected] /data/develop/android/scripts_on_linux]$ ./install_twrp.sh
./install_twrp.sh version - 1.0.0.0 - install TWRP to the boot partition of a phone running Android using TWRP
Using the TWRP image hardcoded in the script: "/data/backup/ASUS_ZENFONE8/twrp/twrp-3.7.0_12-0-I006D.img"
Checking the script prerequisites ...
Will wait 10 second(s) before starting the script on the phone
The script is running as user "xtrnaw7" -- will use "sudo" for the fastboot commands ...
Will patch the boot partition on the attached phone with the serial number "M6AIB760D0939LX"
Using the options "-d -s M6AIB760D0939LX " for the adb commands
Using the options " -s M6AIB760D0939LX " for the fastboot commands
Checking for a connected phone booted into fastboot mode ...
No attached phone in fastboot mode found
Checking for an attached phone with working access via adb (USB) ...
Linux localhost 5.4.147-Omni-qgki-perf-gea6f815f5af9-dirty #46 SMP PREEMPT Sat Oct 15 08:38:07 CEST 2022 aarch64
... found a phone connected via USB with working adb access
The phone is booted in normal mode
Booting the phone into the fastboot mode now ...
Waiting up to 60 seconds for the boot into the fastboot mode ...
Booting the phone from the TWRP image "/data/backup/ASUS_ZENFONE8/twrp/twrp-3.7.0_12-0-I006D.img" now ...
Sending 'boot.img' (98304 KB) OKAY [ 2.500s]
Booting OKAY [ 10.440s]
Finished. Total time: 12.983s
Waiting up to 60 seconds for the boot of the phone ....
Retrieving the current boot slot from the phone ...
The current boot slot is "_a"
The boot slot to patch is "_a"
The boot partition to patch is "boot_a"
Checking if the directory "/data/local/tmp" exists on the phone ....
/data/local/tmp
Copying the script "./install_twrp_from_within_twrp.sh" to the phone ...
./install_twrp_from_within_twrp.sh: 1 file pushed, 0 skipped. 216.6 MB/s (13141 bytes in 0.000s)
Creating the boot image file "/data/local/tmp/boot_a.327964.img" from the partition "/dev/block/by-name/boot_a" ...
196608+0 records in
196608+0 records out
100663296 bytes (96 M) copied, 0.311720 s, 308 M/s
Checking the result ...
-rw-rw-rw- 1 root root 100663296 2022-10-24 18:02 /data/local/tmp/boot_a.327964.img
The check sums are:
The check sum of the boot partition "/dev/block/by-name/boot_a" on the phohe is "728455636"
The check sum of the boot image file on the phone is "/data/local/tmp/boot_a.327964.img" is "728455636"
Installing TWRP using the boot image file "/data/local/tmp/boot_a.327964.img" ...
----------------------------------------------------------------------
[2022.10.24 20:02:43] Waiting now 10 seconds ...
+ adb -d -s M6AIB760D0939LX shell /data/local/tmp/install_twrp_from_within_twrp.sh /data/local/tmp/boot_a.327964.img /data/local/tmp/boot_a_witn_twrp.327964.img
Installing TWRP into a boot image or boot partition via script
Checking the running OS ...
OK, running a shell in TWRP: "twrp_I006D" version "3.7.0_12-0"
Checking the prerequisites for installing TWRP ...
Using the file "/data/local/tmp/boot_a.327964.img" as source for the installation of TWRP
Creating the boot image with TWRP in the file "/data/local/tmp/boot_a_witn_twrp.327964.img"
Checking if the required executables exist ...
OK, the file "/system/bin/magiskboot" exists and is executable
OK, the file "/system/bin/cpio" exists and is executable
OK, the file "/system/bin/sha256sum" exists and is executable
OK, the file "/system/bin/getprop" exists and is executable
Checking if the requried data files exist ...
OK, the file "/ramdisk-files.sha256sum" exists
OK, the file "/ramdisk-files.txt" exists
OK, the file "/data/local/tmp/boot_a.327964.img" exists
Checking the check sums of the files for the new ramdisk ...
OK, the check sums of the files for the new ramdisk are okay
Directory "/data/local/tmp" successfully created
Directory "/data/local/tmp/img.583" successfully created
Directory "/data/local/tmp/img_files.583" successfully created
The temporary directory to unpack the boot image is "/data/local/tmp/img_files.583"
Unpacking the boot image from "/data/local/tmp/boot_a.327964.img" ...
Parsing boot image: [/data/local/tmp/boot_a.327964.img]
HEADER_VER [3]
KERNEL_SZ [42025472]
RAMDISK_SZ [34080743]
OS_VERSION [12.0.0]
OS_PATCH_LEVEL [2022-05]
PAGESIZE [4096]
CMDLINE []
KERNEL_FMT [raw]
RAMDISK_FMT [gzip]
VBMETA
OK, "/data/local/tmp/boot_a.327964.img" successfully unpacked to "/data/local/tmp/img_files.583" :
Creating a backup of the original ramdisk ...
total 74412
-rw-rw-rw- 1 root root 50 2022-10-24 18:02 header
-rw-r--r-- 1 root root 42025472 2022-10-24 18:02 kernel
-rw-r--r-- 1 root root 34080743 2022-10-24 18:02 ramdisk.cpio.org
Creating the new ramdisk with TWRP ...
New ramdisk with TWRP "/data/local/tmp/img_files.583/ramdisk.cpio" successfully created.
-rw-rw-rw- 1 root root 85852380 2022-10-24 18:02 /data/local/tmp/img_files.583/ramdisk.cpio
-rw-r--r-- 1 root root 34080743 2022-10-24 18:02 /data/local/tmp/img_files.583/ramdisk.cpio.org
Repacking the boot image into the file "/data/local/tmp/boot_a_witn_twrp.327964.img" ...
+ cd /data/local/tmp/img_files.583
+ /system/bin/magiskboot repack /data/local/tmp/boot_a.327964.img /data/local/tmp/boot_a_witn_twrp.327964.img
Parsing boot image: [/data/local/tmp/boot_a.327964.img]
HEADER_VER [3]
KERNEL_SZ [42025472]
RAMDISK_SZ [34080743]
OS_VERSION [12.0.0]
OS_PATCH_LEVEL [2022-05]
PAGESIZE [4096]
CMDLINE []
KERNEL_FMT [raw]
RAMDISK_FMT [gzip]
VBMETA
Repack to boot image: [/data/local/tmp/boot_a_witn_twrp.327964.img]
HEADER_VER [3]
KERNEL_SZ [42025472]
RAMDISK_SZ [34080758]
OS_VERSION [12.0.0]
OS_PATCH_LEVEL [2022-05]
PAGESIZE [4096]
CMDLINE []
+ TEMPRC=0
+ set +x
OK, the new boot image "/data/local/tmp/boot_a_witn_twrp.327964.img" successfully created
-rw-r--r-- 1 root root 100663296 2022-10-24 18:03 /data/local/tmp/boot_a_witn_twrp.327964.img
Note: Flashing the new image to the boot partition was not requested
+ set +x
----------------------------------------------------------------------
Checking the result ...
The patched boot image is "/data/local/tmp/boot_a_witn_twrp.327964.img"
-rw-r--r-- 1 root root 100663296 2022-10-24 18:03 /data/local/tmp/boot_a_witn_twrp.327964.img
[2022.10.24 20:03:05] Waiting now 5 seconds ...
Patching the partition "/dev/block/by-name/boot_a" from the patched boot image file "/data/local/tmp/boot_a_witn_twrp.327964.img" via dd ...
196608+0 records in
196608+0 records out
100663296 bytes (96 M) copied, 4.865411 s, 20 M/s
Checking the result ....
The check sums for the images and devices on the phone are:
Checksum Size File/Device name
-------------------------------------
728455636 100663296 /data/local/tmp/boot_a.327964.img
2360878166 100663296 /data/local/tmp/boot_a_witn_twrp.327964.img
2360878166 100663296 /dev/block/by-name/boot_a
OK, patching the boot partition "/dev/block/by-name/boot_a" was successfull
*** Press return to reboot the phone now
Rebooting the phone now ...
[[email protected] /data/develop/android/scripts_on_linux]$
Advanced Usage
To install TWRP and Magisk via script these commands can be used (for example after an OS upgrade) :
Bash:
# install the Magisk App (if not already done ...)
#
cat Magisk-25.1_25100.apk | adb shell pm install -S "$( ls -l Magisk-25.1_25100.apk | awk '{ print $5}' )"
# install TWRP and Magisk into the boot partition
#
REBOOT=no ./install_twrp.sh ; REBOOT=yes ./install_magisk_via_twrp.sh
To install a new OS image including TWRP and Magisk these commands can be used:
Bash:
# boot the phone into the boot loader
#
adb reboot bootloader
# boot the phone from the TWRP image
#
sudo fastboot boot /data/backup/ASUS_ZENFONE8/twrp/twrp-3.7.0_12-0-I006D.img
# copy the OS image to install to the phone
#
adb push /data/develop/android/OmniROM/out/target/product/zenfone8/omni-12-20221015-zenfone8-MICROG.zip /sdcard/Download/
# install the OS image
#
adb shell twrp install /sdcard/Download/omni-12-20221015-zenfone8-MICROG.zip
# reboot into the new OS
#
adb shell twrp reboot
# install the Magisk app
#
cat Magisk-v25.2.apk | adb shell pm install -S "$( ls -l Magisk-v25.2.apk | awk '{ print $5}' )"
# install TWRP and Magisk
#
REBOOT=no ./install_twrp.sh ; REBOOT=yes ./install_magisk_via_twrp.sh
The documentation for the script install_magisk_via_twrp.sh can be found here:
How to install Magisk into the boot partition using a script.
Details
The script install_twrp_from_within_twrp.sh was tested on an ASUS Zenfone 8 with
OmniROM 12 (Android 12) and TWRP 3.7.0.12
OmniROM 12 (Android 12) and TWRP 3.6.1.12
Original Android 12 from ASUS and TWRP 3.7.0.12
OmniROM 13 (Android 13) and TWRP 3.7.0.12 (see note below)
Important Update 04.12.2022 /bs
In TWRP installed in the boot partition of an ASUS Zenfone 8 running early versions of OmniROM 13 the touch screen does not work. You can only use TWRP in an adb session in this configuration.
This bug was fixed in OmniROM 13 from 04.12.2022.
To get around this bug boot the phone from the image file with TWRP, e.g.:
Bash:
sudo fastboot boot twrp-3.7.0_12-0-I006D.img
or, better, update OmniROM 13 to the image from 04.12.2022 or later.
The script install_twrp_from_within_twrp.sh does not create a backup of the boot partition before rewriting it.
The script install_twrp_from_within_twrp.sh creates temporary files in the directory ${TMPDIR} on the phone; the default value for this variable in the script is
Bash:
TMPDIR="${TMPDIR:=/cache/install_twrp.$$}"
The default value for the variable in the tested TWRP versions is /data/local/tmp so without changes the temporary files will be created in that directory.
The script does not delete the temporary files so a manual cleanup of the directory might be necessary .
Trouble Shooting
For unknown reasons repacking the boot image fails sometimes and the script ends with an error message like this:
Code:
ERROR: The size of the new boot image file is 56713216 but the size of the original image file is 100663296 -- that does not match (RC=33)
To avoid this error increase the wait time using the script parameter "wait=n" (the default wait time is 10 seconds).
If increasing the wait time does not help just restart the wrapper script install_twrp.sh again while the phone is still booted from the TWRP image. So a workaround for this problem is :
Bash:
install_twrp.sh ; [ $? = 33 ] && install_twrp.sh
The following error message appears when executing the script install_twrp_from_within_twrp.sh after booting the already installed TWRP:
Code:
ERROR: Error checking the check sums of the files for the new ramdisk
./system/etc/fstab.postinstall: FAILED
Installing TWRP via script only works if the phone is booted from the TWRP image.
To ignore this error the parameter -f can be used - but this is NOT recommended.
Notes:
see here on How to install Magisk into the boot partition via script
[added 29.10.2022/bs]
see here for How to add additional files to the TWRP image
This HowTo contains some hints for using TWRP in general and some tips for using CLI commands in TWRP.
I will update this post in case I find something new & useful regarding TWRP and update the history section at the end of this post.
The test environment for the instructions below was
TWRP 3.6.2.12 for the ASUS Zenfone 8
TWRP 3.7.0_12-0 for the ASUS Zenfone 8
Note:
This is NOT a general HowTo for TWRP.
How to test a TWRP image?
It's recommended to boot from the TWRP image file before installing it into the boot or recovery partition of your phone. To do this do
Bash:
# connect the phone via USB to your PC
# boot the phone into the bootloader - e.g. via
#
adb reboot bootloader
# boot the phone from the TWRP image (this will not change anything on the phone)
#
sudo fastboot boot <twrpimage_file>
If everything works you can install the TWRP image into the boot or recovery partition using the approbiate menu entry in TWRP.
How to connect via adb to an TWRP session?
TWRP supports adb session as user root, therefor an
Bash:
adb shell
on your PC is sufficient to open an adb shell as user root on the phone booted into TWRP.
In case you get a permission denied error kill the running adb daemon on the PC and restart the adb command. If that does not fix the error disconnect and reconnect the USB cable between the PC and the Phone.
Be aware that TWRP starts the adb daemon twice after booting. Therefor an adb session to the phone started to early after the boot into TWRP might be killed. In this case just open a new adb shell.
How to check if the phone is booted into TWRP ?
Check the value of the property ro.twrp.boot; this property is only set if TWRP is running
e.g:
Code:
ASUS_I006D:/ # getprop ro.twrp.boot
1
ASUS_I006D:/ #
How to check if the running TWRP was booted from an TWRP image or from a boot or recovery partition?
Check the value of the property ro.bootmode; the value of this property is "unknown" if TWRP was booted from an image file via "fastboot boot <twrp_image_file>", e.g.
Code:
ASUS_I006D:/ # getprop ro.bootmode
unknown
ASUS_I006D:/ #
-> TWRP was booted from an TWRP image file
Code:
ASUS_I006D:/ # getprop ro.bootmode
recovery
ASUS_I006D:/ #
-> TWRP was booted from the boot or recovery partition
How to get the version of the running TWRP?
Check the value of the property getprop ro.twrp.version, e.g.:
Code:
ASUS_I006D:/ # getprop ro.twrp.version
3.7.0_12-0
ASUS_I006D:/ #
Where is the log file from TWRP?
The logfile with the messages written while booting TWRP is /data/recovery/log.gz.
e.g.
Code:
130|ASUS_I006D:/ # ls -ltr /data/recovery/l*gz
-rw------- 1 system system 8022 2022-12-26 14:03 /data/recovery/log.gz
ASUS_I006D:/ #
ASUS_I006D:/ # gzip -cd /data/recovery/log.gz | head -10
Starting TWRP 3.7.0_12-0-d07fdb3c on Sat Jan 10 00:53:15 1970
(pid 403)
I:Lun file '/config/usb_gadget/g1/functions/mass_storage.0/lun.0/file'
PRODUCT_USE_DYNAMIC_PARTITIONS := true
TW_INCLUDE_CRYPTO := true
I:TW_BRIGHTNESS_PATH := /proc/lcd_brightness
I:Found brightness file at '/proc/lcd_brightness'
I:TWFunc::Set_Brightness: Setting brightness control to 420
I:TW_EXCLUDE_ENCRYPTED_BACKUPS := true
I:LANG: en
ASUS_I006D:/ #
The current logfile of the running TWRP is /tmp/recovery.log, e.g.:
Code:
ASUS_I006D:/ # ls -l /tmp/recovery.log
-rw-rw-rw- 1 root root 43303 2023-05-19 20:11 /tmp/recovery.log
ASUS_I006D:/ #
Where are the settings from TWRP stored?
The settings from TWRP are stored in the file
/data/media/0/TWRP/.twrps
This is a binary file.
Note that on phones with active encryption that file is only accessible after /data is decrypted.
How to edit a file while booted into TWRP?
The editor nano is part of TWRP and can be used to edit files in an adb session.
How to mount a partition while inside TWRP?
Use
twrp mount <mountpoint>
to mount a partition while TWRP is running.
Note that you should use this command with caution in adb sessions because the adb session may be killed after the mount
How to decrypt an encrypted /data partition
Use
twrp decrypt <password>
to decrypt an encrypted /data partition, e.g.
Code:
ASUS_I006D:/ # ls /data/media/0
+lnodCAAAAAnYFLObBoWS5ZNb5yVMpze 8KdHMCAAAAQOgtDHq,XdSfFPW+XURA2M KlfTJCAAAAwL93jkH2ugnU4eUG3Zzm7M W9W9SCAAAAgh6lwoP0mNiEK9VIWJoH6L
0nUvhAAAAAQ9ptz+L5qPQrpzcAt4G06K DWk4KDAAAAA,B1xVDmT3dZI87g2C0IS8 M6jcmCAAAAAU,4gn9o0zoBZmkysyXy49 bE7t0CAAAAQ2YuHL9styNaf,iSf2cCO,
4nFjMBAAAAwv2oUczXEpKUDfRIOi+nR5 EcHrdAAAAAglBtbhNWl0NvyX8aW+3CHN O5ZVrDAAAAAlKd7PPpo7CaQmkFbZzKRm haPcnBAAAAw9o2lLF97zpPTaC+byP92s
5yL8gCAAAAgekBDBUi4,W78rJAkgFcMF FA1aZAAAAAg2XNF+M859lpPY,3rUC2cY Vda+LCAAAAwR+g6Tav35+h,Epc8latGR mSKc8BAAAAwm+12sMClHPf+zwtHAeW+Q
8CsF+DAAAAwI3tImfOqIS9aHCQ3S7Cdg JpuFgAAAAAwdEzuQerx4681dzGLjlK3X VvEV4DAAAAgRgoqCfrypNqryZxRACnfr rMJEjAAAAAgwTgx,vA5ewWMVizc2LAos
ASUS_I006D:/ #
ASUS_I006D:/ # twrp decrypt 12345
Attempting to decrypt data partition or user data via command line.
Attempting to decrypt FBE for user 0...
User 0 Decrypted Successfully
Data successfully decrypted
Updating partition details...
...done
ASUS_I006D:/ #
ASUS_I006D:/ # ls /data/media/0
Alarms Android Audiobooks DCIM Documents Download Movies Music Notifications Pictures Podcasts Recordings Ringtones TWRP
ASUS_I006D:/ #
see the TWRP Commandline Guide for the known parameter for this command
Note that existing adb sessions will be stopped after sucessfully executing this command.
How to check if the data partition is encrypted from within a booted TWRP
To check if the data partition is encrypted in a script executed in a running TWRP use code like this:
Spoiler: # check if the data partition is encrypted
Bash:
PASSWORD="1234"
CRYPTO_READY=$( getprop crypto.ready )
TWRP_DECRYPT_DONE=$( getprop twrp.decrypt.done )
if [ "${TWRP_DECRYPT_DONE}"x = "true"x ] ; then
echo "The data partition is not encrypted or already decrypted"
elif [ "${CRYPTO_READY}"x = "1"x ] ; then
echo "The data partition is encrypted"
# sample commands to decrypt the data partition
#
# echo "Decryptiong the data partition now ..."
# twrp decrypt "${PASSWORD}"
elif [ "${CRYPTO_READY}"x = "0"x ] ; then
echo "The data partition is not encrypted"
else
echo "ERROR: The value of the property crypto.ready \"${CRYPTO_READY}\" is not known"
fi
How to install a ZIP file via cli command from within a running TWRP?
Copy the zip file to the phone via adb push and then use
twrp install /path/to/update.zip
to install a ZIP file from within TWRP
Note that the parameter must be a fully qualified filename.
Using this method to update the OS only works in a terminal session on the phone; it does not work in a adb session (at least in my tests until now ...)
What commands are available in TWRP?
Most of the Unix commands are available in TWRP
Be aware that a lot of Unix commands in TWRP are implemented using a general binary called toybox (toybox is something like busybox) and do not support all parameter like the original Linux commands
Code:
ASUS_I006D:/ # ls -l /bin/ | wc -l
261
ASUS_I006D:/ # ls -l /bin/ | grep toybox | wc -l
175
ASUS_I006D:/ #
What other TRWP specific commands can be used while in a running TWRP?
Spoiler: The twrp command
Code:
ASUS_I006D:/ # twrp
TWRP openrecoveryscript command line tool, TWRP version 3.7.0_12-0
Allows command line usage of TWRP via openrecoveryscript commands.
Some common commands include:
install /path/to/update.zip
backup <SDCRBAEM> [backupname]
restore <SDCRBAEM> [backupname]
wipe <partition name>
format data
sideload
set <variable> [value]
decrypt <password> [USER ID]
remountrw
fixperms
mount <path>
unmount <path>
listmounts
print <value>
mkdir <directory>
reboot [recovery|poweroff|bootloader|download|edl]
See more documentation at https://twrp.me/faq/openrecoveryscript.html
ASUS_I006D:/ #
See more documentation at https://twrp.me/faq/openrecoveryscript.html
https://twrp.me/faq/openrecoveryscript.html
and a few others like bootctl (see below) or magiskboot (see below).
How to change the active slot for the next reboot while in TWRP?
Use bootctl, e.g.
Code:
ASUS_I006D:/ # bootctl get-current-slot
1
ASUS_I006D:/ # bootctl set-active-boot-slot 0
The usage for the command bootctl is
Spoiler: bootctl usage
Code:
ASUS_I006D:/ # /bin/bootctl
/bin/bootctl - command-line wrapper for the boot HAL.
Usage:
/bin/bootctl COMMAND
Commands:
hal-info - Show info about boot_control HAL used.
get-number-slots - Prints number of slots.
get-current-slot - Prints currently running SLOT.
mark-boot-successful - Mark current slot as GOOD.
get-active-boot-slot - Prints the SLOT to load on next boot.
set-active-boot-slot SLOT - On next boot, load and execute SLOT.
set-slot-as-unbootable SLOT - Mark SLOT as invalid.
is-slot-bootable SLOT - Returns 0 only if SLOT is bootable.
is-slot-marked-successful SLOT - Returns 0 only if SLOT is marked GOOD.
get-suffix SLOT - Prints suffix for SLOT.
set-snapshot-merge-status STAT - Sets whether a snapshot-merge of any dynamic
partition is in progress. Valid STAT values
are: none, unknown, snapshotted, merging,
or cancelled.
get-snapshot-merge-status - Prints the current snapshot-merge status.
SLOT parameter is the zero-based slot-number.
ASUS_I006D:/ #
see also How to switch the active slot
How to use Magisk binaries while booted into TWRP
Magisk is another great tool for Android phones -- for details about Magisk see here:
https://github.com/topjohnwu/Magisk
The Magisk binary for manipulating the boot partition, magiskboot, is already part of TWRP. This binary can be used to unpack and repack boot partition (or boot partition images), ramdisks, or compress/decompress files. The binary works without problems while booted into TWRP.
Spoiler: magiskboot usage
Code:
1|ASUS_I006D:/ # magiskboot
MagiskBoot - Boot Image Modification Tool
Usage: magiskboot <action> [args...]
Supported actions:
unpack [-n] [-h] <bootimg>
Unpack <bootimg> to, if available, kernel, kernel_dtb, ramdisk.cpio,
second, dtb, extra, and recovery_dtbo into current directory.
If '-n' is provided, it will not attempt to decompress kernel or
ramdisk.cpio from their original formats.
If '-h' is provided, it will dump header info to 'header',
which will be parsed when repacking.
Return values:
0:valid 1:error 2:chromeos
repack [-n] <origbootimg> [outbootimg]
Repack boot image components from current directory
to [outbootimg], or new-boot.img if not specified.
If '-n' is provided, it will not attempt to recompress ramdisk.cpio,
otherwise it will compress ramdisk.cpio and kernel with the same format
as in <origbootimg> if the file provided is not already compressed.
If env variable PATCHVBMETAFLAG is set to true, all disable flags will
be set in the vbmeta header.
hexpatch <file> <hexpattern1> <hexpattern2>
Search <hexpattern1> in <file>, and replace with <hexpattern2>
cpio <incpio> [commands...]
Do cpio commands to <incpio> (modifications are done in-place)
Each command is a single argument, add quotes for each command
Supported commands:
exists ENTRY
Return 0 if ENTRY exists, else return 1
rm [-r] ENTRY
Remove ENTRY, specify [-r] to remove recursively
mkdir MODE ENTRY
Create directory ENTRY in permissions MODE
ln TARGET ENTRY
Create a symlink to TARGET with the name ENTRY
mv SOURCE DEST
Move SOURCE to DEST
add MODE ENTRY INFILE
Add INFILE as ENTRY in permissions MODE; replaces ENTRY if exists
extract [ENTRY OUT]
Extract ENTRY to OUT, or extract all entries to current directory
test
Test the current cpio's status
Return value is 0 or bitwise or-ed of following values:
0x1:Magisk 0x2:unsupported 0x4:Sony
patch
Apply ramdisk patches
Configure with env variables: KEEPVERITY KEEPFORCEENCRYPT
backup ORIG
Create ramdisk backups from ORIG
restore
Restore ramdisk from ramdisk backup stored within incpio
sha1
Print stock boot SHA1 if previously backed up in ramdisk
dtb <input> <action> [args...]
Do dtb related actions to <input>
Supported actions:
print [-f]
Print all contents of dtb for debugging
Specify [-f] to only print fstab nodes
patch
Search for fstab and remove verity/avb
Modifications are done directly to the file in-place
Configure with env variables: KEEPVERITY
split <input>
Split image.*-dtb into kernel + kernel_dtb
sha1 <file>
Print the SHA1 checksum for <file>
cleanup
Cleanup the current working directory
compress[=format] <infile> [outfile]
Compress <infile> with [format] (default: gzip), optionally to [outfile]
<infile>/[outfile] can be '-' to be STDIN/STDOUT
Supported formats: gzip zopfli xz lzma bzip2 lz4 lz4_legacy lz4_lg
decompress <infile> [outfile]
Detect format and decompress <infile>, optionally to [outfile]
<infile>/[outfile] can be '-' to be STDIN/STDOUT
Supported formats: gzip zopfli xz lzma bzip2 lz4 lz4_legacy lz4_lg
1|ASUS_I006D:/ #
If Magisk is installed in the Android OS on the phone and the booted TWRP is able to mount the volume for /data the Magisk binary magisk can also be used in an session in TWRP.
For details see the section Using the magisk binary while the phone is booted into TWRP in the post Some hints for using Magisk on Android phones
How to install TWRP into the boot partition using CLI commands from within a booted TWRP?
Use the script
install_twrp_from_within_twrp.sh
Download from here: http://bnsmb.de/files/public/Android/install_twrp_from_within_twrp.sh
How to install TWRP after an OS Upgrade from within the running Android OS?
see How to Install TWRP into the boot partition again after the installation of an OS update
How to add additional files to an existing TWRP image?
see How to add additional files to an TWRP image
How to install TWRP into the boot partition via script?
see How to install TWRP via script
How to build a TWRP image?
seee How to compile TWRP for the ASUS Zenfone 8
How to install an OS image using the twrp command in a script
see How to install an OS image using the TWRP binary twrp?
How to use TWRP if LineageOS 20.x is installed
As of 26.06.2023 booting the phone from the TWRP recovery image using the command
sudo fastboot boot <twrp_image>
Does not work anymore if LineageOS 20.x is installed on the phone.
see How to use TWRP if LineageOS 20.x is installed for a workaroujnd
Spoiler: History / Change log of this entry
02.12.2022 /bs
initial release
17.12.2022 /bs
added infos about how to use the binary twrp to install an OS image
26.12.2022 /bs
added infos about the logile used by TWRP
23.04.2023 /bs
added info about how to decrypt the data partition
30.04.2023 /bs
added infos about the file used for the TWRP settings
19.05.2023 /bs
added infos about how to check if the data partition is encrypted
updated the infos about the log file used by TWRP
added infos about how to install TWRP from within a running Android OS
26.06.2023 /bs
added the infos about how to use TWRP with LineageOS 20.x
The most important step to automate the installation and configuration of the Android OS is the installation of an OS image via script without user intervention. One method to do that is using the binary twrp from the recovery TWRP .
The twrp command to install an OS image with twrp is
Code:
/system/bin/twrp install /path/to/update.zip
The usage for the binary twrp is (see also here)
Spoiler: twrp usage help
Code:
I006D:/ # /system/bin/twrp --help
TWRP openrecoveryscript command line tool, TWRP version 3.7.0_12-0
Allows command line usage of TWRP via openrecoveryscript commands.
Some common commands include:
install /path/to/update.zip
backup <SDCRBAEM> [backupname]
restore <SDCRBAEM> [backupname]
wipe <partition name>
format data
sideload
set <variable> [value]
decrypt <password> [USER ID]
remountrw
fixperms
mount <path>
unmount <path>
listmounts
print <value>
mkdir <directory>
reboot [recovery|poweroff|bootloader|download|edl]
See more documentation at https://twrp.me/faq/openrecoveryscript.html
I006D:/ #
The binary twrp can also be used to wipe the data from the phone using the parameter wipe <partition_name>.
The command twrp install will not change the active boot slot for the next reboot so this must be done manually after installing the OS image. This can be done using the binary bootctl which is also part of TWRP.
The usage for the command bootctl is:
Spoiler: bootctl usage help
Code:
ASUS_I006D:/ # /system/bin/bootctl -h
/system/bin/bootctl - command-line wrapper for the boot HAL.
Usage:
/system/bin/bootctl COMMAND
Commands:
hal-info - Show info about boot_control HAL used.
get-number-slots - Prints number of slots.
get-current-slot - Prints currently running SLOT.
mark-boot-successful - Mark current slot as GOOD.
get-active-boot-slot - Prints the SLOT to load on next boot.
set-active-boot-slot SLOT - On next boot, load and execute SLOT.
set-slot-as-unbootable SLOT - Mark SLOT as invalid.
is-slot-bootable SLOT - Returns 0 only if SLOT is bootable.
is-slot-marked-successful SLOT - Returns 0 only if SLOT is marked GOOD.
get-suffix SLOT - Prints suffix for SLOT.
set-snapshot-merge-status STAT - Sets whether a snapshot-merge of any dynamic
partition is in progress. Valid STAT values
are: none, unknown, snapshotted, merging,
or cancelled.
get-snapshot-merge-status - Prints the current snapshot-merge status.
SLOT parameter is the zero-based slot-number.
64|ASUS_I006D:/ #
Afterwards the phone can be rebooted to activate the new installed OS
So the commands for installing an OS image via twrp are
- boot the phone from the TWRP image
- (optional) use twrp to wipe the data
- copy the OS image file via adb push to the phone
- install the OS image file via the twrp binary
- change the next active boot slot via the binary bootctl.
- reboot the phone
I wrote a simple script to just do that
install_os_via_twrp.sh
The usage of the script is :
Code:
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $ ./install_os_via_twrp.sh -h
install_os_via_twrp.sh version - v1.0.0.0 - install an OS image via the TWRP command twrp
install_os_via_twrp.sh [-h|help|-H] [--reboot|--noreboot] [force] [wipe|wipeall] [wipe_cache] [wipe_data] [wipe_dalvik] [format_data] [format_metadata] [factory_reset] [os_image_file]
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $
Use the parameter --help or -H to view the detailed usage help
Spoiler: Detailed usage help for install_os_via_twrp.sh
Code:
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $ ./install_os_via_twrp.sh -H
install_os_via_twrp.sh version - v1.0.0.0 - install an OS image via the TWRP command twrp
Usage
install_os_via_twrp.sh [-h|help|-H] [--reboot|--noreboot] [force] [wipe|wipeall] [wipe_cache] [wipe_data] [wipe_dalvik] [format_data] [format_metadata] [factory_reset] [os_image_file]
All parameter are optional, except the parameter for the OS image to install "os_image_file".
The parameter can be used in any order.
Use the parameter "help" or "-H" to print the detailed usage help; use the parameter "-h" to print only the short usage help
If the parameter "--reboot" is used the script will reboot the phone after successfully installing the OS image; to disable the automatic reboot use the parameter "--noreboot".
Default is to ask the user for confirmation to reboot the phone.
Use the parameter "wipe" or "wipeall" to wipe /data, /cache, and Dalvik before installing the OS image.
Use one or more of the parameter "wipe_cache", "wipe_data", or "wipe_dalvik" to only wipe some of the partitions used.
Use the parameter "format_metadata" to format the meta data partition; this wipe is NOT included in "wipe_all"
Use the parameter "format_data" to format the data partition; this wipe is NOT included in "wipe_all"
Use the parameter "factory_reset" to do a factory reset before installing the OS image; a factory reset is done by formatting the data and the metadata partitions.
Use the parameter "force" to ignore errors while wiping or formatting the data; without this parameter the script will abort if one of the wipe or format commands fails
To change some of the values used by the script these environment variables can be set before starting the script:
Set the environment variable REBOOT to "yes" before starting the script to automatically reboot the phone after enabling the root access
Set the environment variable REBOOT to "no" before starting the script to disable the automatic reboot after enabling the root access
Set the environment variable UPLOAD_DIR_ON_THE_PHONE to set the upload directory for the OS image file on the phone (default dir is /tmp; /tmp is mounted on a ramdiks)
See also the source code of the script
boot_phone_from_twrp.sh
for environment variables supported by this script
Prerequisites
- the phone must be connected via USB
- there must be a working connection to the phone using fastboot or adb
- a working TWRP image for the phone must exist
The script boot_phone_from_twrp.sh is required by this script -- see the source code of the script
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $
Note:
The script needs the helper script boot_phone_from_twrp.sh.sh (see How to boot a phone from a twrp recovery image)
Spoiler: Sample output of the script installing a new version of the same OS
Code:
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $ REBOOT=yes /data/develop/android/scripts_on_linux/install_os_via_twrp.sh /data/backup/ASUS_ZENFONE8/omnirom/omni-13/omni-13-202212180505-zenfone8-MICROG.zip
install_os_via_twrp.sh version - v1.0.0.0 - install an OS image via the TWRP command twrp
Using the TWRP helper script "/data/develop/android/scripts_on_linux/boot_phone_from_twrp.sh"
The OS image to install is: "/data/backup/ASUS_ZENFONE8/omnirom/omni-13/omni-13-202212180505-zenfone8-MICROG.zip"
Reading the helper script "boot_phone_from_twrp.sh" ...
The script is running as user "xtrnaw7" -- will use "sudo" for the fastboot commands ...
Will use the attached phone with the serial number "M6AIB760D0939LX"
Using the default TWRP image: "/data/backup/ASUS_ZENFONE8/twrp/current_twrp.img"
Using the options " -s M6AIB760D0939LX " for the adb commands
Using the options " -s M6AIB760D0939LX " for the fastboot commands
Checking the script prerequisites ...
Will wait up to 60 second(s) after booting the phone into the bootloader
Will wait up to 60 second(s) after booting the phone from the TWRP image
Will wait up to 10 second(s) until the adb daemon is ready to use
Retrieving the current status of the phone ...
The phone is currently booted into the Android OS
The phone is booted into the Android OS
Booting the phone into the bootloader now ...
Waiting up to 60 seconds for the boot into the fastboot mode ...
The phone is booted into the bootloader
Booting the phone from the TWRP image "/data/backup/ASUS_ZENFONE8/twrp/current_twrp.img" now ...
Sending 'boot.img' (98304 KB) OKAY [ 2.833s]
Booting OKAY [ 10.359s]
Finished. Total time: 13.243s
Waiting up to 60 seconds for the boot of the phone ....
Waiting up to 10 seconds for the adb daemon to get ready ..
... the adb daemon is ready after second(s)
The phone is booted into TWRP: "twrp_I006D" version "3.7.0_12-0"
Waiting up to 10 seconds for the adb daemon to get ready
... the adb daemon is ready after second(s)
Coyping the OS image file "/data/backup/ASUS_ZENFONE8/omnirom/omni-13/omni-13-202212180505-zenfone8-MICROG.zip" to "/tmp/omni-13-202212180505-zenfone8-MICROG.zip" on the phone ...
adb: error: failed to read copy response8-MICROG.zip
/data/backup/ASUS_ZENFONE8/omnirom/omni-13/omni-13-202212180505-zenfone8-MICROG.zip: 1 file pushed, 0 skipped. 201.8 MB/s (1261116637 bytes in 5.959s)
adb: error: failed to read copy response
adb: device 'M6AIB760D0939LX' not found
Copying the image failed -- we will do another try in 5 seconds ...
/data/backup/ASUS_ZENFONE8/omnirom/omni-13/omni-13-202212180505-zenfone8-MICROG.zip: 1 file pushed, 0 skipped. 32.5 MB/s (1261116637 bytes in 37.056s)
Installing the OS image "/tmp/omni-13-202212180505-zenfone8-MICROG.zip" into the slot "_b" ...
Installing zip file '/tmp/omni-13-202212180505-zenfone8-MICROG.zip'
Flashing A/B zip to inactive slot: B
Step 1/2Step 2/2Updating partition details...
...done
Devices on super may not mount until rebooting recovery.
To flash additional zips, please reboot recovery to switch to the updated slot.
Done processing script file
OS image file "/tmp/omni-13-202212180505-zenfone8-MICROG.zip" successfully installed.
Now changing the next active slot to _b ...
... successfully changed the active slot for the next reboot
Rebooting the phone now ...
Booting the Android OS using the command "adb reboot " now ...
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $
Spoiler: Sample output of the script installing another OS in the inactive slot
Code:
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $ /data/develop/android/scripts_on_linux/install_os_via_twrp.sh factory_reset /data/backup/ASUS_ZENFONE8/Lineage-19_Android12/lineage-19.1-20221216-nightly-sake-signed.zip
install_os_via_twrp.sh version - v1.0.0.0 - install an OS image via the TWRP command twrp
Using the TWRP helper script "/data/develop/android/scripts_on_linux/boot_phone_from_twrp.sh"
The OS image to install is: "/data/backup/ASUS_ZENFONE8/Lineage-19_Android12/lineage-19.1-20221216-nightly-sake-signed.zip"
Reading the helper script "boot_phone_from_twrp.sh" ...
The script is running as user "xtrnaw7" -- will use "sudo" for the fastboot commands ...
Will use the attached phone with the serial number "M6AIB760D0939LX"
Using the default TWRP image: "/data/backup/ASUS_ZENFONE8/twrp/current_twrp.img"
Using the options " -s M6AIB760D0939LX " for the adb commands
Using the options " -s M6AIB760D0939LX " for the fastboot commands
Checking the script prerequisites ...
Will wait up to 60 second(s) after booting the phone into the bootloader
Will wait up to 60 second(s) after booting the phone from the TWRP image
Will wait up to 10 second(s) until the adb daemon is ready to use
Retrieving the current status of the phone ...
The phone is currently booted into the Android OS
The phone is booted into the Android OS
Booting the phone into the bootloader now ...
Waiting up to 60 seconds for the boot into the fastboot mode ...
The phone is booted into the bootloader
Booting the phone from the TWRP image "/data/backup/ASUS_ZENFONE8/twrp/current_twrp.img" now ...
Sending 'boot.img' (98304 KB) OKAY [ 2.840s]
Booting OKAY [ 10.406s]
Finished. Total time: 13.286s
Waiting up to 60 seconds for the boot of the phone ....
Waiting up to 10 seconds for the adb daemon to get ready ..
... the adb daemon is ready after second(s)
The phone is booted into TWRP: "twrp_I006D" version "3.7.0_12-0"
Waiting up to 10 seconds for the adb daemon to get ready
... the adb daemon is ready after second(s)
Wiping all data including media ...
Done.
You may need to reboot recovery to be able to use /data again.
TWRP will not recreate /data/media on an FBE device. Please reboot into your rom to create /data/media
Formatting Metadata using mke2fs...
Done.
Done processing script file
Wiping the metadata ...
++ /usr/bin/adb -s M6AIB760D0939LX shell umount /dev/block/by-name/metadata
umount: /dev/block/sda22: Invalid argument
++ /usr/bin/adb -s M6AIB760D0939LX shell mke2fs -F -t ext4 /dev/block/by-name/metadata
mke2fs 1.45.4 (23-Sep-2019)
Discarding device blocks: done
Creating filesystem with 4096 4k blocks and 4096 inodes
Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done
Coyping the OS image file "/data/backup/ASUS_ZENFONE8/Lineage-19_Android12/lineage-19.1-20221216-nightly-sake-signed.zip" to "/tmp/lineage-19.1-20221216-nightly-sake-signed.zip" on the phone ...
adb: error: failed to read copy responsey-sake-signed.zip
/data/backup/ASUS_ZENFONE8/Lineage-19_Android12/lineage-19.1-20221216-nightly-sake-signed.zip: 1 file pushed, 0 skipped. 313.7 MB/s (1114300349 bytes in 3.387s)
adb: error: failed to read copy response
adb: device 'M6AIB760D0939LX' not found
Copying the image failed -- we will do another try in 5 seconds ...
/data/backup/ASUS_ZENFONE8/Lineage-19_Android12/lineage-19.1-20221216-nightly-sake-signed.zip: 1 file pushed, 0 skipped. 32.5 MB/s (1114300349 bytes in 32.719s)
Installing the OS image "/tmp/lineage-19.1-20221216-nightly-sake-signed.zip" into the slot "_a" ...
Installing zip file '/tmp/lineage-19.1-20221216-nightly-sake-signed.zip'
Flashing A/B zip to inactive slot: A
Step 1/2Step 2/2Updating partition details...
...done
Devices on super may not mount until rebooting recovery.
To flash additional zips, please reboot recovery to switch to the updated slot.
Done processing script file
OS image file "/tmp/lineage-19.1-20221216-nightly-sake-signed.zip" successfully installed.
Now changing the next active slot to _a ...
... successfully changed the active slot for the next reboot
*** Press return to reboot the phone now
Rebooting the phone now ...
Booting the Android OS using the command "adb reboot " now ...
[ OmniRom 13 Dev - [email protected] /data/develop/android/scripts_on_linux ] $
Testenvironment
I tested the script using this hardware and software:
Hardware:
ASUS Zenfone 8
TWRP
TWRP 3.7.0.12
OS Images installed via script
OmniROM 12
OmniROM 13
LineageOS 19
The script does not work for the images with the original Android from ASUS; the OS installation works but the phone does not boot from the new installation
The script install_os_via_twrp.sh is also available on my home page:
install_os_via_twrp.sh
Trouble Shooting
To update the installed OS to a new version in most cases neither a wipe nor a factory reset is necessary.
To install a different distribution on the phone in most cases a factory reset is required. (e.g installing LIneageOS if the current OS is OmniROM)