Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Hvornum <anton@hvornum.se>2021-10-30 16:28:55 +0200
committerAnton Hvornum <anton@hvornum.se>2021-10-30 16:28:55 +0200
commitc4f688ce4c9ce89748e11bd0565c9b3720e66b74 (patch)
tree7792db9e35cc3aedaf7e2e9f8a58a43a37bbb061
parent6be071b6e0d43a2fded8a3fd773525fb1216aa91 (diff)
Added some error handling to mount points not getting mounted properly.
-rw-r--r--archinstall/lib/disk/btrfs.py2
-rw-r--r--archinstall/lib/disk/helpers.py5
-rw-r--r--archinstall/lib/installer.py7
3 files changed, 12 insertions, 2 deletions
diff --git a/archinstall/lib/disk/btrfs.py b/archinstall/lib/disk/btrfs.py
index b56430b8..cf60095f 100644
--- a/archinstall/lib/disk/btrfs.py
+++ b/archinstall/lib/disk/btrfs.py
@@ -25,7 +25,7 @@ def mount_subvolume(installation, location :Union[pathlib.Path, str], force=Fals
raise DiskError(f"Cannot mount subvolume to {installation.target/location} because it contains data (non-empty folder target)")
log(f"Mounting {location} as a subvolume", level=logging.INFO)
- print(get_mount_info(installation.target/location))
+ print(get_mount_info(installation.target/location, traverse=True))
# Mount the logical volume to the physical structure
mount_location = get_mount_info(installation.target/location)['source']
SysCommand(f"umount {mount_location}")
diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py
index 0111d327..8a6d5a48 100644
--- a/archinstall/lib/disk/helpers.py
+++ b/archinstall/lib/disk/helpers.py
@@ -116,7 +116,7 @@ def harddrive(size=None, model=None, fuzzy=False):
return collection[drive]
-def get_mount_info(path :Union[pathlib.Path, str]) -> dict:
+def get_mount_info(path :Union[pathlib.Path, str], traverse=False) -> dict:
for traversal in list(map(str, [str(path)] + list(pathlib.Path(str(path)).parents))):
try:
output = SysCommand(f'/usr/bin/findmnt --json {traversal}').decode('UTF-8')
@@ -125,6 +125,9 @@ def get_mount_info(path :Union[pathlib.Path, str]) -> dict:
except SysCallError:
pass
+ if not traverse:
+ break
+
if not output:
return {}
diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py
index 41d918a1..b0a7c5f1 100644
--- a/archinstall/lib/installer.py
+++ b/archinstall/lib/installer.py
@@ -1,11 +1,14 @@
+import time
from .disk import *
from .hardware import *
from .locale_helpers import verify_keyboard_layout, verify_x11_keyboard_layout
+from .helpers import get_mount_info
from .mirrors import *
from .plugins import plugins
from .storage import storage
from .user_interaction import *
from .disk.btrfs import create_subvolume, mount_subvolume
+from .exceptions import DiskError, ServiceException
# Any package that the Installer() is responsible for (optional and the default ones)
__packages__ = ["base", "base-devel", "linux-firmware", "linux", "linux-lts", "linux-zen", "linux-hardened"]
@@ -144,6 +147,10 @@ class Installer:
else:
mountpoints[mountpoint]['device_instance'].mount(f"{self.target}{mountpoint}")
+ time.sleep(1)
+ if not get_mount_info(f"{self.target}{mountpoint}", traverse=False):
+ raise DiskError(f"Target {self.target}{mountpoint} never got mounted properly.")
+
if (subvolumes := mountpoints[mountpoint].get('btrfs', {}).get('subvolumes', {})):
for name, location in subvolumes.items():
create_subvolume(self, location)