Initial Commit

This commit is contained in:
urec56 2024-09-06 22:45:20 +04:00
commit ba5e441a4b

65
arch_install.py Executable file
View file

@ -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()