diff --git a/pmb/sideload/__init__.py b/pmb/sideload/__init__.py index ef08db65..8f0f5dde 100644 --- a/pmb/sideload/__init__.py +++ b/pmb/sideload/__init__.py @@ -15,13 +15,12 @@ import pmb.build from pmb.core.context import get_context -def scp_abuild_key(args: PmbArgs, user: str, host: str, port: str, su: str) -> None: +def scp_abuild_key(args: PmbArgs, user: str, host: str, port: str) -> None: """Copy the building key of the local installation to the target device, so it trusts the apks that were signed here. :param user: target device ssh username :param host: target device ssh hostname - :param port: target device ssh port - :param su: target device su binary""" + :param port: target device ssh port""" keys = list((get_context().config.work / "config_abuild").glob("*.pub")) key = keys[0] @@ -34,7 +33,10 @@ def scp_abuild_key(args: PmbArgs, user: str, host: str, port: str, su: str) -> N logging.info(f"Installing signing key at {user}@{host}") keyname = os.path.join("/tmp", os.path.basename(key)) remote_cmd_l: list[PathString] = [ - su, + "sudo", + "-p", + pmb.config.sideload_sudo_prompt, + "-S", "mv", "-n", keyname, @@ -45,24 +47,6 @@ def scp_abuild_key(args: PmbArgs, user: str, host: str, port: str, su: str) -> N pmb.helpers.run.user(command, output="tui") -def ssh_find_su(args: PmbArgs, user: str, host: str, port: str) -> str: - """Connect to a device via ssh and query the su binary.""" - logging.info(f"Querying su binary of {user}@{host}") - query_doas = shlex.quote("which doas || true") - query_sudo = shlex.quote("which sudo || true") - command_doas = ["ssh", "-p", port, f"{user}@{host}", f"sh -c {query_doas}"] - command_sudo = ["ssh", "-p", port, f"{user}@{host}", f"sh -c {query_sudo}"] - output_doas = pmb.helpers.run.user_output(command_doas) - output_sudo = pmb.helpers.run.user_output(command_sudo) - if output_doas != "": - return "doas" - elif output_sudo != "": - return "sudo" - else: - logging.error('ERROR: Failed to find supported su binary (tried "doas" and "sudo")') - return "error" - - def ssh_find_arch(args: PmbArgs, user: str, host: str, port: str) -> Arch: """Connect to a device via ssh and query the architecture.""" logging.info(f"Querying architecture of {user}@{host}") @@ -80,12 +64,11 @@ def ssh_find_arch(args: PmbArgs, user: str, host: str, port: str) -> Arch: return alpine_architecture -def ssh_install_apks(args: PmbArgs, user, host, port, su: str, paths: list) -> None: +def ssh_install_apks(args: PmbArgs, user, host, port, paths: list) -> None: """Copy binary packages via SCP and install them via SSH. :param user: target device ssh username :param host: target device ssh hostname :param port: target device ssh port - :param su: target device su binary :param paths: list of absolute paths to locally stored apks """ @@ -99,7 +82,10 @@ def ssh_install_apks(args: PmbArgs, user, host, port, su: str, paths: list) -> N logging.info(f"Installing packages at {user}@{host}") add_cmd = [ - su, + "sudo", + "-p", + pmb.config.sideload_sudo_prompt, + "-S", "apk", "--wait", "30", @@ -131,8 +117,6 @@ def sideload( if arch is None: arch = ssh_find_arch(args, user, host, port) - su = ssh_find_su(args, user, host, port) - context = get_context() to_build = [] for pkgname in pkgnames: @@ -152,6 +136,6 @@ def sideload( raise RuntimeError(f"The package '{pkgname}' could not be built") if copy_key: - scp_abuild_key(args, user, host, port, su) + scp_abuild_key(args, user, host, port) - ssh_install_apks(args, user, host, port, su, paths) + ssh_install_apks(args, user, host, port, paths)