module: mount within zygote

This commit is contained in:
j-hc 2025-02-03 19:37:00 +03:00
parent e89f71c1ae
commit a67c68b8f7
No known key found for this signature in database
GPG Key ID: CDF97F1DBFE904CD
3 changed files with 27 additions and 16 deletions

20
revanced-magisk/common.sh Normal file
View File

@ -0,0 +1,20 @@
#!/system/bin/sh
if type nsenter >/dev/null 2>/dev/null; then
ZPID=$(pidof zygote)
Z64PID=$(pidof zygote64)
mm() {
if [ "$ZPID" ]; then nsenter -t "$ZPID" -m -- "$@" || return $?; fi
if [ "$Z64PID" ]; then nsenter -t "$Z64PID" -m -- "$@" || return $?; fi
}
else
mm() { "$@"; }
fi
pmex() {
OP=$(pm "$@" 2>&1 </dev/null)
RET=$?
echo "$OP"
return $RET
}

View File

@ -1,4 +1,5 @@
. "$MODPATH/config" . "$MODPATH/config"
. "$MODPATH/common.sh"
ui_print "" ui_print ""
if [ -n "$MODULE_ARCH" ] && [ "$MODULE_ARCH" != "$ARCH" ]; then if [ -n "$MODULE_ARCH" ] && [ "$MODULE_ARCH" != "$ARCH" ]; then
@ -19,10 +20,6 @@ RVPATH=/data/adb/rvhc/${MODPATH##*/}.apk
set_perm_recursive "$MODPATH/bin" 0 0 0755 0777 set_perm_recursive "$MODPATH/bin" 0 0 0755 0777
if su -M -c true >/dev/null 2>/dev/null; then
alias mm='su -M -c'
else alias mm='nsenter -t1 -m'; fi
mm grep -F "$PKG_NAME" /proc/mounts | while read -r line; do mm grep -F "$PKG_NAME" /proc/mounts | while read -r line; do
ui_print "* Un-mount" ui_print "* Un-mount"
mp=${line#* } mp=${mp%% *} mp=${line#* } mp=${mp%% *}
@ -30,13 +27,6 @@ mm grep -F "$PKG_NAME" /proc/mounts | while read -r line; do
done done
am force-stop "$PKG_NAME" am force-stop "$PKG_NAME"
pmex() {
OP=$(pm "$@" 2>&1 </dev/null)
RET=$?
echo "$OP"
return $RET
}
if ! pmex path "$PKG_NAME" >&2; then if ! pmex path "$PKG_NAME" >&2; then
if pmex install-existing "$PKG_NAME" >&2; then if pmex install-existing "$PKG_NAME" >&2; then
BASEPATH=$(pmex path "$PKG_NAME") || abort "ERROR: pm path failed $BASEPATH" BASEPATH=$(pmex path "$PKG_NAME") || abort "ERROR: pm path failed $BASEPATH"

View File

@ -2,6 +2,7 @@
MODDIR=${0%/*} MODDIR=${0%/*}
RVPATH=/data/adb/rvhc/${MODDIR##*/}.apk RVPATH=/data/adb/rvhc/${MODDIR##*/}.apk
. "$MODDIR/config" . "$MODDIR/config"
. "$MODDIR/common.sh"
err() { err() {
[ ! -f "$MODDIR/err" ] && cp "$MODDIR/module.prop" "$MODDIR/err" [ ! -f "$MODDIR/err" ] && cp "$MODDIR/module.prop" "$MODDIR/err"
@ -11,7 +12,7 @@ err() {
until [ "$(getprop sys.boot_completed)" = 1 ]; do sleep 1; done until [ "$(getprop sys.boot_completed)" = 1 ]; do sleep 1; done
until [ -d "/sdcard/Android" ]; do sleep 1; done until [ -d "/sdcard/Android" ]; do sleep 1; done
while while
BASEPATH=$(pm path "$PKG_NAME" 2>&1 </dev/null) BASEPATH=$(pmex path "$PKG_NAME")
SVCL=$? SVCL=$?
[ $SVCL = 20 ] [ $SVCL = 20 ]
do sleep 2; done do sleep 2; done
@ -24,7 +25,7 @@ run() {
sleep 4 sleep 4
BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*} BASEPATH=${BASEPATH##*:} BASEPATH=${BASEPATH%/*}
if [ ! -d "$BASEPATH/lib" ]; then # TODO: is this ok? idk if [ ! -d "$BASEPATH/lib" ]; then
ls -Zla "$BASEPATH" >"$MODDIR/log.txt" ls -Zla "$BASEPATH" >"$MODDIR/log.txt"
ls -Zla "$BASEPATH/lib" >>"$MODDIR/log.txt" ls -Zla "$BASEPATH/lib" >>"$MODDIR/log.txt"
else rm "$MODDIR/log.txt" >/dev/null 2>&1; fi else rm "$MODDIR/log.txt" >/dev/null 2>&1; fi
@ -33,15 +34,15 @@ run() {
err "version mismatch (installed:${VERSION}, module:$PKG_VER)" err "version mismatch (installed:${VERSION}, module:$PKG_VER)"
return return
fi fi
grep "$PKG_NAME" /proc/mounts | while read -r line; do mm grep "$PKG_NAME" /proc/mounts | while read -r line; do
mp=${line#* } mp=${mp%% *} mp=${line#* } mp=${mp%% *}
umount -l "${mp%%\\*}" mm umount -l "${mp%%\\*}"
done done
if ! chcon u:object_r:apk_data_file:s0 "$RVPATH"; then if ! chcon u:object_r:apk_data_file:s0 "$RVPATH"; then
err "apk not found" err "apk not found"
return return
fi fi
mount -o bind "$RVPATH" "$BASEPATH/base.apk" mm mount -o bind "$RVPATH" "$BASEPATH/base.apk"
am force-stop "$PKG_NAME" am force-stop "$PKG_NAME"
[ -f "$MODDIR/err" ] && mv -f "$MODDIR/err" "$MODDIR/module.prop" [ -f "$MODDIR/err" ] && mv -f "$MODDIR/err" "$MODDIR/module.prop"
} }