commit ba5e441a4b3dffd0189a9fbbc257cc4cefbbc400 Author: urec56 Date: Fri Sep 6 22:45:20 2024 +0400 Initial Commit diff --git a/arch_install.py b/arch_install.py new file mode 100755 index 0000000..f46b0ff --- /dev/null +++ b/arch_install.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +import argparse +import subprocess + + +OS_MIN_SIZE = 10 # In gigabytes + + +class Config: + def __init__(self, **kwargs): + self.disk = kwargs["disk"] + self.swap = kwargs["swap"] + + +def define_arguments() -> Config: + parser = argparse.ArgumentParser() + + parser.add_argument("-d", "--disk", type=str, required=True, help="Name of disk, on which the system will be installed") + parser.add_argument( + "-s", + "--swap", + type=int, + help="""Size of swap file in gigabytes. + WARNING!!! Swap space will be allocated from the main disk as a separate partition, + rather than as part of the root partition""" + ) + + args = parser.parse_args() + return Config(**args.__dict__) + + +def get_available_disks() -> dict: + result = subprocess.run("lsblk -l -o NAME,SIZE,UUID | awk '$3 == \"\"'", shell=True, capture_output=True, text=True) + disks = result.stdout.split() + available_disks = {disks[i]: disks[i+1] for i in range(0, len(disks), 2) if disks[i+1].endswith("G") or disks[i+1].endswith("T")} + return available_disks + + +def get_disk_size(disk_size_row: str) -> float: + if disk_size_row.endswith("G"): + return float(disk_size_row.strip("G")) + else: + return float(disk_size_row.strip("T")) * 1024 + + +def validate_selected_disk(disk: str, swap: int | None, available_disks: dict) -> None: + if disk not in available_disks: + print("You have selected the wrong disk") + print("Please unmount the required disk and ensure it is of sufficient size") + exit(1) + if get_disk_size(available_disks[disk]) <= OS_MIN_SIZE + (swap or 0): + print("Disk is too small") + exit(1) + + +def main(): + config = define_arguments() + available_disks = get_available_disks() + validate_selected_disk(disk=config.disk, swap=config.swap, available_disks=available_disks) + print(config.__dict__) + print("До сюда дошёл") + + +if __name__ == "__main__": + main()