Commit Graph

340 Commits

Author SHA1 Message Date
topjohnwu 0e5a113a0c Support patching mnt_point in fstab in dtb 2019-09-22 04:17:15 -04:00
topjohnwu a1ccd44013 Change MagiskBoot patch behavior
Use environment variables to toggle configurations for patching ramdisk
2019-09-21 05:55:23 -04:00
topjohnwu 4d91e50d6d Update dtb patch to not use in-place modification 2019-09-21 05:30:04 -04:00
topjohnwu 86481c74ff Allow user to select recovery mode
Close #1674
2019-09-08 00:44:26 -04:00
topjohnwu ee39616a8b Update emulator.sh to support all AVD images 2019-09-04 11:12:09 -04:00
topjohnwu 8cf475f708 Add scripts to setup Magisk in AVD 2019-09-03 17:06:14 -04:00
Chris Renshaw 1283590eeb scripts: prepare addon.d for recovery addon.d-v2 support
- naturally there's no `su` in recovery
- major refactor for common actions and simplicity
2019-09-01 02:19:59 +08:00
osm0sis dca3fe396f scripts: hide expected x86 busybox error on arm
- Magisk Manager installs have busybox in the $PATH before extracting busybox from update-binary so an error from busybox ash (as sh) attempting to parse the x86 busybox like a shell script would be shown:
./bin/busybox: line 1: syntax error: unexpected "("
- this will only occur when ash tries to run a binary it can't handle, so basically only with x86 binary on an arm* device
2019-09-01 02:19:59 +08:00
topjohnwu 1f8df419c4 Extract x86 busybox first
Fix #1600
2019-07-16 01:16:29 -07:00
topjohnwu f1112fdf37 Logical Resizable Android Partitions support
The way how logical partition, or "Logical Resizable Android Partitions"
as they say in AOSP source code, is setup makes it impossible to early
mount the partitions from the shared super partition with just
a few lines of code; in fact, AOSP has a whole "fs_mgr" folder which
consist of multiple complex libraries, with 15K lines of code just
to deal with the device mapper shenanigans.

In order to keep the already overly complicated MagiskInit more
managable, I chose NOT to go the route of including fs_mgr directly
into MagiskInit. Luckily, starting from Android Q, Google decided to
split init startup into 3 stages, with the first stage doing _only_
early mount. This is great news, because we can simply let the stock
init do its own thing for us, and we intercept the bootup sequence.

So the workflow can be visualized roughly below:

Magisk First Stage --> First Stage Mount --> Magisk Second Stage --+
   (MagiskInit)         (Original Init)         (MagiskInit)       +
                                                                   +
                                                                   +
     ...Rest of the boot... <-- Second Stage <-- Selinux Setup  <--+
      (__________________ Original Init ____________________)

The catch here is that after doing all the first stage mounting, /init
will pivot /system as root directory (/), leaving us impossible to
regain control after we hand it over. So the solution here is to patch
fstab in /first_stage_ramdisk on-the-fly to redirect /system to
/system_root, making the original init do all the hard work for
us and mount required early mount partitions, but skips the step of
switching root directory. It will also conveniently hand over execution
back to MagiskInit, which we will reuse the routine for patching
root directory in normal system-as-root situations.
2019-06-29 01:25:54 -07:00
topjohnwu e29b712108 Start Magisk in SAR 2019-06-25 23:31:59 -07:00
osm0sis ac28e6e5ca Fix uninstaller missing recent changes
- group unsupported formats into the same code (86f778c0aa (diff-93690a8d9f50c177ef97416af3be8726))
- support A only system-as-root devices (e72c6685ed (diff-93690a8d9f50c177ef97416af3be8726))
- remove unnecessary '--' from magiskboot actions (7f08c06943 (diff-93690a8d9f50c177ef97416af3be8726))
- get_flags need to be before find_boot_image (a4f5d47e72)

closes #1371, closes #1431, closes #1439
2019-05-09 20:28:48 -07:00
topjohnwu fb40e96917 Update outputs 2019-05-01 01:22:37 -04:00
topjohnwu 4ca25f74c6 More robust mounting scripts
Close #1376
2019-04-30 17:35:58 -04:00
osm0sis 7fda917b86 Fix addon.d error OUTFD derp 2019-04-30 17:09:25 -04:00
osm0sis e6bd5f2c40 Display error if actual Magisk addon.d script cannot be run
- this would likely occur on an FDE device with block map OTAs (a la LineageOS) since they do not require/request decrypt
- for reference all other addon.d "v1" cases should work fine:
  1) FDE with openrecovery script works fine since it requests decrypt
  2) FBE with openrecovery script OR block map work fine since /data/adb remains accessible
2019-04-30 10:27:29 -04:00
topjohnwu c5758b3f2d Update scripts 2019-04-06 13:04:17 -04:00
topjohnwu 7af7910e78 Revert "Revert to old find boot order"
This reverts commit 5203886f0b.
2019-04-05 15:18:39 -04:00
vvb2060 a4f5d47e72 get_flags need before find_boot_image 2019-04-05 15:18:28 -04:00
topjohnwu 5203886f0b Revert to old find boot order 2019-04-04 20:01:59 -04:00
topjohnwu 91da1cf817 Make on_install happen earlier to allow more customization 2019-03-31 15:37:12 -04:00
topjohnwu 1cd45b53b1 Support recovery based Magisk
Some devices (mainly new Samsung phones we're talking here...) using
A only system-as-root refuse to load ramdisk when booted with boot
no matter what we do. With many A only system-as-root devices, even
though their boot image is kernel only, we can still be able to add
a ramdisk section into the image and force the kernel to use it as
rootfs. However the bootloader on devices like the S10 simply does
not load anything within boot image into memory other than the kernel.
This gives as the only option is to install Magisk on the recovery
partition. This commits adds proper support for these kind of scenarios.
2019-03-30 00:49:48 -04:00
topjohnwu 1c09b3642f Properly setup update flag in module installer 2019-03-27 22:20:39 -04:00
topjohnwu a199b0ace1 Use ZIPFILE instead of ZIP
The tool zip reads , we don't want it
2019-03-23 20:49:16 -04:00
topjohnwu 2f2108e4e8 Fix typo in module installer 2019-03-23 05:28:43 -04:00
topjohnwu f9ae4ab475 Add base Magisk module installer script 2019-03-23 04:27:36 -04:00
topjohnwu b7e2e972c7 Support boot_img_hdr_v2 2019-03-13 16:51:22 -04:00
topjohnwu 7f08c06943 Remove unnecessary '--' from magiskboot actions 2019-03-07 18:07:23 -05:00
topjohnwu 14ae29d907 Support Android Q new init setup 2019-03-03 06:35:25 -05:00
topjohnwu e72c6685ed Support A only System-as-root Devices
Most Chinese devices (and supposedly Galaxy S10) running Android Pie
is using system-as-root without A/B partition.

https://source.android.com/devices/bootloader/system-as-root#about-system-as-root

According to the docs above, these devices will have a ramdisk block
with size 0 in their boot images. Since magiskinit can run independently
on system-as-root devices, we simply just create an empty ramdisk with
magiskinit added as init.

Huge thanks to @vvb2060 for the heads up and original PR.
Close #980, close #1102
2019-02-28 05:46:36 -05:00
topjohnwu 63b18246d8 Add compressed ramdisk support 2019-02-24 20:39:01 -05:00
topjohnwu 6ca8db2f0c Welcome to the 64 bit world!
Close #854
2019-02-24 08:13:27 -05:00
topjohnwu 3356d7b6ff More friendly to obscure/outdated custom recoveries
Close #1049
2019-02-24 04:45:47 -05:00
topjohnwu 86f778c0aa Group unsupported formats into the same code 2019-02-24 02:30:04 -05:00
topjohnwu defbbdfe21 Update scripts 2019-02-24 02:11:11 -05:00
HemanthJabalpuri 10613686ed Fix bootloop when removing system SuperSU in <5.0 2019-02-18 03:31:16 -05:00
topjohnwu 1321f097b8 Remove usage of magisk.img
Mounting ext4 images causes tons of issues, such as unmountable with broken F2FS drivers.
Resizing is also very complicated and does not work properly on all devices.
Each step in either measuring free space, resizing, and shrinking the image is a
point of failure, and either step's failure could cause the module system completely broken.

The new method is to directly store modules into /data/adb/modules, and for module installation
on boot /data/adb/modules_update. Several compatibility layers has been done: the new path is
bind mounted to the old path (/sbin/.magisk/img), and the helper functions in util_functions.sh
will now transparently make existing modules install to the new location without any changes.

MagiskHide is also updated to unmount module files stored in this new location.
2019-02-12 02:14:57 -05:00
topjohnwu ab47b717b1 Reorganize scripts 2019-02-11 17:14:07 -05:00
vvb2060 e05cdc83f3 fix extract_bb 2019-02-11 02:35:04 -05:00
Erfan Abdi 6698c189fc Support non-ext4 filesystem for vendor and system
Signed-off-by: Erfan Abdi <erfangplus@gmail.com>
2019-02-07 00:45:30 -05:00
topjohnwu 6ee08b6717 Temporary remove API 16 support 2019-02-03 16:42:16 -05:00
topjohnwu c7301a5161 Better support for low API levels 2019-02-03 09:50:49 -05:00
topjohnwu 62acc17e42 Support API 16 (Android 4.1)
Because why not
2019-02-02 05:06:13 -05:00
topjohnwu 858216796a Allow API 17 installation 2019-01-20 18:17:24 -05:00
Ivan Kutepov 6ea42a35a9 Fix reqSizeM check in mount_magisk_img function 2019-01-17 10:19:59 -05:00
topjohnwu 23e5188422 Update scripts
1. Update build.py to use f-strings
2. Directly append busybox binaries to update-binary
3. Remove b64xz
2019-01-15 08:32:18 -05:00
Zackptg5 0a64a7e5d4 Update util_functions.sh
Eliminates `cat: write error`
2019-01-13 13:17:45 -05:00
topjohnwu 0be158afa1 Official KitKat support 2018-12-28 16:03:23 +08:00
topjohnwu 8d210b5e37 Enhance EMUI 9 user experience 2018-12-25 01:08:46 +08:00
topjohnwu 3c6c0e6700 Support EMUI 9.0 2018-12-24 21:36:37 +08:00
topjohnwu 8b4008798f Add backward compat paths 2018-12-05 20:10:59 -05:00
topjohnwu fd4faf59b8 Use tr for replacing whitespace to newline
Close #824
2018-12-05 20:07:15 -05:00
Pzqqt 1cff08ce5d Fix possible error block counts
Add "-k" parameter to force the unit to 1024 bytes.
2018-12-05 12:53:06 -05:00
topjohnwu 0784448c69 Remove /.backup folder on start 2018-11-20 05:24:40 -05:00
topjohnwu 96b93bd876 Add function to find manager APK
Close #673
2018-11-15 03:12:31 -05:00
topjohnwu 376e7977f0 Deprecate path /sbin/.core, switch to /sbin/.magisk
Symlink is preserved for backwards compatibility
2018-11-15 01:36:03 -05:00
topjohnwu 83ae66daea Change stock boot image SHA1 backup method 2018-11-15 00:33:20 -05:00
topjohnwu d7d80d3fc1 Update encryption detection for determining default flags 2018-10-20 17:10:35 -04:00
topjohnwu dd9ddd2019 Remove unnecessary instruction from Defex hexpatch
Close #489
2018-10-20 00:28:09 -04:00
topjohnwu e1a65276b9 Switch to general Samsung defex patch
Should be future proof unless code changes
2018-10-17 03:17:24 -04:00
topjohnwu 3f87f6aee3 Fix output in Magisk Manager if no root exists 2018-09-20 16:21:22 -04:00
topjohnwu 04bcd145d3 Add a.a alias to BootSigner 2018-09-20 15:37:59 -04:00
topjohnwu 70d3b24338 Keep dm/avb-verity when device is using system_root_image
Close #512
2018-08-29 00:40:14 -04:00
topjohnwu 8664e9d19b Update scripts 2018-08-28 22:03:12 -04:00
topjohnwu f6aae2b048 Add hexpatch to remove Samsung defex in kernel
Close #499
2018-08-26 22:38:13 -04:00
topjohnwu a46c6252c6 Detect insufficient partition size
Close #388
2018-08-11 15:56:12 +08:00
topjohnwu 5c1886c8f5 Update scripts 2018-08-10 18:59:14 +08:00
topjohnwu 6add682705 Remove high compression mode 2018-08-10 03:49:25 +08:00
topjohnwu a63696836c Proper addon.d-v2 support 2018-08-03 22:40:49 +08:00
topjohnwu bb25edc09e Use own busybox for get_outfd 2018-08-03 04:25:00 +08:00
topjohnwu 169c0fe4af Stop use clashing names 2018-08-03 03:43:02 +08:00
topjohnwu 0ef026c610 Remove system root when running addon.d 2018-07-20 00:37:38 +08:00
topjohnwu 90379eeb35 Detect ramdisk partition
Because Huawei, fix #400
2018-07-19 17:48:51 +08:00
topjohnwu ef62272df7 Small adjustments to prevent seccomp errors 2018-07-10 02:44:58 +08:00
topjohnwu c3b473e4bc Fix get_outfd in embedded mode 2018-07-07 17:48:05 +08:00
topjohnwu c3a6179a21 Update scripts 2018-07-05 17:29:13 +08:00
topjohnwu 4de51d93ef Tweak info when installing 2018-07-04 23:46:16 +08:00
topjohnwu 70243d7a47 Add fallback to parse block from fstabs 2018-07-03 18:28:44 +08:00
topjohnwu b5b8c4b725 First find blocks by-name, then fallback to parsing sysfs 2018-07-03 02:57:57 +08:00
topjohnwu d149af9628 Fix bootloop when upgrading from older Magisk 2018-07-01 14:58:31 +08:00
topjohnwu 3283439fd4 New uninstaller 2018-06-27 06:00:01 +08:00
topjohnwu c8216f9bc5 Fix uninstaller 2018-06-26 22:41:03 +08:00
Jat d1a7372bd2 fix a bug when $ABILONG is arm64-v8a 2018-06-26 05:03:07 +08:00
topjohnwu 7265450e2e Precise free space calculation for magisk.img
1. Introduce new applet: imgtool for better separation from the main program
2. Actually mount the image and check statvfs for free space in the image

This shall eliminate any possible module installation failure from image resizing issues.
2018-06-22 06:18:06 +08:00
topjohnwu daf9b019c6 More elaborate bb_setup 2018-06-21 16:39:10 +08:00
topjohnwu 14eebd582f Source addon.d script from data 2018-06-21 11:54:21 +08:00
topjohnwu 9a8eeacee8 Fix output of addon.d, and add support for addon.d-v2 2018-06-21 10:53:49 +08:00
topjohnwu 45b0bf5bc5 Remove unnecessary variable 2018-06-21 01:48:46 +08:00
topjohnwu 88db822c43 Get device blocks with sysfs 2018-06-21 01:37:08 +08:00
John Wu c0ca99f4b4 Make sure APK exists before signing AVB 1.0
Check all possible APK locations before actually running the verification
2018-06-19 14:19:38 -07:00
XiNGRZ 196f15d240 Fix survival script for AVB 1.0 signed boot image 2018-06-19 14:19:38 -07:00
topjohnwu 835ece5469 Update default flag logic, fix S9/S9+ DTB patches 2018-06-18 01:40:56 +08:00
topjohnwu d93fc67a75 Improve detecting device status 2018-06-17 17:59:24 +08:00
topjohnwu 3f83919e09 Fix bootloops when flashing Magisk after data wipe on FBE devices 2018-06-11 02:26:18 +08:00
topjohnwu 72a5b83544 Support patching dtb placed in extra section (S9/S9+) 2018-06-10 20:36:18 +08:00
topjohnwu 274efb49e7 Fix modules installation error 2018-06-03 17:01:10 +08:00
topjohnwu 9b445d89a1 Add extract feature to update-binary 2018-05-13 14:26:28 +08:00
topjohnwu 25703c1750 Do not force LD_LIBRARY_PATH in recovery 2018-05-06 01:49:01 +08:00
topjohnwu fc9d4034a9 Fix installation in custom recoveries 2018-04-29 14:04:18 +08:00
topjohnwu a2c1b024f3 Use 32-bit binaries only 2018-04-22 14:13:27 +08:00
topjohnwu 9e737df534 Update high compression mode detection logic 2018-03-10 15:55:55 +08:00
topjohnwu a94fa81195 Support non skip_initramfs device with slot suffix 2018-02-14 00:57:52 +08:00
topjohnwu 6728445542 Support separate ramdisk images 2018-02-10 03:34:13 +08:00
topjohnwu 10ed299c78 Detect recovery on FBE devices with no DE access 2018-02-10 03:31:00 +08:00
topjohnwu e5c3183025 Update scripts 2018-01-01 16:46:28 +08:00
topjohnwu d8bb3af06b Miscellaneous 2017-12-29 04:25:30 +08:00
topjohnwu 74da6e1dc0 Support new 1500 template 2017-12-26 03:23:58 +08:00
topjohnwu f7b4935677 Add recommend KEEPVERITY and KEEPFORCEENCRYPT flags 2017-12-21 15:42:03 +08:00
topjohnwu a3c49de6a5 Refactor magiskboot 2017-12-21 03:36:18 +08:00
topjohnwu 4db0ad32f0 Fix install scripts 2017-12-18 03:08:53 +08:00
topjohnwu 8ca1e43533 Move all /data files into /data/adb 2017-12-16 04:42:16 +08:00
topjohnwu bd01c314dc Change database location 2017-12-12 03:04:55 +08:00
topjohnwu 942c870981 Properly handle KEEPVERITY and HIGHCOMP 2017-12-07 04:20:27 +08:00
topjohnwu baff9256c5 Dynamic patch verity and forceencrypt flag 2017-12-07 03:21:13 +08:00
topjohnwu 9f6a27c20d Add high compression ramdisk support 2017-12-06 12:51:16 +08:00
topjohnwu d8b8adb88c Fix is_mounted function 2017-11-22 22:22:29 +08:00
topjohnwu bc21a1fb71 Update internal paths 2017-11-22 16:04:24 +08:00
topjohnwu 3bc31374ac Fix issue of touch command on Android 5.0 2017-11-20 04:13:51 +08:00
topjohnwu 32ee8e462c Properly and fully support dtbo patching 2017-11-15 05:48:31 +08:00
topjohnwu 912c188b53 Add dtbo.img patch support 2017-11-11 01:33:50 +08:00
topjohnwu b438cc9335 Remove unnecessary monogisk 2017-11-10 00:54:54 +08:00
topjohnwu 1d3d30fa45 Get potential slot info 2017-11-09 03:05:25 +08:00
topjohnwu e710848345 Unify Magisk configuration
Introduce monogisk tool
2017-11-06 06:22:45 +08:00
topjohnwu a831110816 Add boot signing to installation 2017-10-31 17:05:24 +08:00
topjohnwu bb7099376b Improve daemon startup and log management 2017-10-11 02:26:28 +08:00
topjohnwu 03c8d716cc Introduce Invincible Mode: Self recover service 2017-10-08 22:00:22 +08:00
topjohnwu c215447405 Fix Pixel C installation 2017-10-07 22:08:10 +08:00
topjohnwu dbfe49c56f Unlock blocks before flashing boot image 2017-09-28 00:54:01 +08:00
topjohnwu 98e21f9f5b Update uninstaller 2017-09-27 15:26:21 +08:00
topjohnwu 9cb1cf756f Update scripts 2017-09-26 20:21:43 +08:00
topjohnwu 9b4ae8fcc5 Adjust scripts 2017-09-16 03:48:58 +08:00
topjohnwu a1a2c52409 Patch sepolicy at boot time 2017-09-16 01:32:09 +08:00
topjohnwu 590e7f7724 Proper support for Magisk Manager installation 2017-09-15 18:02:25 +08:00
Shaka Huang 4d61e5e319 Fix error generating binary for x86
fix typo

Signed-off-by: Shaka Huang <shakalaca@gmail.com>
2017-09-14 14:33:37 -05:00
topjohnwu e5e34797a8 Patch fstab from dtb 2017-09-15 02:52:53 +08:00
topjohnwu 518f3d229f Slight adjustments to scripts 2017-09-13 15:51:45 +08:00
topjohnwu 46c91f923d Update scripts to support Pixel (XL) 2017-09-13 04:08:50 +08:00
topjohnwu cd5f5d702f Fix stock image dump not stored correctly 2017-09-13 04:08:44 +08:00
topjohnwu 0eb79e5acd Update scripts 2017-09-06 23:33:46 +08:00
topjohnwu cd8dd65a65 chcon on Android 5.0 doesn't support -h options 2017-09-05 21:44:53 +08:00
topjohnwu 50c56f8b50 Simplify flash scripts 2017-09-05 21:44:22 +08:00
topjohnwu 9e9f8ca8f3 Restore cwd 2017-09-02 23:28:17 +08:00
topjohnwu f63af0601c Support Magisk Manager boot image file patch 2017-08-31 03:08:09 +08:00
topjohnwu 9522255e3a Proper magisk manual injection support 2017-08-17 03:46:01 +08:00
topjohnwu 6eb7c0b5d6 Add new util functions for new template version 2017-08-12 23:15:39 +08:00
topjohnwu 750872cc37 Add boot actions 2017-08-12 17:03:31 +08:00
topjohnwu d6547f0701 Fix installer options not read properly 2017-08-04 23:49:22 +08:00
topjohnwu eae611c54d Add b64xz to handle busybox decode/decompress in scripts 2017-08-02 18:25:24 +08:00
topjohnwu b37bad35c2 Fuse busybox into update-binary and remove from Magisk Manager APK 2017-08-02 02:22:33 +08:00
topjohnwu cb70eebb08 Update scripts 2017-07-31 03:03:52 +08:00