AK3: allow unpacking only specific vendor_ramdisk cpio
- introduce unpack_vendorrd <name|path> to allow only unpacking a specific VNDRBOOT v4+ sub-ramdisk - repack_ramdisk repacks any found unpacked VNDRBOOT v4+ sub-ramdisk and leaves others untouched
This commit is contained in:
1 file changed
+47
-26
+47
-26
@@ -142,7 +142,49 @@ split_boot() {
|
|||||||
cd $AKHOME;
|
cd $AKHOME;
|
||||||
}
|
}
|
||||||
|
|
||||||
# unpack_ramdisk (extract ramdisk only)
|
# unpack_vendorrd <name|path>
|
||||||
|
unpack_vendorrd() {
|
||||||
|
local comp cpio vndrname;
|
||||||
|
|
||||||
|
cd $SPLITIMG;
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
cpio=$1;
|
||||||
|
vndrname=$(basename $cpio .cpio);
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
platform) vndrname=ramdisk;;
|
||||||
|
*) vndrname=$1;;
|
||||||
|
esac;
|
||||||
|
if [ -f "vendor_ramdisk/$vndrname.cpio" ]; then
|
||||||
|
cpio=vendor_ramdisk/$vndrname.cpio;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
comp=$(magiskboot decompress $cpio 2>&1 | grep -v 'raw' | sed -n 's;.*\[\(.*\)\];\1;p');
|
||||||
|
if [ "$comp" ]; then
|
||||||
|
mv -f $cpio $cpio.$comp;
|
||||||
|
magiskboot decompress $cpio.$comp $cpio;
|
||||||
|
if [ $? != 0 ] && $comp --help 2>/dev/null; then
|
||||||
|
echo "Attempting $cpio unpack with busybox $comp..." >&2;
|
||||||
|
$comp -dc $cpio.$comp > $cpio;
|
||||||
|
fi;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
mkdir -p $VENDORRD/$vndrname;
|
||||||
|
chmod 755 $VENDORRD/$vndrname;
|
||||||
|
|
||||||
|
cd $VENDORRD/$vndrname;
|
||||||
|
EXTRACT_UNSAFE_SYMLINKS=1 cpio -d -F $SPLITIMG/$cpio -i;
|
||||||
|
if [ $? != 0 -o ! "$(ls)" ]; then
|
||||||
|
abort "Unpacking vendor ramdisk \"$vndrname\" failed. Aborting...";
|
||||||
|
fi;
|
||||||
|
if [ -d "$AKHOME/vrdtmp/$vndrname" ]; then
|
||||||
|
cp -af $AKHOME/vrdtmp/$vndrname/* .;
|
||||||
|
fi;
|
||||||
|
cd $VENDORRD;
|
||||||
|
}
|
||||||
|
|
||||||
|
# unpack_ramdisk (extract all ramdisks only)
|
||||||
unpack_ramdisk() {
|
unpack_ramdisk() {
|
||||||
local comp cpio vndrname;
|
local comp cpio vndrname;
|
||||||
|
|
||||||
@@ -181,32 +223,9 @@ unpack_ramdisk() {
|
|||||||
fi;
|
fi;
|
||||||
elif [ -d vendor_ramdisk ]; then
|
elif [ -d vendor_ramdisk ]; then
|
||||||
[ -d $VENDORRD ] && mv -f $VENDORRD $AKHOME/vrdtmp;
|
[ -d $VENDORRD ] && mv -f $VENDORRD $AKHOME/vrdtmp;
|
||||||
|
|
||||||
for cpio in vendor_ramdisk/*.cpio; do
|
for cpio in vendor_ramdisk/*.cpio; do
|
||||||
comp=$(magiskboot decompress $cpio 2>&1 | grep -v 'raw' | sed -n 's;.*\[\(.*\)\];\1;p');
|
unpack_vendorrd $cpio;
|
||||||
if [ "$comp" ]; then
|
|
||||||
mv -f $cpio $cpio.$comp;
|
|
||||||
magiskboot decompress $cpio.$comp $cpio;
|
|
||||||
if [ $? != 0 ] && $comp --help 2>/dev/null; then
|
|
||||||
echo "Attempting $cpio unpack with busybox $comp..." >&2;
|
|
||||||
$comp -dc $cpio.$comp > $cpio;
|
|
||||||
fi;
|
|
||||||
fi;
|
|
||||||
|
|
||||||
vndrname=$(basename $cpio .cpio);
|
|
||||||
mkdir -p $VENDORRD/$vndrname;
|
|
||||||
chmod 755 $VENDORRD/$vndrname;
|
|
||||||
|
|
||||||
cd $VENDORRD/$vndrname;
|
|
||||||
EXTRACT_UNSAFE_SYMLINKS=1 cpio -d -F $SPLITIMG/$cpio -i;
|
|
||||||
if [ $? != 0 -o ! "$(ls)" ]; then
|
|
||||||
abort "Unpacking vendor ramdisk \"$vndrname\" failed. Aborting...";
|
|
||||||
fi;
|
|
||||||
if [ -d "$AKHOME/vrdtmp/$vndrname" ]; then
|
|
||||||
cp -af $AKHOME/vrdtmp/$vndrname/* .;
|
|
||||||
fi;
|
|
||||||
done;
|
done;
|
||||||
cd $VENDORRD;
|
|
||||||
else
|
else
|
||||||
abort "No ramdisk found to unpack. Aborting...";
|
abort "No ramdisk found to unpack. Aborting...";
|
||||||
fi;
|
fi;
|
||||||
@@ -220,7 +239,7 @@ dump_boot() {
|
|||||||
###
|
###
|
||||||
|
|
||||||
### write_boot functions:
|
### write_boot functions:
|
||||||
# repack_ramdisk (repack ramdisk only)
|
# repack_ramdisk (repack all ramdisks only)
|
||||||
repack_ramdisk() {
|
repack_ramdisk() {
|
||||||
local comp packfail vndrname cpio mtktype;
|
local comp packfail vndrname cpio mtktype;
|
||||||
|
|
||||||
@@ -250,6 +269,7 @@ repack_ramdisk() {
|
|||||||
elif [ -d $SPLITIMG/vendor_ramdisk ]; then
|
elif [ -d $SPLITIMG/vendor_ramdisk ]; then
|
||||||
cd $VENDORRD;
|
cd $VENDORRD;
|
||||||
for vndrname in *; do
|
for vndrname in *; do
|
||||||
|
if [ -d "$VENDORRD/$vndrname" ]; then
|
||||||
if [ -f "$BIN/mkbootfs" ]; then
|
if [ -f "$BIN/mkbootfs" ]; then
|
||||||
mkbootfs $vndrname > $AKHOME/$vndrname-new.cpio;
|
mkbootfs $vndrname > $AKHOME/$vndrname-new.cpio;
|
||||||
else
|
else
|
||||||
@@ -257,6 +277,7 @@ repack_ramdisk() {
|
|||||||
find . | cpio -H newc -o > $AKHOME/$vndrname-new.cpio;
|
find . | cpio -H newc -o > $AKHOME/$vndrname-new.cpio;
|
||||||
fi;
|
fi;
|
||||||
[ $? != 0 ] && packfail=1;
|
[ $? != 0 ] && packfail=1;
|
||||||
|
fi;
|
||||||
done;
|
done;
|
||||||
fi;
|
fi;
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user