archinstall/archinstall/lib/disk/dmcryptdev.py

48 lines
1.1 KiB
Python

import pathlib
import logging
import json
from dataclasses import dataclass
from typing import Optional
from ..exceptions import SysCallError
from ..general import SysCommand
from ..output import log
from .mapperdev import MapperDev
@dataclass
class DMCryptDev:
dev_path :pathlib.Path
@property
def name(self):
with open(f"/sys/devices/virtual/block/{pathlib.Path(self.path).name}/dm/name", "r") as fh:
return fh.read().strip()
@property
def path(self):
return f"/dev/mapper/{self.dev_path}"
@property
def blockdev(self):
pass
@property
def MapperDev(self):
return MapperDev(mappername=self.name)
@property
def mountpoint(self) -> Optional[str]:
try:
data = json.loads(SysCommand(f"findmnt --json -R {self.dev_path}").decode())
for filesystem in data['filesystems']:
return filesystem.get('target')
except SysCallError as error:
# Not mounted anywhere most likely
log(f"Could not locate mount information for {self.dev_path}: {error}", level=logging.WARNING, fg="yellow")
pass
return None
@property
def filesystem(self) -> Optional[str]:
return self.MapperDev.filesystem