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