Commit Graph
66 Commits
Author SHA1 Message Date
osm0sis f3f80014cc AK3+Backend: fix multi-line abort outputs 2019-08-04 01:16:54 -03:00
osm0sis 559a6082e8 Backend: remember we needs them busybox awks 2019-07-20 18:43:02 -03:00
osm0sis e4a907b745 Backend: introduce Android security patch level check, cleanups
- checks the supported.patchlevels prop in anykernel.sh and matches against it to prevent users flashing incorrect kernels for patch levels
- this is possibly more important than supported.versions now since modern Android doesn't really do point releases anymore, so a patch level is more likely to signify breakage than a version change
- supported.patchlevels can be a closed or open-ended range of dates in the format YYYY-MM, e.g. "2019-04 - 2019-06", "2019-04 -" or "- 2019-06" where the last two examples show setting a minimum and maximum, respectively
- clean up device and version checks a bit while we're at it
2019-07-20 18:21:55 -03:00
osm0sis c2d3d2513b Backend: speed up and simplify is_mounted use 2019-07-12 21:07:16 -03:00
osm0sis 6872cf5977 AK3: add simple arch detect to optionally support arm + x86 in same zip
- for use with broad zips targetting many devices including different architectures
- enable support by putting current tools binary contents in tools/arm and adding tools/x86

(thanks @Zackptg5 for the nudge)
2019-07-01 17:46:34 -03:00
wloot db390aaafe Backend: use recovery umount for /vendor
* It is a *HACK*
* Avoid "Mount /cust (Device or resource busy) failed" error on orangefox which
  mounting /cust as /vendor and also runing a non-treble ROM.
* It is a Orangefox feature that mount both /vendor and /cust while runing a
  non-treble ROM (Obviously, there is a BUG that it shouldnt mount both but /cust
  only), so both of them have a same block. In this case, normal busybox unmount
  will only un-mount what we inputted. I guess that orangefox hacked umount command
  to make /cust is binding with /vendor.

(See comments in #41)

Signed-off-by: wloot <wlootlxt123@gmail.com>
2019-06-26 17:22:15 -03:00
wloot a7af28e25b Backend: fix getting parent directory on some devices
/tmp/updater: line 33: cd: /tmp/anykernel/..: No such file or directory

Closes #41
2019-06-26 17:16:06 -03:00
Chris Renshaw a48ce68a7c Backend: avoid tar complaining when there is no recovery.log
- clean up needless $parent stuff
- recovery.log will only be in /tmp regardless of $home
2019-06-10 00:10:35 -03:00
Chris Renshaw 16b147e939 Backend: only take relevant files for debug .tgz
- per suggestion from eng.stk avoid archiving all of $home since /tmp in recovery might hold sensitive crypto data
- restrict tar to $home (i.e. /tmp/anykernel by default) and $parent/recovery.log (i.e. /tmp/recovery.log)
- probably no need to be verbose when making the archive, it kinda clutters up the end of the captured log
2019-06-09 23:41:07 -03:00
osm0sis da324c430f Backend: fix debugging .tgz creation for booted installs
- some apps copy the zip to be flashed to the app cache, which would result in the .tgz going either somewhere unknown/inaccessbile to the user or get deleted when the app cleans up after flash, so instead send to /sdcard if the device is booted to Android
2019-06-07 20:22:03 -03:00
osm0sis 6986821230 Welcome to AK3: AnyKernel2 + Magisk = AnyKernel3!
- abstract out execution directory as $home to fascilitate testing individual scripts (defaults to /tmp/anykernel)
- general script clean ups for uniformity, readability, speed and simplicity
- simplify consecutive `ui_print` commands where possible

Backend only fixes:
- use busybox umount and mount whenever possible to avoid linker warnings in stderr during system-as-root setup
- use `busybox --install -s` for bin/* setup
- consolidate setup to abort earlier if there are issues
- add backwards compatible symlinks for those who might not have updated their anykernel.sh with ak3-core.sh (to be renamed in subsequent commit)

Tools only fixes:
- add magiskboot to replace separate support for AOSP and PXA-AOSP formats, with MTK headers, BLOB, DHTB, SEAndroid and Nook signing
- add magiskpolicy to allow for easy sepolicy patching
- remove xz and lz4 since magiskboot supports these

AK3 Core only fixes:
- use full `ui_print` function implementation like the backend
- add `abort` function to simplify exit on errors
- fix $patch directory being excluded from `reset_ak`
- update $ramdisk_compression handling for magiskboot
- magiskboot also resolves long-standing request for built-in Bump support (#18)
- update Sony ELF and related support for initial repack as AOSP by using mkbootimg as plug-and-play optional add-in binary
- update Sony ELF MTK header support using mkmtkhdr only when ELF is initially unpacked by unpackelf
- add support for MTK RECOVERY ramdisk header type with Sony ELF
- simplify U-Boot dumpimage/mkimage and Sony ELF unpackelf/mkbootimg split_img file handling
- update patch_cmdline to handle both magiskboot as header prop file, and unpackelf or mboot as cmdline.txt
- use `cp -fp` for `backup_file` and `restore_file` to hopefully better preserve attributes if used outside of the ramdisk
- refactor setup into `setup_ak` to simplify `reset_ak` trigger to find slot and block again
- add fallback to busybox for compression formats (i.e. lzop) which magiskboot cannot handle

IMPORTANT NOTES:
1) forcing repack with uncompressed cpio ramdisk is not currently supported by magiskboot
2) forcing repack with lzop ramdisk when previously another format is not currently supported by magiskboot
2019-05-31 23:49:19 -03:00
osm0sis a1f20c0d53 Backend: support all half-sensible ROM version formats
9
9.0
9.0.0

Anything else is insanity.
2019-01-02 17:08:22 -04:00
osm0sis 34d8a65fbe Backend: workaround bad ROM versioning practices in supported check
- some ROMs have taken it upon themselves to go against AOSP, i.e. where starting with Pie AOSP now versions it as only 9, some ROMs are still making it 9.0
- introduce integer 2 float function that will add a decimal place to all for comparisons
- this should support the majority of ROMs, but anything crazy like 9.0.0, or crazier like 09.0.0 should be frowned upon by the community and the ROM devs should be made to get it together and follow AOSP
2018-12-20 13:46:52 -04:00
osm0sis 9d49de1caf Backend: clean up mounting
- only mount system when not already mounted (avoids harmless stderr during booted flashes)
- optimize module targeting and mount logic further
2018-12-16 23:38:21 -04:00
osm0sis a31d03f2ce Backend: introduce Android version check
- checks the supported.versions prop in anykernel.sh and matches against it to prevent users flashing incorrect kernels for ROM versions
- supported.versions can be a list, e.g. "7.1.2, 8.0, 8.1" or a range, e.g. "8.1 - 9" of versions in the correct formatting for that Android version in ro.build.version.release in /system/build.prop
2018-12-16 18:31:53 -04:00
osm0sis 1d58385b26 AK2+Backend: fix file_getprop truncating if prop value contained =
See comments: https://github.com/osm0sis/AnyKernel2/pull/35#issuecomment-447648900
2018-12-16 13:53:33 -04:00
osm0sis 56b4244d53 Backend: cleanups 2018-12-15 09:00:36 -04:00
osm0sis 77fe6bffeb Backend: more robust getprop checks and replacements
- getprop failures are not only a system-as-root device issue, as it now also happens on OnePlus 5T in recovery when ROM is Pie Open Beta
- this appears to come down to a libc mismatch between recovery and ROM resulting in direct property checks failing but getprop without arguments printing all properties working
- revert most of https://github.com/osm0sis/AnyKernel2/commit/b1524da099efa716616a8eb3357876bca6a73540 since this should remain resolved with the new implementation
- keep the old check and file_getprop fallback for devices without getprop entirely
- add new getprop fallback that parses the full getprop output
2018-12-14 16:29:53 -04:00
osm0sis da8c2d1e6c Backend: allow infinite device.name<num>= device check properties (#34) 2018-12-14 15:43:25 -04:00
osm0sis fd881bd8d7 Backend: only attempt module bind remount if already mounted
- blindly attempting to remount broke module placement on some ROMs (e.g. Pocophone MIUI stock)
2018-12-11 13:34:37 -04:00
osm0sis 6d5332e054 Backend: attempt remounting module location as well
- some custom ROMs on some devices (e.g. Lineage on Pocophone) bind mount modules in /system over modules on /vendor, so remount rw at the bind target to ensure the bind source is also remounted and replaced
- toybox mount doesn't accept the /. prefixed paths from find so ensure we use busybox for mounts

Thanks franciscofranco and topjohnwu for the tips!
2018-12-11 02:35:15 -04:00
DarkLord1731 e92d8f96c6 AK2: Allow reading multiple lines from version file
This becomes handy to display some additional details apart from just showing the kernel version
2018-07-29 06:58:38 -03:00
osm0sis b1524da099 Backend: move system_root mounting to after device check
- adapted from https://github.com/nathanchance/AnyKernel2/commit/3dfba3dcabff3cf1f859276e1851ae35891d8801
- works around odd behaviors in TWRP on system-as-root devices, but retains working fallback using /system/system/build.prop if getprop also fails
- simplify unmount_all stderr redirection

Please see the above linked commit for further details.
Thanks to nathanchance for reporting, the device-specific workaround, and much testing
2018-07-19 21:30:56 -03:00
Nathan Chancellor 01bf828e78 backend: Break out of device check loop if a match is found
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2018-07-16 21:28:54 -03:00
Nathan Chancellor dd914e3385 backend: Break out of device check loop if a blank value is found
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2018-07-16 21:28:54 -03:00
Nathan Chancellor cea9c5a247 backend: Cache build.prop values in device check block
These values are static, we don't need to keep getting them with
getprop.

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2018-07-16 21:28:54 -03:00
osm0sis 2a34450ba9 AK2+Backend: move system_root setup and tear down to backend
- abstract out unmounting and expand to support undoing system_root
- also preserve and restore LD_PRELOAD
2018-07-03 20:49:31 -03:00
osm0sis caf289b584 Backend: misc fixes
- remove "kernel" from "Installing" wording since AK2 is also used on recoveries, and multi-partition Treble devices and this could be misleading
- fix getprop build.prop fallback on /system/system devices
2018-05-29 23:57:29 -03:00
osm0sis 6e14f5cfe9 Backend: fix modules support regression for /vendor
thanks @nathanchance for the quick heads-up
2018-03-23 13:29:55 -03:00
osm0sis 79b4c2c593 Backend: fix modules support regression on /system/system devices 2018-03-23 11:51:48 -03:00
Zackptg5 722da17775 Backend: Add mkdir for modules (#23) 2018-03-20 22:18:51 -03:00
osm0sis 12289267c5 Backend: touch up install whitespace now that we have banner/version display 2018-02-26 13:03:50 -04:00
osm0sis efa4623689 Backend: add custom kernel version display support
- place version text in a file named "version" in the root of the zip and it will display after the kernel.string when flashing
- useful in conjunction with build scripts, i.e. a generated version file not actually part of the kernel AK2 repo
2018-02-26 12:22:58 -04:00
osm0sis b0a2cae9cd Backend: add custom kernel banner support
- place text or line-art in a file named "banner" in the root of the zip and it will display
ahead of the kernel.string when flashing
2018-02-26 11:18:35 -04:00
osm0sis 7b09dd8b66 Backend: fix vendor unmounting 2018-02-25 13:54:45 -04:00
osm0sis 83df1e3df1 Backend: only replace getprop if needed (and do so more robustly) 2018-01-19 01:58:49 -04:00
Nathan Chancellor b0b754c094 Backend: Only apply contexts to new modules
After working on the OnePlus 5/T with custom ROMs on Android 8.1.0, I
have noticed that several of them have modules in /system/lib/modules
with a context of "u:object_r:vendor_file:s0", which goes against the
assumption made in commit 6b11373 ("update-binary: Change how we handle
modules"). Because the context is changed, there is an SELinux denial
when trying to load the module during init.

While it would be nice for ROMs to fix that on their own, I suspect
they are not entirely at fault. Google's documentation does state that
all modules should be loaded from vendor whenever possible so I would
guess Google decided to force *.ko objects to have a vendor_file
context. This is all speculation as I haven't cared to do research into
the subject.

Easiest way around this is to just worry about applying contexts to new
modules. cp does not override contexts so if the module was already
present, we can assume it has the correct context to begin with.

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2018-01-08 07:27:12 -07:00
Nathan Chancellor 6b11373d4a update-binary: Change how we handle modules
As of Oreo, Google is requiring that kernel modules be used whenever
possible and that their location be in /vendor. With Lineage 15.1,
devices without a separate /vendor partition will use /system/vendor,
which symlinked to /vendor.

To make this more flexible and future proof, allow developers to specify
where each module needs to go by setting the path in the modules folder.
If a module needs to go to /system/vendor/lib/modules, then the module
should be placed in modules/system/vendor/lib/modules. Contexts and
permissions will still be updated automatically.

Android documentation: https://source.android.com/devices/architecture/kernel/modular-kernels

Lineage 15.1 commit: https://github.com/LineageOS/android_vendor_lineage/commit/bf38db2a5e358a5449458b3dee2dd9d4015b8147

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2018-01-02 06:38:00 -07:00
osm0sis 79df8fcf0b AK2+Backend: misc fixes
- hide some expected stderr for AK2 mods with no additional ramdisk files
- fix U-Boot support by passing correct repacked ramdisk filename
- fix multi-compression support during repack derp
- fix cleanup on successful flash not working due to double match from cleanuponabort
2017-12-03 08:50:51 -04:00
osm0sis 65019b0f49 Backend: fix -debugging functionality on abort, clean up abort 2017-09-22 00:18:31 -03:00
osm0sis e6d3b4271e Backend: miscellaneous fixes
- fix busybox getting permissions on some devices where chmod does not accept -R to recurse
- use busybox for more possibly non-standard broken recovery shell commands
- silence some more generally expected/inconsequential stderr
2017-08-20 01:00:45 -03:00
Chris Renshaw db7cb4f306 Backend: fix module copying on devices with links
- symlinks under /system/lib/modules were getting broken, so follow them instead to replace the target file, avoiding issues with multiple versions of the same module and running out of free space (e.g. OnePlus devices link /system/lib/modules/wlan.ko to /system/lib/modules/qca_cld3/qca_cld3_wlan.ko)
- set contexts on copied modules (following symlinks) to system_file to avoid SELinux issues where unlabeled module files might not be allowed to load
2017-08-14 02:46:18 -03:00
osm0sis c4d0ed8f9c Backend: add developer option to create a debugging archive
- to make it easier to diagnose issues with patches, image creation or flashing, adding "-debugging" to the end of the AK2 zip filename will enable the creation of a tar.gz of the entire /tmp directory after the installation process (but before cleanup, of course), this includes recovery.log, boot.img, boot-new.img and any other remnants to allow more thorough, direct debugging at a later time
2017-05-28 18:44:46 -03:00
osm0sis 633e042fc6 AK2+Backend: tidy up remaining intentional stderr
- no need to see these when there is an expected error during normal use
2017-05-26 22:57:13 -03:00
osm0sis 2fcc7e6c21 Backend: don't check anykernel.sh before it's been extracted
- if it does not exist yet (i.e. hasn't been extracted) then assume cleanuponabort=1 since there wouldn't be anything to see on a failed extraction
- hide any missing file errors from file_getprop here now that we've taken care of that case
2017-05-26 22:30:54 -03:00
osm0sis 9e3135e8d9 Backend: ensure we've got a POSIX accepting chown via our busybox
- per https://github.com/osm0sis/AnyKernel2/pull/10#issuecomment-283771783
2017-03-02 16:35:38 -04:00
axxx007xxxz aaef99b696 META-INF: update-binary: Remove deprecated chown command
"Some older scripts may still use ‘.’ in place of the ‘:’ separator. POSIX 1003.1-2001 does not require support for that, but for backward compatibility GNU chown supports ‘.’ so long as no ambiguity results. New scripts should avoid the use of ‘.’ because it is not portable, and because it has undesirable results if the entire owner‘.’group happens to identify a user whose name contains ‘.’."
Source: http://gnu.org/software/coreutils/manual/html_node/chown-invocation.html#chown-invocation.
2017-03-02 21:10:31 +01:00
osm0sis b663e79a19 Backend: remove init.d directory creation
- fairly pointless and seemed to confuse new adopters, who thought it alone added init.d support to a ROM
2017-02-27 16:11:35 -04:00
axxx007xxxz f7992be0a3 Introduce cleanuponabort
This option allow to remove the working directory in case of abort; disabled by default.
2017-02-27 16:06:04 -04:00
axxx007xxxz 2129ee98e2 META-INF: update-binary: Clean up before starting the flashing process
In this way if there were files left from previous installations they get deleted.
2017-02-27 16:06:03 -04:00