Skip to content

feat: Add NoMount only mode for root mounts - #1281

Merged
MarcaDian merged 4 commits into
MorpheApp:devfrom
craftingmod:nomount-mount
Oct 26, 2026
Merged

MarcaDian merged 4 commits into
MorpheApp:devfrom
craftingmod:nomount-mount

Conversation

@craftingmod

Copy link
Copy Markdown
Contributor

Description

nomount_only

NoMount only - Never use bind mounts for root apps. If NoMount is unavailable, mounting fails.

On #1271 implementation, nomount is still using old bind method fallback and causes Duck Detector mount trigger as dirty mounts.

This PR tries to seperate mount/bind fallback mode and nomount only mode, which could be useful for clean mount & jailbreak mode.

Tested environment

  • Device: Galaxy S25 Edge
  • KernelSU: samsung-v2.2 with Jailbreak mode (DirtyFrag root)
  • NoMount: v2.2.0

Related issues

Harden #1271 with referenced #1022 issue.
Reference #433 - support Jailbreak environment with nomount.

@craftingmod craftingmod changed the title feat: choosable no bind - nomount only in install settings feat: choosable nomount only(no bind) in install settings Oct 25, 2026
@MarcaDian MarcaDian changed the title feat: choosable nomount only(no bind) in install settings feat: Add NoMount only mode for root mounts Oct 26, 2026
@MarcaDian

Copy link
Copy Markdown
Contributor

@craftingmod thanks for the PR! I pushed a follow-up commit a070604 on top of your branch, could you test it on your device?

  • In NoMount only mode the preinstalled system copy is now redirected to the stock APK with an unscoped NoMount rule (PackageManager scans it from system_server), instead of skipping that stock mount entirely. The /data/app stock mount is still skipped.
  • The NoMount only checks in service.sh are now just two not_mounted lines in redirect_patched, and the unreachable watch branch is gone.
  • mount() is flattened (redirect, then the strict error, otherwise bind), and uninstall() drops the stock redirect rules before removing the module.
  • The toggle is hidden on Magisk. The Korean strings were removed because translations come through Crowdin.

Please check after a reboot that post-fs-data.log shows the system copy redirect, nm rule list lists both rules, and the app keeps its update with nothing in the mount table. Duck Detector results would be great too.

Refs #1271

…nt-mount

# Conflicts:
#	app/src/main/java/app/morphe/manager/domain/installer/RootInstaller.kt
@craftingmod

craftingmod commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor Author

Thanks to harden patch!

Feedback Setup

My root setup uses jailbreak mode (DFRoot) and doesn't survive KernelSU on full reboot.
So include log with soft reboot, but I've also tested on hard reboot -> jailbreak and morphe module is still working well like soft reboot.
Hard reboot -> no modification should be test on bootloader unlocked hardware.

post-fs-data.log

Skipping stock mount over /data/app/~~XEAZ5vG_IREwLTNxqS4KXw==/com.google.android.youtube-dQcUHtJ2W6B6WYB2diWVBQ==/base.apk; NoMount redirects it
Redirected stock APK over /product/app/YouTube/YouTube.apk with NoMount

nm rule list

/product/app/YouTube/YouTube.apk -> /data/adb/modules/com.google.android.youtube-morphe/com.google.android.youtube-stock.apk
/data/app/~~XEAZ5vG_IREwLTNxqS4KXw==/com.google.android.youtube-dQcUHtJ2W6B6WYB2diWVBQ==/base.apk -> /data/adb/modules/com.google.android.youtube-morphe/com.google.android.youtube.apk [UID: 0-4294967295 excl 1000]

Duck

duck

I've detected from other reasons(not related in morphe) but mount is very clean :)

@MarcaDian

Copy link
Copy Markdown
Contributor

Thanks for testing! The logs and the rule list look exactly as intended, and soft reboot covers the PackageManager scan, so this is good to go from our side. The hard reboot without jailbreak can be checked later on unlocked hardware, the mode is off by default anyway.

@MarcaDian
MarcaDian merged commit 2da2642 into MorpheApp:dev Oct 26, 2026
1 check passed
github-actions Bot pushed a commit that referenced this pull request Oct 26, 2026
# [2.3.0-dev.2](v2.3.0-dev.1...v2.3.0-dev.2) (2026-10-26)

### Features

* Add NoMount only mode for root mounts ([#1281](#1281)) ([2da2642](2da2642))
* Restyle source cards to match the home app cards ([a8c7570](a8c7570))

### Performance Improvements

* Reduce the app size ([a6bd84a](a6bd84a))
github-actions Bot pushed a commit that referenced this pull request Oct 30, 2026
# [2.3.0](v2.2.0...v2.3.0) (2026-10-30)

### Bug Fixes

* Check a path option with the patch for the app being patched when patches share a name ([f7e2b25](f7e2b25))
* Drop repeated wording from dialogs ([1371e0e](1371e0e))
* Extra gap above the info panel in expanded source cards ([73f3221](73f3221))
* Keep a remote source on the branch it was added from ([3775bdb](3775bdb))
* Keep patching where the system refuses the patcher a foreground service ([38fa6b7](38fa6b7))
* Keep picking and saving files working where the system has no screen for them ([609ebc6](609ebc6))
* Keep restored patch selections as saved ([167492e](167492e))
* Keep the patcher process in the foreground during a run ([7097623](7097623))
* Keep the saved selection of a source the app is kept from after patching ([4e173b8](4e173b8))
* Log why the patcher JVM failed to start ([9ea4626](9ea4626))
* Patch on JDK 25 in 64-bit processes, keeping JDK 17 for 32-bit ARM ([#1302](#1302)) ([5645434](5645434))
* Record installs that finish after leaving the patcher screen ([7c8e86c](7c8e86c))
* Restore selections of sources a backup adds on the first import ([2c1ae90](2c1ae90))
* Restore the stock app of a mount from the split archive's own modules ([#1283](#1283)) ([a85dce6](a85dce6))
* Select apps across groups in the grouped home view ([f0953d6](f0953d6))
* Smooth out the alerts room on page switches ([005d858](005d858))
* Support patches that load bundled Android native libraries in the embedded JVM ([e785b35](e785b35))
* Turn off experimental app versions when leaving pre-release patches ([5b62a1c](5b62a1c))

### Features

* Add NoMount only mode for root mounts ([#1281](#1281)) ([2da2642](2da2642))
* Add patch sources from a docked panel ([7c89419](7c89419))
* Allow auto-install after patching together with the installer selection prompt ([5405fe1](5405fe1))
* Animate panel actions as they come and go ([06bc2ce](06bc2ce))
* Ask about experimental app versions once per app ([d139099](d139099))
* Bring back the community patches button in the add source dialog ([e5505ad](e5505ad))
* Change the link of a source that could not download ([122ddbe](122ddbe))
* Check patch option paths with the patch's own validator before patching ([9d5eee0](9d5eee0))
* Compare signing keys side by side and copy the key on tap ([ed81054](ed81054))
* Date and sort sources by their release ([02352b0](02352b0))
* Detach mounted apps from Play Store with zygisk-detach ([#1292](#1292)) ([c1f7b47](c1f7b47))
* Fall back to the official patches signing key ([#1288](#1288)) ([deaaf5f](deaaf5f))
* Keep patch selections as named sets ([b4bce2e](b4bce2e))
* List the import modes as the APK source choice does ([22b24a4](22b24a4))
* Mark apps a source adds later with a badge ([b375f81](b375f81))
* Move reorder controls into the page header ([2e7694d](2e7694d))
* Move saved APK actions into a menu ([58f86e4](58f86e4))
* Name every icon-only button in a tooltip on a long press ([1786e47](1786e47))
* Open the installed app from its patches dialog ([75dd12e](75dd12e))
* Patch from the source picked for the APK alone, with the others a tap away ([49a896e](49a896e))
* Pre-release switch when adding a source ([405e56c](405e56c))
* Refine source card states and scroll long lines ([7df5e83](7df5e83))
* Remember the batch install policy between queues ([055e011](055e011))
* Restore a mount a store update replaced from the copies its root module keeps ([#1306](#1306)) ([c41ac9b](c41ac9b))
* Restyle source cards to match the home app cards ([a8c7570](a8c7570))
* Separate select all and deselect all buttons in the selection panel ([b1fe92e](b1fe92e))
* Show APK sources as cards in the Select APK dialog ([5756944](5756944))
* Show the community notice until it is agreed to ([9f88bcd](9f88bcd))
* Switch pre-release patches and experimental app versions for selected sources ([83fbbea](83fbbea))
* Verify patch bundle signatures and pin the signing key ([eaceab3](eaceab3))

### Performance Improvements

* Reduce the app size ([a6bd84a](a6bd84a))
* Skip downloading a release already refused for its signer ([19709a3](19709a3))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants