pmb: add -f (force) parameter to bootimg_analyze

We are analyzing the `boot.img` with `file` before we send it to
`unpackbootimg`. File does not recognize all kinds of `boot.img` files,
which `unpackbootimg` can extract, so we need a way to skip this check.

Details:
* Add `-f` parameter, continues extraction with a warning if the file
  seems to be invalid
* Tell the user that `-f` can be used if the `boot.img` is invalid and
  it's not specified
* Consistent spelling of `boot.img` instead of `bootimg` in messages

Fixes #1608
This commit is contained in:
Oliver Smith 2018-07-06 21:57:18 +02:00
parent 0aa125e45c
commit d4f4ea8488
No known key found for this signature in database
GPG Key ID: 5AE7F5513E0885CB
3 changed files with 19 additions and 6 deletions

View File

@ -437,6 +437,9 @@ def arguments():
bootimg_analyze = sub.add_parser("bootimg_analyze", help="Extract all the"
" information from an existing boot.img")
bootimg_analyze.add_argument("path", help="path to the boot.img")
bootimg_analyze.add_argument("-f", dest="force", action="store_true",
help="force even if the file seems to be"
" invalid")
# Use defaults from the user's config file
args = parser.parse_args()

View File

@ -38,12 +38,22 @@ def bootimg(args, path):
file_output = pmb.chroot.user(args, ["file", "-b", "boot.img"], working_dir=temp_path,
return_stdout=True).rstrip()
if "android bootimg" not in file_output.lower():
if "linux kernel" in file_output.lower():
raise RuntimeError("File is a Kernel image, you might need the 'heimdall-isorec'"
" flash method. See also: "
"<https://wiki.postmarketos.org/wiki/Deviceinfo_flash_methods>")
if "force" in args and args.force:
logging.warning("WARNING: boot.img file seems to be invalid, but"
" proceeding anyway (-f specified)")
else:
raise RuntimeError("File is not an Android bootimg. (" + file_output + ")")
logging.info("NOTE: If you are sure that your file is a valid"
" boot.img file, you could force the analysis"
" with: 'pmbootstrap bootimg_analyze " + path +
" -f'")
if "linux kernel" in file_output.lower():
raise RuntimeError("File is a Kernel image, you might need the"
" 'heimdall-isorec' flash method. See also:"
" <https://wiki.postmarketos.org/wiki/"
"Deviceinfo_flash_methods>")
else:
raise RuntimeError("File is not an Android boot.img. (" +
file_output + ")")
# Extract all the files
pmb.chroot.user(args, ["unpackbootimg", "-i", "boot.img"], working_dir=temp_path)

View File

@ -56,7 +56,7 @@ def test_bootimg_kernel(args):
def test_bootimg_invalid_file(args):
with pytest.raises(RuntimeError) as e:
pmb.parse.bootimg(args, __file__)
assert "File is not an Android bootimg" in str(e.value)
assert "File is not an Android boot.img" in str(e.value)
def test_bootimg_normal(args):