From 2a0f3c8276c397b384ffa8b57fa62f38f3cea6a9 Mon Sep 17 00:00:00 2001 From: Dana Conrad Date: Wed, 11 Sep 2024 02:24:22 +0000 Subject: hibyos_nativepatcher: rewrite for either fresh install or uninstall Since we can easily create our own install files for erosqnative, modify script to create fresh install image from bootloader.erosq or add bootloader to installation manifest of stock update file to uninstall rockbox. USAGE: hibyos_nativepatcher.sh [arguments depend on mode, see below] hibyos_nativepatcher.sh mkrbinstall Output file will be path/to/output/erosqnative_RBVER-HWVER-OFVERNAME.upt. Only the Hifiwalker H2 v1.3 uses "eros_h2", everything else uses "erosq". hibyos_nativepatcher.sh mkstockuboot Output file will be path/to/OFupdatefile-rbuninstall.upt. Change-Id: I16bc6e43c42f99475ebdd5ec1ac1bae047129745 --- tools/hibyos_nativepatcher/hibyos_nativepatcher.sh | 246 +++++++++++++++------ 1 file changed, 175 insertions(+), 71 deletions(-) (limited to 'tools/hibyos_nativepatcher') diff --git a/tools/hibyos_nativepatcher/hibyos_nativepatcher.sh b/tools/hibyos_nativepatcher/hibyos_nativepatcher.sh index e0a76da5c2..3c6661863f 100755 --- a/tools/hibyos_nativepatcher/hibyos_nativepatcher.sh +++ b/tools/hibyos_nativepatcher/hibyos_nativepatcher.sh @@ -1,7 +1,25 @@ #!/bin/bash -# USAGE: ./hibyos_nativepatcher.sh +# hibyos_nativepatcher.sh +# # NOTE: THIS SCRIPT IS NOT TOLERANT OF WHITESPACE IN FILENAMES OR PATHS +usage="hibyos_nativepatcher.sh + + USAGE: + + hibyos_nativepatcher.sh [arguments depend on mode, see below] + + hibyos_nativepatcher.sh mkrbinstall + + Output file will be path/to/output/erosqnative_RBVER-HWVER-OFVERNAME.upt. + Only the Hifiwalker H2 v1.3 uses "eros_h2", everything else uses "erosq". + + hibyos_nativepatcher.sh mkstockuboot + Output file will be path/to/OFupdatefile-rbuninstall.upt. + + NOTE: THIS SCRIPT IS NOT TOLERANT OF WHITESPACE IN FILENAMES OR PATHS!" + +# check OS type and for any needed tools if [[ "$OSTYPE" == "darwin"* ]]; then echo "$OSTYPE DETECTED" elif [[ "$OSTYPE" == "linux-gnu"* ]]; then @@ -19,99 +37,185 @@ else exit 1 fi +# make sure we can find patch_manifest SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) if !(which $SCRIPT_DIR/patch_manifest.pl > /dev/null); then echo "couldn't find patch_manifest.pl!" exit 1 fi -updatefile=$(realpath --relative-base=$(pwd) $1) -updatefile_path=$(echo "$updatefile" | perl -ne "s/\/[\w\.\_\-]*$// && print") -updatefile_name=$(basename $updatefile) -updatefile_name_noext=$(echo "$updatefile_name" | perl -ne "s/\.\w*$// && print") -bootfile=$(realpath --relative-base=$(pwd) $2) -echo "This will patch $updatefile with $bootfile..." +########################################################################### +# MKRBINSTALL +########################################################################### +if [[ "$1" == "mkrbinstall" ]]; then + echo "Creating installation image from bootloader file..." -echo "MAKE WORKING DIR..." -mkdir $updatefile_path/working_dir -working_dir=$(realpath $updatefile_path/working_dir) + # make sure all arguments are accounted for... + if [[ -z "$5" ]]; then + echo "not all parameters included, please see usage:" + echo "$usage" + exit 1 + fi -# copy update.upt to update.iso -cp $updatefile $working_dir/$updatefile_name_noext\_cpy.iso + # validate arguments + outputdir=$(realpath --relative-base=$(pwd) $3) + if !(ls $outputdir >& /dev/null); then + echo "directory $outputdir doesn't seem to exist. Please make sure it exists, then re-run hibyos_nativepatcher.sh." + exit 1 + fi -mkdir $working_dir/image_contents + # note, bootloaderfile might still be a valid path, but not a valid bootloader file... check to make sure tar can extract it okay. + bootloaderfile=$(realpath --relative-base=$(pwd) $4) + if !(ls $bootloaderfile >& /dev/null); then + echo "bootloader file $bootloaderfile doesn't seem to exist. Please make sure it exists, then re-run hibyos_nativepatcher.sh." + exit 1 + fi -# attach/mount iso -echo "mount/extract/unmount original iso..." -if [[ "$OSTYPE" == "darwin"* ]]; then - # macos - hdiutil attach $working_dir/$updatefile_name_noext\_cpy.iso -mountpoint $working_dir/contentsiso + # make working directory... + mkdir $outputdir/working_dir + workingdir=$(realpath $outputdir/working_dir) + mkdir $workingdir/bootloader + + # extract bootloader file + if [[ "$OSTYPE" == "darwin"* ]]; then + # macos + tar -xvf $bootloaderfile --cd $workingdir/bootloader + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then + # linux-gnu + tar -xvf $bootloaderfile -C $workingdir/bootloader + fi - # copy out iso contents - cp $working_dir/contentsiso/* $working_dir/image_contents + # make sure we got what we wanted + if !(ls $workingdir/bootloader/bootloader.ucl >& /dev/null); then + echo "can't find bootloader.ucl! help!" + rm -rf $workingdir + exit 1 + elif !(ls $workingdir/bootloader/spl.erosq >& /dev/null); then + echo "can't find spl.erosq! help!" + rm -rf $workingdir + exit 1 + fi - # unmount iso - hdiutil detach $working_dir/contentsiso -elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - # linux-gnu - 7z -o$working_dir/image_contents x $working_dir/$updatefile_name_noext\_cpy.iso -fi + bootver=$(cat $workingdir/bootloader/bootloader-info.txt) + if [ -z "$bootver" ]; then + echo "COULDN'T FIND BOOTLOADER-INFO!" + rm -rf $workingdir + exit 1 + fi -chmod 777 $working_dir/image_contents/* + # if uboot.bin already exists, something is weird. + if (ls $workingdir/image_contents/uboot.bin >& /dev/null); then + echo "$workingdir/image_contents/uboot.bin already exists, something went weird." + rm -rf $workingdir + exit 1 + fi -# extract spl, bootloader -echo "extract bootloader..." -mkdir $working_dir/bootloader + # everything exists, make the bin + mkdir $workingdir/image_contents/ + touch $workingdir/image_contents/uboot.bin + echo "PATCHING!" + dd if=$workingdir/bootloader/spl.erosq of=$workingdir/image_contents/uboot.bin obs=1 seek=0 conv=notrunc + dd if=$workingdir/bootloader/bootloader.ucl of=$workingdir/image_contents/uboot.bin obs=1 seek=26624 conv=notrunc + + # create update.txt + md5=($(md5sum $workingdir/image_contents/uboot.bin)) + if [ -z "$md5" ]; then + echo "COULDN'T MD5SUM UBOOT.BIN!" + rm -rf $workingdir + exit 1 + fi + echo "Create update manifest with md5sum $md5" + echo "" > $workingdir/image_contents/update.txt + $SCRIPT_DIR/patch_manifest.pl $md5 $workingdir/image_contents/update.txt -if [[ "$OSTYPE" == "darwin"* ]]; then - # macos - tar -xvf $bootfile --cd $working_dir/bootloader -elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - # linux-gnu - tar -xvf $bootfile -C $working_dir/bootloader -fi + # create version.txt + echo "version={ + name=$2 + ver=2024-09-10T14:42:18+08:00 +}" > $workingdir/image_contents/version.txt -bootver=$(cat $working_dir/bootloader/bootloader-info.txt) -if [ -z "$bootver" ]; then - echo "COULDN'T FIND BOOTLOADER-INFO!" - echo "cleaning up..." - rm -rf $working_dir - exit 1 -fi -echo "FOUND VERSION $bootver" - -# patch uboot.bin -echo "PATCH!" -dd if=$working_dir/bootloader/spl.erosq of=$working_dir/image_contents/uboot.bin obs=1 seek=0 conv=notrunc -dd if=$working_dir/bootloader/bootloader.ucl of=$working_dir/image_contents/uboot.bin obs=1 seek=26624 conv=notrunc - -# modify update.txt -md5=($(md5sum $working_dir/image_contents/uboot.bin)) -if [ -z "$md5" ]; then - echo "COULDN'T MD5SUM UBOOT.BIN!" - echo "cleaning up..." - rm -rf $working_dir + outputfilename="erosqnative_$bootver-$5-$2" + + +########################################################################### +# MKSTOCKUBOOT +########################################################################### +elif [[ "$1" == "mkstockuboot" ]]; then + echo "Creating uninstallation image from stock update image..." + + # make sure all arguments are accounted for... + if [[ -z "$2" ]]; then + echo "not all parameters included, please see usage:" + echo "$usage" + exit 1 + fi + + updatefile=$(realpath --relative-base=$(pwd) $2) + updatefile_path=$(echo "$updatefile" | perl -ne "s/\/[\w\.\_\-]*$// && print") + updatefile_name=$(basename $updatefile) + updatefile_name_noext=$(echo "$updatefile_name" | perl -ne "s/\.\w*$// && print") + outputdir=$updatefile_path + outputfilename="$updatefile_name_noext-rbuninstall" + + mkdir $updatefile_path/working_dir + workingdir=$(realpath $updatefile_path/working_dir) + + # copy update.upt to update.iso + cp $updatefile $workingdir/$updatefile_name_noext-cpy.iso + + mkdir $workingdir/image_contents + + # extract iso + if [[ "$OSTYPE" == "darwin"* ]]; then + # macos + hdiutil attach $workingdir/$updatefile_name_noext-cpy.iso -mountpoint $workingdir/contentsiso + + # copy out iso contents + cp $workingdir/contentsiso/* $workingdir/image_contents + + # unmount iso + hdiutil detach $workingdir/contentsiso + elif [[ "$OSTYPE" == "linux-gnu"* ]]; then + # linux-gnu + 7z -o$workingdir/image_contents x $workingdir/$updatefile_name_noext-cpy.iso + fi + + chmod 777 $workingdir/image_contents/* + + # modify update.txt + md5=($(md5sum $workingdir/image_contents/uboot.bin)) + if [ -z "$md5" ]; then + echo "COULDN'T MD5SUM UBOOT.BIN!" + rm -rf $working_dir + exit 1 + fi + echo "add to update manifest with md5sum $md5" + $SCRIPT_DIR/patch_manifest.pl $md5 $workingdir/image_contents/update.txt + +###################################################################### +# PRINT USAGE +###################################################################### +else + echo "$usage" exit 1 fi -echo "add to update manifest with md5sum $md5" -$SCRIPT_DIR/patch_manifest.pl $md5 $working_dir/image_contents/update.txt - -# modify version.txt? -# create iso -echo "make new iso..." +###################################################################### +# Common: make the image +###################################################################### +# make the image if [[ "$OSTYPE" == "darwin"* ]]; then # macos - hdiutil makehybrid -iso -joliet -o $working_dir/$updatefile_name_noext\_patched_$bootver.iso $working_dir/image_contents/ + hdiutil makehybrid -iso -joliet -o $outputdir/output.iso $workingdir/image_contents/ elif [[ "$OSTYPE" == "linux-gnu"* ]]; then # linux-gnu - genisoimage -o $working_dir/$updatefile_name_noext\_patched_$bootver.iso $working_dir/image_contents/ + genisoimage -o $outputdir/output.iso $workingdir/image_contents/ fi -# rename to something.upt and put in original directory -echo "final output file $updatefile_name_noext\_patched_$bootver.upt" -mv $working_dir/$updatefile_name_noext\_patched_$bootver.iso $updatefile_path/$updatefile_name_noext\_patched_$bootver.upt +# rename +mv $outputdir/output.iso $outputdir/$outputfilename.upt + +# cleaning up +rm -rf $workingdir -# clean up -echo "cleaning up..." -rm -rf $working_dir +exit 0 -- cgit v1.2.3