Initial Commit
This commit is contained in:
commit
ba5e441a4b
1 changed files with 65 additions and 0 deletions
65
arch_install.py
Executable file
65
arch_install.py
Executable 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()
|
Loading…
Add table
Reference in a new issue