initial
This commit is contained in:
commit
bb86f32181
162
extract-blobs-from-zip.sh
Executable file
162
extract-blobs-from-zip.sh
Executable file
@ -0,0 +1,162 @@
|
||||
#!/bin/bash
|
||||
|
||||
# related documentation:
|
||||
# https://wiki.lineageos.org/extracting_blobs_from_zips
|
||||
|
||||
set -e
|
||||
#set -x
|
||||
|
||||
BOLD=$(tput bold)
|
||||
RST=$(tput sgr0)
|
||||
RED=$(tput setaf 1)
|
||||
GREEN=$(tput setaf 2)
|
||||
YELLOW=$(tput setaf 3)
|
||||
CYAN=$(tput setaf 6)
|
||||
|
||||
PROGNAME="$0"
|
||||
|
||||
echoinfo() {
|
||||
>&2 echo "${CYAN}$@${RST}"
|
||||
}
|
||||
|
||||
echoerr() {
|
||||
>&2 echo "${RED}${BOLD}error:${RST}${RED} $@${RST}"
|
||||
}
|
||||
|
||||
echowarn() {
|
||||
>&2 echo "${YELLOW}${BOLD}warning:${RST}${YELLOW} $@${RST}"
|
||||
}
|
||||
|
||||
die() {
|
||||
echoerr "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<-_EOF
|
||||
usage: $PROGNAME OPTIONS
|
||||
|
||||
Options:
|
||||
-i|--input FILE Path to installable zip
|
||||
-o|--output DIR Directory to extract to
|
||||
--skip-unzipping
|
||||
--los-device-directory DIR
|
||||
|
||||
_EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
installed() {
|
||||
command -v "$1" > /dev/null
|
||||
return $?
|
||||
}
|
||||
|
||||
block_ota() {
|
||||
[ -d system ] && die "system: directory already exists!"
|
||||
[ -f super.transfer.list ] && die "super.transfer.list: not supported"
|
||||
|
||||
local f= file=
|
||||
for f in system vendor; do
|
||||
if [ ! -f "${f}.new.dat.br" ]; then continue; fi
|
||||
echoinfo "extracting $f..."
|
||||
brotli --decompress --output="${f}.new.dat" "${f}.new.dat.br"
|
||||
sdat2img.py "${f}.transfer.list" "${f}.new.dat" "${f}.img"
|
||||
done
|
||||
|
||||
mkdir system
|
||||
[ -f vendor.img ] && mkdir system/vendor
|
||||
|
||||
echoinfo "mounting system..."
|
||||
sudo mount system.img system/
|
||||
|
||||
if [ -f vendor.img ]; then
|
||||
echoinfo "mounting vendor..."
|
||||
sudo mount vendor.img system/vendor/
|
||||
fi
|
||||
|
||||
local workdir="$(pwd)"
|
||||
pushd "$LOS_DEVICE_DIR"
|
||||
echoinfo "launching extract-files.sh..."
|
||||
./extract-files.sh "$workdir"
|
||||
popd
|
||||
|
||||
if [ -f vendor.img ]; then
|
||||
echoinfo "unmounting vendor..."
|
||||
sudo umount system/vendor/
|
||||
fi
|
||||
|
||||
echoinfo "unmounting system..."
|
||||
sudo umount system/
|
||||
}
|
||||
|
||||
payload_ota() {
|
||||
die "payload_ota: not implemented"
|
||||
}
|
||||
|
||||
filebased_ota() {
|
||||
die "filebased_ota: not implemented"
|
||||
}
|
||||
|
||||
[[ $# -lt 1 ]] && usage
|
||||
for prog in brotli sdat2img.py; do
|
||||
if ! installed $prog; then
|
||||
die "$prog: command not found"
|
||||
fi
|
||||
done
|
||||
|
||||
INPUT=
|
||||
OUTPUT=
|
||||
SKIP_UNZIP=
|
||||
LOS_DEVICE_DIR=
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-i|--input)
|
||||
INPUT="$2"
|
||||
shift
|
||||
;;
|
||||
|
||||
-o|--output)
|
||||
OUTPUT="$2"
|
||||
shift
|
||||
;;
|
||||
|
||||
--los-device-directory)
|
||||
LOS_DEVICE_DIR="$2"
|
||||
shift
|
||||
;;
|
||||
|
||||
--skip-unzipping)
|
||||
SKIP_UNZIP=1
|
||||
;;
|
||||
|
||||
*)
|
||||
die "unrecognized option $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
[ -z "$INPUT" ] && die "no input file specified"
|
||||
[ -z "$OUTPUT" ] && die "no output directory specified"
|
||||
[ -z "$LOS_DEVICE_DIR" ] && die "no lineageos device directory specified"
|
||||
[ -d "$LOS_DEVICE_DIR" ] || die "$LOS_DEVICE_DIR: no such directory"
|
||||
[ -f "$INPUT" ] || die "$INPUT: no such file"
|
||||
[ -z "$SKIP_UNZIP" ] && [ -d "$OUTPUT" ] && die "$OUTPUT: directory already exists"
|
||||
|
||||
if [ -z "$SKIP_UNZIP" ]; then
|
||||
unzip -d "$OUTPUT" "$INPUT"
|
||||
elif [ ! -d "$OUTPUT" ]; then
|
||||
die "$OUTPUT: no such directory"
|
||||
fi
|
||||
|
||||
pushd "$OUTPUT"
|
||||
if [ -f payload.bin ]; then
|
||||
payload_ota
|
||||
elif [ -f system.transfer.list ]; then
|
||||
block_ota
|
||||
else
|
||||
filebased_ota
|
||||
fi
|
||||
popd
|
Loading…
x
Reference in New Issue
Block a user