github Hybrid-Mount/meta-hybrid_mount v5.0.0

6 hours ago

v5.0.0

Features

  • Add custom bind mounts

  • Require clean reinstall for legacy upgrades

  • Support KernelSU late-load (jailbreak) mode Ported from Tools-cx-app/meta-magic_mount-rs 00f525ce and adapted to Hybrid Mount's mount model: remove install/startup refusal, add module/emulated-soft-reboot.sh plus hybrid-mount emulated-soft-reboot, detach the previous run's mounts before KernelSU's emulated soft reboot re-runs metamount.sh, and self-heal at startup when KSU_LATE_LOAD=1. Co-authored-by: Tools-cx-app localhost.hutao@gmail.com

  • i18n Add Turkish translation aligned with dev Adapted from Tools-cx-app/meta-magic_mount-rs d70c151 to dev's locale schema: drop entries for suspended Kasumi/experimental features, add translations for the new compatibility/custom-mount keys, and register tr-TR in the language selector. Co-authored-by: MrRaita seyfettin.ozviran@protonmail.com

  • observability Add low-overhead stage latency logging Add StageTimer records for coarse boot/mount stages ([latency] scope=..., stage=..., status=ok, elapsed_us=...) and HYBRID_MOUNT_LOG_LEVEL (default info; debug restores per-module and per-mount details).

Fixes

  • Update default overlay mode to ext4 in configuration

  • Harden webui daemon transport

  • Strengthen filesystem persistence paths

  • Report directory scan errors

  • Improve module shell parsing

  • daemon Track sse clients by registry

  • Harden daemon state updates

  • webui Guard concurrent config saves

  • Fix an issue where a regular file overwrite was incorrectly promoted to a tmpfs mount for the entire directory for magic_mount.

  • Fix mount gap for magic_mount make private should be recursively, and fixed native detector mount gap. Co-authored-by: 947409161 947409161@qq.com Tested-by: 947409161 947409161@qq.com

  • Restore maintenance checks

  • Fix moduledir is tempdir YuzakiKokuban is so stupid

  • Restore Android target build

  • webui Keep TypeScript within lint support

  • Support Kasumi protocol v16 status output (#374) ## Summary - treat unsupported legacy fix_mounts as an optional Kasumi operation - skip known protocol v16 feature-status records in rule listings - keep unknown records and valid lowercase path rules strict ## Root cause Kasumi protocol v16 returns EOPNOTSUPP for the legacy KSM_IOC_REORDER_MNT_ID ioctl and appends records such as stealth enabled and selinux_fix enabled to rule listings. Runtime configuration was applied successfully, but userspace reported failure during fix_mounts or status refresh. ## Validation - Android arm64 full release build - Android arm64 Clippy for all targets with -D warnings - Android arm64 test targets compiled with cargo ndk ... test --no-run - Pixel 9 Pro: runtime config apply returns applied: true, rule listing succeeds, Kasumi remains available

  • Correct finit_module syscall number for aarch64 (273 not 379) (#368) Bug: SYS_FINIT_MODULE_NUM was hardcoded as 379 for both ARM (32-bit) and aarch64 (64-bit). Effect: On all aarch64 devices, loading the Kasumi LKM fails with ENOSYS (Function not implemented) because syscall 379 doesn't exist on aarch64 — the correct number is 273 per the generic syscall table (asm-generic/unistd.h). Fix: Split the cfg gates — aarch64273, arm379 (unchanged). Ref:https://github.com/torvalds/linux/blob/master/include/uapi/asm-generic/unistd.h#L663

  • Tolerate incomplete module directories (#372) ## Summary - skip module directories without a regular module.prop during boot discovery - apply the same behavior to the WebUI module-list API - add focused regression tests for valid modules next to an incomplete directory Fixes #367. ## Root cause b18fe7f changed module discovery so any directory under /data/adb/modules without a regular module.prop aborted the entire scan. On the affected device, /data/adb/modules/TA_utl is a residual directory without module.prop. That prevented both boot mounting and the WebUI module page from processing unrelated valid modules. ## Behavior Directories without a regular module.prop are logged and skipped. Existing regular module.prop files are still validated, so malformed module IDs remain errors. ## Validation - Android arm64 full feature check - Android arm64 Clippy for all targets with -D warnings - regression coverage for boot discovery and WebUI module listing - Pixel 9 Pro cold reboot: metamodule starts automatically and OverlayFS targets contain the expected module files

  • Prevent non-GKI KMI status failures from blocking daemon startup (#376) ## Summary - keep Kasumi runtime status collection working when a vendor kernel release has no -androidNN- KMI segment - allow the daemon to start with default state only when daemon_state.json is missing - keep malformed, inaccessible, or otherwise invalid runtime state errors fatal - add regression coverage for standard GKI and Sony-style vendor kernel releases ## Root cause On a Sony XQ-DQ72 running kernel 5.15.207-g3ddad1147e36, OverlayFS mounts completed successfully, but runtime finalization still collected Kasumi telemetry while Kasumi was disabled. lkm::current_kmi() rejected the vendor release because it has no -androidNN- segment, causing the metamodule mount script to exit with status 1 before daemon_state.json was written. The WebUI then attempted to wake the daemon. The daemon treated the missing runtime state file as fatal and exited before binding /data/adb/hybrid-mount/run/daemon.sock, so the user only saw the secondary 3-second socket timeout. ## Behavior current_kmi() remains strict for actual LKM selection and loading. Only the optional runtime status field falls back to an empty KMI with a warning, so non-GKI kernels are not mapped to an arbitrary prebuilt module. Daemon recovery is limited to NotFound. Corrupt JSON, permission failures, and other state errors still fail with context. Full non-GKI manual KMI selection through the LKM status/WebUI flow is intentionally out of scope for this PR. ## Validation - cargo fmt --all -- --check - Android arm64 cargo check --target aarch64-linux-android --all-features --tests - Android arm64 cargo clippy --target aarch64-linux-android --all-features --tests -- -D warnings - Android arm64 control-plane-only check - Android arm64 no-default-features check

  • Restore legacy config compatibility

  • webui Tolerate CRLF in generated protocol check

  • webui Pin typescript to 6.x for eslint compatibility

  • late-load Make stale mount cleanup best-effort

  • Tolerate non-directory entries in module discovery Port the tolerance from codex/fix-recent-issues (6c1b51b): stray files next to module directories no longer abort boot scanning or the WebUI module list. Directories without a regular module.prop are still skipped, and real modules keep strict ID/prop validation. Co-authored-by: 由崎黑板 94628337+YuzakiKokuban@users.noreply.github.com

  • Harden runtime and release pipeline

  • daemon Make config update semantics reboot-aware Config changes are persisted for the next boot after the Kasumi backend removal. The daemon now reports applied/reboot_required for set/patch/reset, the WebUI surfaces a reboot-required notice instead of pretending changes apply live, and README/locales are aligned. Adds an Indonesian README translation.

  • http Harden WebUI HTTP request parsing Strictly match the /rpc route, reject duplicate or missing Content-Length, accept only digit-only length values, and reject unsupported Transfer-Encoding. Adds regression tests for each case.

  • uninstall Stop daemon and detach owned mounts before cleanup Uninstall now best-effort stops the resident daemon, detaches Hybrid Mount-owned mounts via emulated-soft-reboot, falls back to killing the recorded PID, and skips CLI calls for the Nano flavor.

  • ci Run shellcheck steps with bash The lints job has no bash default shell, so the new ShellCheck step failed on 'set -o pipefail' under sh.

Performance

  • core Reduce mount filesystem overhead

  • webui Streamline saves and route loading

  • modules Cache scans and split API code

  • Add mount pipeline metrics

  • Materialize overlay paths on demand

  • Scan module markers in one pass

  • Reuse module inventory snapshot

  • Coalesce batch runtime refreshes

  • Cache kasumi runtime probes

  • webui Update config fields locally

  • Trim runtime dependencies

Refactors

  • Centralize runtime cache invalidation

  • webui Remove unused config save path

  • Remove legacy compatibility paths

  • Suspend Kasumi and full distribution

  • Remove Kasumi and make Lite the default release - Drop Kasumi backend, LKM packaging, CLI/daemon/API surface, and docs - Make Lite the default release; Nano unchanged; legacy kasumi configs map to magic - Serve a valid idle daemon state so the WebUI shows 'not mounted' instead of validation errors - Fix release workflow for the new Lite zip naming and update.json sync

Documentation

  • Align verification guidance

  • Document late-load (jailbreak) support

  • changelog Record unreleased fixes and CI improvements

Tests

  • Model SELinux xattrs in Linux fixtures

  • Use writable opaque xattr on Linux

CI / Tooling

  • Validate project license boundaries

  • Add supply-chain gates and publish release checksums Add ShellCheck and dependency-audit workflows, verify ZIP contents for both flavors in build CI, attach SHA256SUMS to GitHub and KernelSU-Repo releases, and stop prerelease tags from overwriting main's update.json to avoid versionCode collisions.

Maintenance

  • Sync upstream module updates and switch to GPL-3 Sync selected upstream module installer behavior, improve daemon WebUI error handling, and switch project licensing metadata and headers to GPL-3.0-only while leaving webui licensing untouched. Co-authored-by: Tools-cx-app localhost.hutao@gmail.com

  • Revert "style: update layout and styling for navigation and status components" This reverts commit 7d36dbc.

  • Version SSE events and generate protocol types

  • Improve local verification tooling

  • Pin git dependencies

  • Remove orphaned kasumi and mirror-sync modules These files were left behind by the Kasumi removal and are not wired into the module graph. mirror_sync.rs additionally referenced a sync_dir helper that no longer exists.

Other

  • Update layout and styling for navigation and status components

  • Classify daemon command metadata

  • Defer SSE connection until subscribed

  • Add Turkish (tr) translation support. (#379) Since my native language wasn't available in the WebUI, it felt a bit unusual to use. That's why I decided to localize it into Turkish. I hope you accept it. Thanks... (cherry picked from commit d70c151)

  • Add Turkish README localization. (#380) (cherry picked from commit da28a72)

  • Add README_TR.md links to the two required sections (#381) (cherry picked from commit 019799f)

Don't miss a new meta-hybrid_mount release

NewReleases is sending notifications on new releases.