Backend: APEX mounts support improvements
This commit is contained in:
1 file changed
+48
-45
@@ -57,9 +57,11 @@ setup_mountpoint() {
|
|||||||
}
|
}
|
||||||
is_mounted() { $bb mount | $bb grep -q " $1 "; }
|
is_mounted() { $bb mount | $bb grep -q " $1 "; }
|
||||||
umount_all() {
|
umount_all() {
|
||||||
($BOOTMODE || umount_apex;
|
(if ! $BOOTMODE; then
|
||||||
$bb umount /system;
|
umount_apex;
|
||||||
$bb umount -l /system;
|
$bb umount /system;
|
||||||
|
$bb umount -l /system;
|
||||||
|
fi;
|
||||||
if [ -e /system_root ]; then
|
if [ -e /system_root ]; then
|
||||||
$bb umount /system_root;
|
$bb umount /system_root;
|
||||||
$bb umount -l /system_root;
|
$bb umount -l /system_root;
|
||||||
@@ -72,55 +74,56 @@ umount_all() {
|
|||||||
fi) 2>/dev/null;
|
fi) 2>/dev/null;
|
||||||
}
|
}
|
||||||
mount_apex() {
|
mount_apex() {
|
||||||
[ -d /system/apex ] || return 1
|
test -d /system/apex || return 1;
|
||||||
[ -L /apex ] && rm -f /apex
|
local apex dest loop minorx num;
|
||||||
if [ -f "/system/apex/com.android.runtime.release.apex" ]; then
|
setup_mountpoint /apex;
|
||||||
local j=0
|
test -e /dev/block/loop1 && minorx=$(ls -l /dev/block/loop1 | $bb awk '{ print $6 }') || minorx=1;
|
||||||
[ -e /dev/block/loop1 ] && local minorx=$(ls -l /dev/block/loop1 | $bb awk '{print $6}') || local minorx=1
|
num=0;
|
||||||
for i in /system/apex/*.apex; do
|
for apex in /system/apex/*; do
|
||||||
local dest="/apex/$(basename $i | sed 's/.apex$//')"
|
dest=/apex/$(basename $apex .apex);
|
||||||
[ "$dest" == "/apex/com.android.runtime.release" ] && dest="/apex/com.android.runtime"
|
test "$dest" == /apex/com.android.runtime.release && dest=/apex/com.android.runtime;
|
||||||
mkdir -p $dest
|
mkdir -p $dest;
|
||||||
$bb unzip -qo $i apex_payload.img -d /apex
|
case $apex in
|
||||||
mv -f /apex/apex_payload.img $dest.img
|
*.apex)
|
||||||
while [ $j -lt 50 ]; do
|
$bb unzip -qo $apex apex_payload.img -d /apex;
|
||||||
loop=/dev/loop$j
|
$bb mv -f /apex/apex_payload.img $dest.img;
|
||||||
$bb mknod $loop b 7 $((j * minorx)) 2>/dev/null
|
$bb mount -t ext4 -o ro,noatime $dest.img $dest 2>/dev/null;
|
||||||
$bb losetup $loop $dest.img 2>/dev/null
|
if [ $? != 0 ]; then
|
||||||
j=$((j + 1))
|
while [ $num -lt 64 ]; do
|
||||||
$bb losetup $loop | grep -q $dest.img && break
|
loop=/dev/block/loop$num;
|
||||||
done;
|
($bb mknod $loop b 7 $((num * minorx));
|
||||||
uloop="$uloop $((j - 1))"
|
$bb losetup $loop $dest.img) 2>/dev/null;
|
||||||
$bb mount -t ext4 -o loop,noatime,ro $loop $dest || return 1
|
num=$((num + 1));
|
||||||
done
|
$bb losetup $loop | $bb grep -q $dest.img && break;
|
||||||
# Already extracted payload imgs present, just mount the folders
|
done;
|
||||||
elif [ -d "/system/apex/com.android.runtime.release" ]; then
|
$bb mount -t ext4 -o ro,loop,noatime $loop $dest;
|
||||||
for i in /system/apex/*; do
|
if [ $? != 0 ]; then
|
||||||
local dest="/apex/$(basename $i)"
|
$bb losetup -d $loop 2>/dev/null;
|
||||||
[ "$dest" == "/apex/com.android.runtime.release" ] && dest="/apex/com.android.runtime"
|
fi;
|
||||||
mkdir -p $dest
|
fi;
|
||||||
$bb mount -o bind,ro $i $dest
|
;;
|
||||||
done
|
*) $bb mount -o bind $apex $dest;;
|
||||||
fi
|
esac;
|
||||||
|
done;
|
||||||
}
|
}
|
||||||
umount_apex() {
|
umount_apex() {
|
||||||
[ -d /apex ] || return 1
|
test -d /apex || return 1;
|
||||||
for i in /apex/*; do
|
local dest loop;
|
||||||
$bb umount -l $i 2>/dev/null
|
for dest in $($bb find /apex -type d -mindepth 1 -maxdepth 1); do
|
||||||
done
|
if [ -f $dest.img ]; then
|
||||||
if [ -f "/system/apex/com.android.runtime.release.apex" ]; then
|
loop=$($bb mount | $bb grep $dest | $bb cut -d" " -f1);
|
||||||
for i in $uloop; do
|
fi;
|
||||||
local loop=/dev/loop$i
|
($bb umount -l $dest;
|
||||||
losetup -d $loop 2>/dev/null || break
|
$bb losetup -d $loop) 2>/dev/null;
|
||||||
done
|
done;
|
||||||
fi
|
rm -rf /apex;
|
||||||
rm -rf /apex
|
|
||||||
}
|
}
|
||||||
restore_env() {
|
restore_env() {
|
||||||
test "$savedpath" && export LD_LIBRARY_PATH="$savedpath";
|
test "$savedpath" && export LD_LIBRARY_PATH="$savedpath";
|
||||||
test "$savedpre" && export LD_PRELOAD="$savedpre";
|
test "$savedpre" && export LD_PRELOAD="$savedpre";
|
||||||
umount_all;
|
umount_all;
|
||||||
($bb mv -f /system_link /system;
|
($bb mv -f /apex_link /apex;
|
||||||
|
$bb mv -f /system_link /system;
|
||||||
$bb mv -f /system_root_link /system_root;
|
$bb mv -f /system_root_link /system_root;
|
||||||
$bb umount -l /dev/random) 2>/dev/null;
|
$bb umount -l /dev/random) 2>/dev/null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user