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:
osm0sis committed 2026-08-09 22:13:51 -03:00
1 parent 1c9a500dd4
commit d81e180869
1 file changed
+47 -26
+47 -26
View File
@@ -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;