diff --git a/scripts/flash-image b/scripts/flash-image index 1a7d5fad2d76348fe082ceb660e1df54f05eae08..00aec97caaed5eeddfe3a7aca9d94f3fb91ab2e8 100755 --- a/scripts/flash-image +++ b/scripts/flash-image @@ -37,15 +37,17 @@ SDPU: delay 1000 FB: ucmd setenv fastboot_dev mmc FB: ucmd setenv mmcdev 0 FB: flash -raw2sparse all {image} +{luks_resize} FB: Done ''' -def write_uuu_script(target, image, uboot, mods): +def write_uuu_script(target, image, uboot, mods, luks_resize): with open(target, 'w+') as f: f.write(UUU_SCRIPT_TMPL.format(image=os.path.basename(image), uboot=os.path.basename(uboot), - mods=mods)) + mods=mods, + luks_resize=luks_resize)) def flash_image(uuu_target, debug): @@ -57,6 +59,7 @@ def flash_image(uuu_target, debug): def main(): uuu_mods = '' + luks_resize = '' parser = argparse.ArgumentParser(description='Flash a librem5 phone') parser.add_argument('--dir', type=str, default=None, help='Look in dir for image and u-boot') @@ -68,6 +71,8 @@ def main(): help='Enable debug output') group.add_argument('--uboot', type=str, help='u-boot version to flash') + group.add_argument('--luks', action="store_true", default=False, + help='This is a luks image so re-encrypt and resize') args = parser.parse_args() level = logging.DEBUG if args.debug else logging.INFO @@ -91,6 +96,7 @@ def main(): if args.dir == outdir: os.makedirs(args.dir, exist_ok=True) + part_target = os.path.join("..", "uuu_scripts", "l5.part") image_target = os.path.join(imagedir, IMAGE.format(args.board)) uboot_target = os.path.join(imagedir, UBOOT.format(uboot_board)) uuu_target = os.path.join(outdir, UUU_SCRIPT.format(args.board)) @@ -105,8 +111,14 @@ def main(): os.symlink(image_target, os.path.join(outdir, IMAGE.format(args.board))) os.symlink(uboot_target, os.path.join(outdir, UBOOT.format(uboot_board))) + os.symlink(part_target, os.path.join(outdir, "l5.part")) - write_uuu_script(uuu_target, image_target, uboot_target, uuu_mods) + if args.luks: + cmd = "scripts/re-encrypt.sh {}".format(os.path.join(imagedir, IMAGE.format(args.board))) + subprocess.check_call(cmd.split()) + luks_resize = "FB: flash -raw2sparse all l5.part" + + write_uuu_script(uuu_target, image_target, uboot_target, uuu_mods, luks_resize) flash_image(uuu_target, args.debug) except KeyboardInterrupt: logging.error("CTRL-C pressed.") diff --git a/scripts/re-encrypt.sh b/scripts/re-encrypt.sh new file mode 100755 index 0000000000000000000000000000000000000000..d25277e017e5d1faa22654056fbfa4c2200c2738 --- /dev/null +++ b/scripts/re-encrypt.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +image=$1 + +loop=$( kpartx -av ${image} | awk 'NR==1{ print substr($3,1,5) }' ) +echo -n "123456" | cryptsetup-reencrypt /dev/mapper/${loop}p2 - +sync +losetup -d /dev/${loop} +kpartx -d /dev/${loop}