Move mount() to disk.utils (#4232)
This commit is contained in:
parent
9bd2131792
commit
3b6f7db942
|
|
@ -44,6 +44,7 @@ from .utils import (
|
||||||
find_lsblk_info,
|
find_lsblk_info,
|
||||||
get_all_lsblk_info,
|
get_all_lsblk_info,
|
||||||
get_lsblk_info,
|
get_lsblk_info,
|
||||||
|
mount,
|
||||||
umount,
|
umount,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -218,7 +219,7 @@ class DeviceHandler:
|
||||||
subvol_infos: list[_BtrfsSubvolumeInfo] = []
|
subvol_infos: list[_BtrfsSubvolumeInfo] = []
|
||||||
|
|
||||||
if not lsblk_info.mountpoint:
|
if not lsblk_info.mountpoint:
|
||||||
self.mount(dev_path, self._TMP_BTRFS_MOUNT, create_target_mountpoint=True)
|
mount(dev_path, self._TMP_BTRFS_MOUNT, create_target_mountpoint=True)
|
||||||
mountpoint = self._TMP_BTRFS_MOUNT
|
mountpoint = self._TMP_BTRFS_MOUNT
|
||||||
else:
|
else:
|
||||||
# when multiple subvolumes are mounted then the lsblk output may look like
|
# when multiple subvolumes are mounted then the lsblk output may look like
|
||||||
|
|
@ -622,7 +623,7 @@ class DeviceHandler:
|
||||||
) -> None:
|
) -> None:
|
||||||
info(f'Creating subvolumes: {path}')
|
info(f'Creating subvolumes: {path}')
|
||||||
|
|
||||||
self.mount(path, self._TMP_BTRFS_MOUNT, create_target_mountpoint=True)
|
mount(path, self._TMP_BTRFS_MOUNT, create_target_mountpoint=True)
|
||||||
|
|
||||||
for sub_vol in sorted(btrfs_subvols, key=lambda x: x.name):
|
for sub_vol in sorted(btrfs_subvols, key=lambda x: x.name):
|
||||||
debug(f'Creating subvolume: {sub_vol.name}')
|
debug(f'Creating subvolume: {sub_vol.name}')
|
||||||
|
|
@ -671,7 +672,7 @@ class DeviceHandler:
|
||||||
luks_handler = None
|
luks_handler = None
|
||||||
dev_path = part_mod.safe_dev_path
|
dev_path = part_mod.safe_dev_path
|
||||||
|
|
||||||
self.mount(
|
mount(
|
||||||
dev_path,
|
dev_path,
|
||||||
self._TMP_BTRFS_MOUNT,
|
self._TMP_BTRFS_MOUNT,
|
||||||
create_target_mountpoint=True,
|
create_target_mountpoint=True,
|
||||||
|
|
@ -769,43 +770,6 @@ class DeviceHandler:
|
||||||
except SysCallError as err:
|
except SysCallError as err:
|
||||||
raise DiskError(f'Could not enable swap {path}:\n{err.message}')
|
raise DiskError(f'Could not enable swap {path}:\n{err.message}')
|
||||||
|
|
||||||
def mount(
|
|
||||||
self,
|
|
||||||
dev_path: Path,
|
|
||||||
target_mountpoint: Path,
|
|
||||||
mount_fs: str | None = None,
|
|
||||||
create_target_mountpoint: bool = True,
|
|
||||||
options: list[str] = [],
|
|
||||||
) -> None:
|
|
||||||
if create_target_mountpoint and not target_mountpoint.exists():
|
|
||||||
target_mountpoint.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
if not target_mountpoint.exists():
|
|
||||||
raise ValueError('Target mountpoint does not exist')
|
|
||||||
|
|
||||||
lsblk_info = get_lsblk_info(dev_path)
|
|
||||||
if target_mountpoint in lsblk_info.mountpoints:
|
|
||||||
info(f'Device already mounted at {target_mountpoint}')
|
|
||||||
return
|
|
||||||
|
|
||||||
cmd = ['mount']
|
|
||||||
|
|
||||||
if len(options):
|
|
||||||
cmd.extend(('-o', ','.join(options)))
|
|
||||||
if mount_fs:
|
|
||||||
cmd.extend(('-t', mount_fs))
|
|
||||||
|
|
||||||
cmd.extend((str(dev_path), str(target_mountpoint)))
|
|
||||||
|
|
||||||
command = ' '.join(cmd)
|
|
||||||
|
|
||||||
debug(f'Mounting {dev_path}: {command}')
|
|
||||||
|
|
||||||
try:
|
|
||||||
SysCommand(command)
|
|
||||||
except SysCallError as err:
|
|
||||||
raise DiskError(f'Could not mount {dev_path}: {command}\n{err.message}')
|
|
||||||
|
|
||||||
def detect_pre_mounted_mods(self, base_mountpoint: Path) -> list[DeviceModification]:
|
def detect_pre_mounted_mods(self, base_mountpoint: Path) -> list[DeviceModification]:
|
||||||
part_mods: dict[Path, list[PartitionModification]] = {}
|
part_mods: dict[Path, list[PartitionModification]] = {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from pydantic import BaseModel
|
||||||
from archinstall.lib.command import SysCommand
|
from archinstall.lib.command import SysCommand
|
||||||
from archinstall.lib.exceptions import DiskError, SysCallError
|
from archinstall.lib.exceptions import DiskError, SysCallError
|
||||||
from archinstall.lib.models.device import LsblkInfo
|
from archinstall.lib.models.device import LsblkInfo
|
||||||
from archinstall.lib.output import debug, warn
|
from archinstall.lib.output import debug, info, warn
|
||||||
|
|
||||||
|
|
||||||
class LsblkOutput(BaseModel):
|
class LsblkOutput(BaseModel):
|
||||||
|
|
@ -67,12 +67,12 @@ def get_lsblk_output() -> LsblkOutput:
|
||||||
|
|
||||||
def find_lsblk_info(
|
def find_lsblk_info(
|
||||||
dev_path: Path | str,
|
dev_path: Path | str,
|
||||||
info: list[LsblkInfo],
|
info_list: list[LsblkInfo],
|
||||||
) -> LsblkInfo | None:
|
) -> LsblkInfo | None:
|
||||||
if isinstance(dev_path, str):
|
if isinstance(dev_path, str):
|
||||||
dev_path = Path(dev_path)
|
dev_path = Path(dev_path)
|
||||||
|
|
||||||
for lsblk_info in info:
|
for lsblk_info in info_list:
|
||||||
if lsblk_info.path == dev_path:
|
if lsblk_info.path == dev_path:
|
||||||
return lsblk_info
|
return lsblk_info
|
||||||
|
|
||||||
|
|
@ -110,6 +110,43 @@ def disk_layouts() -> str:
|
||||||
return lsblk_output.model_dump_json(indent=4)
|
return lsblk_output.model_dump_json(indent=4)
|
||||||
|
|
||||||
|
|
||||||
|
def mount(
|
||||||
|
dev_path: Path,
|
||||||
|
target_mountpoint: Path,
|
||||||
|
mount_fs: str | None = None,
|
||||||
|
create_target_mountpoint: bool = True,
|
||||||
|
options: list[str] = [],
|
||||||
|
) -> None:
|
||||||
|
if create_target_mountpoint and not target_mountpoint.exists():
|
||||||
|
target_mountpoint.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
if not target_mountpoint.exists():
|
||||||
|
raise ValueError('Target mountpoint does not exist')
|
||||||
|
|
||||||
|
lsblk_info = get_lsblk_info(dev_path)
|
||||||
|
if target_mountpoint in lsblk_info.mountpoints:
|
||||||
|
info(f'Device already mounted at {target_mountpoint}')
|
||||||
|
return
|
||||||
|
|
||||||
|
cmd = ['mount']
|
||||||
|
|
||||||
|
if len(options):
|
||||||
|
cmd.extend(('-o', ','.join(options)))
|
||||||
|
if mount_fs:
|
||||||
|
cmd.extend(('-t', mount_fs))
|
||||||
|
|
||||||
|
cmd.extend((str(dev_path), str(target_mountpoint)))
|
||||||
|
|
||||||
|
command = ' '.join(cmd)
|
||||||
|
|
||||||
|
debug(f'Mounting {dev_path}: {command}')
|
||||||
|
|
||||||
|
try:
|
||||||
|
SysCommand(command)
|
||||||
|
except SysCallError as err:
|
||||||
|
raise DiskError(f'Could not mount {dev_path}: {command}\n{err.message}')
|
||||||
|
|
||||||
|
|
||||||
def umount(mountpoint: Path, recursive: bool = False) -> None:
|
def umount(mountpoint: Path, recursive: bool = False) -> None:
|
||||||
lsblk_info = get_lsblk_info(mountpoint)
|
lsblk_info = get_lsblk_info(mountpoint)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ from typing import Any, Self
|
||||||
|
|
||||||
from archinstall.lib.disk.device_handler import device_handler
|
from archinstall.lib.disk.device_handler import device_handler
|
||||||
from archinstall.lib.disk.fido import Fido2
|
from archinstall.lib.disk.fido import Fido2
|
||||||
from archinstall.lib.disk.utils import get_lsblk_by_mountpoint, get_lsblk_info
|
from archinstall.lib.disk.utils import get_lsblk_by_mountpoint, get_lsblk_info, mount
|
||||||
from archinstall.lib.models.application import ZramAlgorithm
|
from archinstall.lib.models.application import ZramAlgorithm
|
||||||
from archinstall.lib.models.device import (
|
from archinstall.lib.models.device import (
|
||||||
DiskEncryption,
|
DiskEncryption,
|
||||||
|
|
@ -360,7 +360,7 @@ class Installer:
|
||||||
# it would be none if it's btrfs as the subvolumes will have the mountpoints defined
|
# it would be none if it's btrfs as the subvolumes will have the mountpoints defined
|
||||||
if part_mod.mountpoint:
|
if part_mod.mountpoint:
|
||||||
target = self.target / part_mod.relative_mountpoint
|
target = self.target / part_mod.relative_mountpoint
|
||||||
device_handler.mount(part_mod.dev_path, target, options=part_mod.mount_options)
|
mount(part_mod.dev_path, target, options=part_mod.mount_options)
|
||||||
elif part_mod.fs_type == FilesystemType.Btrfs:
|
elif part_mod.fs_type == FilesystemType.Btrfs:
|
||||||
# Only mount BTRFS subvolumes that have mountpoints specified
|
# Only mount BTRFS subvolumes that have mountpoints specified
|
||||||
subvols_with_mountpoints = [sv for sv in part_mod.btrfs_subvols if sv.mountpoint is not None]
|
subvols_with_mountpoints = [sv for sv in part_mod.btrfs_subvols if sv.mountpoint is not None]
|
||||||
|
|
@ -377,7 +377,7 @@ class Installer:
|
||||||
if volume.fs_type != FilesystemType.Btrfs:
|
if volume.fs_type != FilesystemType.Btrfs:
|
||||||
if volume.mountpoint and volume.dev_path:
|
if volume.mountpoint and volume.dev_path:
|
||||||
target = self.target / volume.relative_mountpoint
|
target = self.target / volume.relative_mountpoint
|
||||||
device_handler.mount(volume.dev_path, target, options=volume.mount_options)
|
mount(volume.dev_path, target, options=volume.mount_options)
|
||||||
|
|
||||||
if volume.fs_type == FilesystemType.Btrfs and volume.dev_path:
|
if volume.fs_type == FilesystemType.Btrfs and volume.dev_path:
|
||||||
# Only mount BTRFS subvolumes that have mountpoints specified
|
# Only mount BTRFS subvolumes that have mountpoints specified
|
||||||
|
|
@ -396,13 +396,13 @@ class Installer:
|
||||||
self._mount_btrfs_subvol(luks_handler.mapper_dev, part_mod.btrfs_subvols, part_mod.mount_options)
|
self._mount_btrfs_subvol(luks_handler.mapper_dev, part_mod.btrfs_subvols, part_mod.mount_options)
|
||||||
elif part_mod.mountpoint:
|
elif part_mod.mountpoint:
|
||||||
target = self.target / part_mod.relative_mountpoint
|
target = self.target / part_mod.relative_mountpoint
|
||||||
device_handler.mount(luks_handler.mapper_dev, target, options=part_mod.mount_options)
|
mount(luks_handler.mapper_dev, target, options=part_mod.mount_options)
|
||||||
|
|
||||||
def _mount_luks_volume(self, volume: LvmVolume, luks_handler: Luks2) -> None:
|
def _mount_luks_volume(self, volume: LvmVolume, luks_handler: Luks2) -> None:
|
||||||
if volume.fs_type != FilesystemType.Btrfs:
|
if volume.fs_type != FilesystemType.Btrfs:
|
||||||
if volume.mountpoint and luks_handler.mapper_dev:
|
if volume.mountpoint and luks_handler.mapper_dev:
|
||||||
target = self.target / volume.relative_mountpoint
|
target = self.target / volume.relative_mountpoint
|
||||||
device_handler.mount(luks_handler.mapper_dev, target, options=volume.mount_options)
|
mount(luks_handler.mapper_dev, target, options=volume.mount_options)
|
||||||
|
|
||||||
if volume.fs_type == FilesystemType.Btrfs and luks_handler.mapper_dev:
|
if volume.fs_type == FilesystemType.Btrfs and luks_handler.mapper_dev:
|
||||||
# Only mount BTRFS subvolumes that have mountpoints specified
|
# Only mount BTRFS subvolumes that have mountpoints specified
|
||||||
|
|
@ -421,7 +421,7 @@ class Installer:
|
||||||
for subvol in sorted(subvols_with_mountpoints, key=lambda x: x.relative_mountpoint):
|
for subvol in sorted(subvols_with_mountpoints, key=lambda x: x.relative_mountpoint):
|
||||||
mountpoint = self.target / subvol.relative_mountpoint
|
mountpoint = self.target / subvol.relative_mountpoint
|
||||||
options = mount_options + [f'subvol={subvol.name}']
|
options = mount_options + [f'subvol={subvol.name}']
|
||||||
device_handler.mount(dev_path, mountpoint, options=options)
|
mount(dev_path, mountpoint, options=options)
|
||||||
|
|
||||||
def generate_key_files(self) -> None:
|
def generate_key_files(self) -> None:
|
||||||
match self._disk_encryption.encryption_type:
|
match self._disk_encryption.encryption_type:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue