pmb/install: warn if the target disk is larger than expected (MR 1956)
This commit is contained in:
parent
72e24f7f96
commit
5d540ad4fb
|
@ -86,13 +86,15 @@ def ask(args, question="Continue?", choices=["y", "n"], default="n",
|
||||||
validation_regex + "). Please try again.")
|
validation_regex + "). Please try again.")
|
||||||
|
|
||||||
|
|
||||||
def confirm(args, question="Continue?", default=False):
|
def confirm(args, question="Continue?", default=False, no_assumptions=False):
|
||||||
"""
|
"""
|
||||||
Convenience wrapper around ask for simple yes-no questions with validation.
|
Convenience wrapper around ask for simple yes-no questions with validation.
|
||||||
|
|
||||||
|
:param no_assumptions: ask for confirmation, even if "pmbootstrap -y' is set
|
||||||
:returns: True for "y", False for "n"
|
:returns: True for "y", False for "n"
|
||||||
"""
|
"""
|
||||||
default_str = "y" if default else "n"
|
default_str = "y" if default else "n"
|
||||||
if (args.assume_yes):
|
if args.assume_yes and not no_assumptions:
|
||||||
logging.info(question + " (y/n) [" + default_str + "]: y")
|
logging.info(question + " (y/n) [" + default_str + "]: y")
|
||||||
return True
|
return True
|
||||||
answer = ask(args, question, ["y", "n"], default_str, True, "(y|n)")
|
answer = ask(args, question, ["y", "n"], default_str, True, "(y|n)")
|
||||||
|
|
|
@ -405,7 +405,8 @@ def embed_firmware(args):
|
||||||
"bs=" + str(step), "seek=" + str(offset)])
|
"bs=" + str(step), "seek=" + str(offset)])
|
||||||
|
|
||||||
|
|
||||||
def sanity_check_sdcard(device):
|
def sanity_check_sdcard(args):
|
||||||
|
device = args.sdcard
|
||||||
device_name = os.path.basename(device)
|
device_name = os.path.basename(device)
|
||||||
if not os.path.exists(device):
|
if not os.path.exists(device):
|
||||||
raise RuntimeError("{} doesn't exist, is the sdcard plugged?".format(device))
|
raise RuntimeError("{} doesn't exist, is the sdcard plugged?".format(device))
|
||||||
|
@ -416,6 +417,30 @@ def sanity_check_sdcard(device):
|
||||||
raise RuntimeError("{} is read-only, is the sdcard locked?".format(device))
|
raise RuntimeError("{} is read-only, is the sdcard locked?".format(device))
|
||||||
|
|
||||||
|
|
||||||
|
def sanity_check_sdcard_size(args):
|
||||||
|
device = args.sdcard
|
||||||
|
devpath = os.path.realpath(device)
|
||||||
|
sysfs = '/sys/class/block/{}/size'.format(devpath.replace('/dev/', ''))
|
||||||
|
if not os.path.isfile(sysfs):
|
||||||
|
# This is a best-effort sanity check, continue if it's not checkable
|
||||||
|
return
|
||||||
|
|
||||||
|
with open(sysfs) as handle:
|
||||||
|
raw = handle.read()
|
||||||
|
|
||||||
|
# Size is in 512-byte blocks
|
||||||
|
size = int(raw.strip())
|
||||||
|
human = "{:.2f} GiB".format(size / 2 / 1024 / 1024)
|
||||||
|
|
||||||
|
# Warn if the size is larger than 100GiB
|
||||||
|
if size > (100 * 2 * 1024 * 1024):
|
||||||
|
if not pmb.helpers.cli.confirm(args, f"WARNING: The target disk ({devpath}) is"
|
||||||
|
" larger than a usual SD card (>100GiB)."
|
||||||
|
" Are you sure you want to overwrite"
|
||||||
|
f" this {human} disk?", no_assumptions=True):
|
||||||
|
raise RuntimeError("Aborted.")
|
||||||
|
|
||||||
|
|
||||||
def sanity_check_ondev_version(args):
|
def sanity_check_ondev_version(args):
|
||||||
arch = args.deviceinfo["arch"]
|
arch = args.deviceinfo["arch"]
|
||||||
package = pmb.helpers.package.get(args, "postmarketos-ondev", arch)
|
package = pmb.helpers.package.get(args, "postmarketos-ondev", arch)
|
||||||
|
@ -612,7 +637,8 @@ def install_on_device_installer(args, step, steps):
|
||||||
def install(args):
|
def install(args):
|
||||||
# Sanity checks
|
# Sanity checks
|
||||||
if not args.android_recovery_zip and args.sdcard:
|
if not args.android_recovery_zip and args.sdcard:
|
||||||
sanity_check_sdcard(args.sdcard)
|
sanity_check_sdcard(args)
|
||||||
|
sanity_check_sdcard_size(args)
|
||||||
if args.on_device_installer:
|
if args.on_device_installer:
|
||||||
sanity_check_ondev_version(args)
|
sanity_check_ondev_version(args)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue