Created a routine to check if a partition includes a certain mountpoint (#1069)

For a btrfs volume with a subvolume to be mounted on /, we will not generate a keyfile anymore
This commit is contained in:
Werner Llácer 2022-04-25 08:57:49 +02:00 committed by GitHub
parent 15c594bcba
commit a14604a1b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 2 deletions

View File

@ -440,3 +440,35 @@ def convert_device_to_uuid(path :str) -> str:
time.sleep(storage['DISK_TIMEOUTS']) time.sleep(storage['DISK_TIMEOUTS'])
raise DiskError(f"Could not retrieve the UUID of {path} within a timely manner.") raise DiskError(f"Could not retrieve the UUID of {path} within a timely manner.")
def has_mountpoint(partition: Union[dict,Partition,MapperDev], target: str, strict: bool = True) -> bool:
""" Determine if a certain partition is mounted (or has a mountpoint) as specific target (path)
Coded for clarity rather than performance
Input parms:
:parm partition the partition we check
:type Either a Partition object or a dict with the contents of a partition definiton in the disk_layouts schema
:parm target (a string representing a mount path we want to check for.
:type str
:parm strict if the check will be strict, target is exactly the mountpoint, or no, where the target is a leaf (f.i. to check if it is in /mnt/archinstall/). Not available for root check ('/') for obvious reasons
"""
# we create the mountpoint list
if isinstance(partition,dict):
subvols = partition.get('btrfs',{}).get('subvolumes',{})
mountpoints = [partition.get('mountpoint'),] + [subvols[subvol] if isinstance(subvols[subvol],str) or not subvols[subvol] else subvols[subvol].get('mountpoint') for subvol in subvols]
else:
mountpoints = [partition.mountpoint,] + [subvol.target for subvol in partition.subvolumes]
# we check
if strict or target == '/':
if target in mountpoints:
return True
else:
return False
else:
for mp in mountpoints:
if mp and mp.endswith(target):
return True
return False

View File

@ -6,6 +6,7 @@ from ..menu import Menu
from ..output import log from ..output import log
from ..disk.validators import fs_types from ..disk.validators import fs_types
from ..disk.helpers import has_mountpoint
if TYPE_CHECKING: if TYPE_CHECKING:
from ..disk import BlockDevice from ..disk import BlockDevice
@ -325,7 +326,7 @@ def select_encrypted_partitions(block_devices: dict, password: str) -> dict:
partition['encrypted'] = True partition['encrypted'] = True
partition['!password'] = password partition['!password'] = password
if partition['mountpoint'] != '/': if not has_mountpoint(partition,'/'):
# Tell the upcoming steps to generate a key-file for non root mounts. # Tell the upcoming steps to generate a key-file for non root mounts.
partition['generate-encryption-key-file'] = True partition['generate-encryption-key-file'] = True