mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-20 07:28:29 +00:00
The long awaited vendor mount fix
This commit is contained in:
parent
7877ac0c3b
commit
3c7e865555
@ -55,6 +55,30 @@ unblock() {
|
|||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bind_mount() {
|
||||||
|
if [ -e "$1" -a -e "$2" ]; then
|
||||||
|
mount -o bind "$1" "$2" || log_print "Mount Fail: $1 -> $2"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
loopsetup() {
|
||||||
|
LOOPDEVICE=
|
||||||
|
for DEV in `ls /dev/block/loop*`; do
|
||||||
|
if losetup $DEV $1; then
|
||||||
|
LOOPDEVICE=$DEV
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
target_size_check() {
|
||||||
|
e2fsck -p -f "$1"
|
||||||
|
curBlocks=`e2fsck -n $1 2>/dev/null | cut -d, -f3 | cut -d\ -f2`;
|
||||||
|
curUsedM=$((`echo "$curBlocks" | cut -d/ -f1` * 4 / 1024));
|
||||||
|
curSizeM=$((`echo "$curBlocks" | cut -d/ -f2` * 4 / 1024));
|
||||||
|
curFreeM=$((curSizeM - curUsedM));
|
||||||
|
}
|
||||||
|
|
||||||
run_scripts() {
|
run_scripts() {
|
||||||
BASE=$MOUNTPOINT
|
BASE=$MOUNTPOINT
|
||||||
for MOD in $BASE/* ; do
|
for MOD in $BASE/* ; do
|
||||||
@ -77,53 +101,40 @@ run_scripts() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
loopsetup() {
|
|
||||||
LOOPDEVICE=
|
|
||||||
for DEV in `ls /dev/block/loop*`; do
|
|
||||||
if losetup $DEV $1; then
|
|
||||||
LOOPDEVICE=$DEV
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
target_size_check() {
|
|
||||||
e2fsck -p -f "$1"
|
|
||||||
curBlocks=`e2fsck -n $1 2>/dev/null | cut -d, -f3 | cut -d\ -f2`;
|
|
||||||
curUsedM=$((`echo "$curBlocks" | cut -d/ -f1` * 4 / 1024));
|
|
||||||
curSizeM=$((`echo "$curBlocks" | cut -d/ -f2` * 4 / 1024));
|
|
||||||
curFreeM=$((curSizeM - curUsedM));
|
|
||||||
}
|
|
||||||
|
|
||||||
travel() {
|
travel() {
|
||||||
# Ignore /system/vendor, we will handle it differently
|
|
||||||
[ "$1" = "system/vendor" ] && return
|
|
||||||
|
|
||||||
cd "$TRAVEL_ROOT/$1"
|
cd "$TRAVEL_ROOT/$1"
|
||||||
if [ -f .replace ]; then
|
if [ -f .replace ]; then
|
||||||
|
log_print "Replace: /$1"
|
||||||
rm -rf "$MOUNTINFO/$1"
|
rm -rf "$MOUNTINFO/$1"
|
||||||
mktouch "$MOUNTINFO/$1" "$TRAVEL_ROOT"
|
mktouch "$MOUNTINFO/$1" "$TRAVEL_ROOT"
|
||||||
else
|
else
|
||||||
for ITEM in * ; do
|
for ITEM in * ; do
|
||||||
# This means it an empty folder (shouldn't happen, but better to be safe)
|
# This means it's an empty folder (shouldn't happen, but better to be safe)
|
||||||
[ "$ITEM" = "*" ] && return;
|
[ "$ITEM" = "*" ] && return
|
||||||
|
# Ignore /system/vendor since we will handle it differently
|
||||||
|
[ "$1" = "system" -a "$ITEM" = "vendor" ] && continue
|
||||||
|
|
||||||
# Target not found or target/file is a symlink
|
# Target not found or target/file is a symlink
|
||||||
if [ ! -e "/$1/$ITEM" -o -L "/$1/$ITEM" -o -L "$ITEM" ]; then
|
if [ ! -e "/$1/$ITEM" -o -L "/$1/$ITEM" -o -L "$ITEM" ]; then
|
||||||
# If we are in a higher level, delete the lower levels
|
# If we are in a higher level, delete the lower levels
|
||||||
rm -rf "$MOUNTINFO/dummy/$1" 2>/dev/null
|
rm -rf "$MOUNTINFO/dummy/$1" 2>/dev/null
|
||||||
# Mount the dummy parent
|
# Mount the dummy parent
|
||||||
|
log_print "Replace with dummy: /$1"
|
||||||
mktouch "$MOUNTINFO/dummy/$1"
|
mktouch "$MOUNTINFO/dummy/$1"
|
||||||
|
|
||||||
if [ -d "$ITEM" ]; then
|
if [ -L "$ITEM" ]; then
|
||||||
# Create new dummy directory and mount it
|
|
||||||
mkdir -p "$DUMMDIR/$1/$ITEM"
|
|
||||||
mktouch "$MOUNTINFO/$1/$ITEM" "$TRAVEL_ROOT"
|
|
||||||
elif [ -L "$ITEM" ]; then
|
|
||||||
# Copy symlinks
|
# Copy symlinks
|
||||||
|
log_print "Symlink: /$1/$ITEM"
|
||||||
mkdir -p "$DUMMDIR/$1" 2>/dev/null
|
mkdir -p "$DUMMDIR/$1" 2>/dev/null
|
||||||
cp -afc "$ITEM" $"DUMMDIR/$1/$ITEM"
|
cp -afc "$ITEM" $"DUMMDIR/$1/$ITEM"
|
||||||
|
elif [ -d "$ITEM" ]; then
|
||||||
|
# Create new dummy directory and mount it
|
||||||
|
log_print "New directory: /$1/$ITEM"
|
||||||
|
mkdir -p "$DUMMDIR/$1/$ITEM"
|
||||||
|
mktouch "$MOUNTINFO/$1/$ITEM" "$TRAVEL_ROOT"
|
||||||
else
|
else
|
||||||
# Create new dummy file and mount it
|
# Create new dummy file and mount it
|
||||||
|
log_print "New file: /$1/$ITEM"
|
||||||
mktouch "$DUMMDIR/$1/$ITEM"
|
mktouch "$DUMMDIR/$1/$ITEM"
|
||||||
mktouch "$MOUNTINFO/$1/$ITEM" "$TRAVEL_ROOT"
|
mktouch "$MOUNTINFO/$1/$ITEM" "$TRAVEL_ROOT"
|
||||||
fi
|
fi
|
||||||
@ -133,6 +144,7 @@ travel() {
|
|||||||
(travel "$1/$ITEM")
|
(travel "$1/$ITEM")
|
||||||
elif [ ! -L "$ITEM" ]; then
|
elif [ ! -L "$ITEM" ]; then
|
||||||
# Mount this file
|
# Mount this file
|
||||||
|
log_print "Replace: /$1/$ITEM"
|
||||||
mktouch "$MOUNTINFO/$1/$ITEM" "$TRAVEL_ROOT"
|
mktouch "$MOUNTINFO/$1/$ITEM" "$TRAVEL_ROOT"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -164,24 +176,16 @@ clone_dummy() {
|
|||||||
else
|
else
|
||||||
mktouch "$DUMMDIR$REAL"
|
mktouch "$DUMMDIR$REAL"
|
||||||
fi
|
fi
|
||||||
[ ! -e "$MOUNTINFO$REAL" ] && mktouch "$MOUNTINFO/mirror$REAL"
|
if [ ! -e "$MOUNTINFO$REAL" ]; then
|
||||||
|
log_print "Clone skeleton: $REAL"
|
||||||
|
mktouch "$MOUNTINFO/mirror$REAL"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
bind_mount() {
|
|
||||||
if [ -e "$1" -a -e "$2" ]; then
|
|
||||||
mount -o bind "$1" "$2"
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
log_print "Mount: $1"
|
|
||||||
else
|
|
||||||
log_print "Mount Fail: $1"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
merge_image() {
|
merge_image() {
|
||||||
if [ -f $1 ]; then
|
if [ -f $1 ]; then
|
||||||
log_print "$1 found"
|
log_print "$1 found"
|
||||||
@ -396,6 +400,7 @@ case $1 in
|
|||||||
# Travel through all mods
|
# Travel through all mods
|
||||||
for MOD in $MOUNTPOINT/* ; do
|
for MOD in $MOUNTPOINT/* ; do
|
||||||
if [ -f $MOD/auto_mount -a -d $MOD/system -a ! -f $MOD/disable ]; then
|
if [ -f $MOD/auto_mount -a -d $MOD/system -a ! -f $MOD/disable ]; then
|
||||||
|
log_print "Analyzing module: $MOD"
|
||||||
TRAVEL_ROOT=$MOD
|
TRAVEL_ROOT=$MOD
|
||||||
(travel system)
|
(travel system)
|
||||||
rm -f $MOD/vendor 2>/dev/null
|
rm -f $MOD/vendor 2>/dev/null
|
||||||
|
Loading…
x
Reference in New Issue
Block a user