Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Hvornum <anton.feeds@gmail.com>2021-10-27 13:13:10 +0000
committerAnton Hvornum <anton.feeds@gmail.com>2021-10-27 13:13:10 +0000
commit68b891837c6174d1f75babf42ee6657d4726576b (patch)
tree251cd675cbcc45d48d89fc1ef32197f3dc5aacd4
parent7149b76f3bd3163938fe7413546e5f678f98851f (diff)
Finalized the create_subvolume and mount_subvolume functions. Remaining is to call these functions during the disk setup process to create the subvolumes and mount them in place, rather than doing the normal steps.
-rw-r--r--archinstall/lib/disk/btrfs.py36
-rw-r--r--archinstall/lib/disk/helpers.py4
2 files changed, 37 insertions, 3 deletions
diff --git a/archinstall/lib/disk/btrfs.py b/archinstall/lib/disk/btrfs.py
index d6758b3f..558a249e 100644
--- a/archinstall/lib/disk/btrfs.py
+++ b/archinstall/lib/disk/btrfs.py
@@ -1,4 +1,36 @@
+import pathlib, glob
+from typing import Union
+from .helpers import get_mount_info
+from ..exceptions import DiskError
from ..general import SysCommand
-def create_subvolume(installation):
- SysCommand(f"btrfs subvolume create {installation.target}/@") \ No newline at end of file
+def mount_subvolume(installation, location :Union[pathlib.Path, str], force=False) -> bool:
+ """
+ This function uses mount to mount a subvolume on a given device, at a given location with a given subvolume name.
+
+ @installation: archinstall.Installer instance
+ @location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot
+ @force: overrides the check for weither or not the subvolume mountpoint is empty or not
+ """
+ # Set up the required physical structure
+ if type(location) == str:
+ location = pathlib.Path(location)
+
+ if not location.exists():
+ location.mkdir(parents=True)
+
+ if glob.glob(str(installation.target/location/'*')) and force is False:
+ raise DiskError(f"Cannot mount subvolume to {installation.target/location} because it contains data (non-empty folder target)")
+
+ # Mount the logical volume to the physical structure
+ return SysCommand(f"mount {get_mount_info(installation.target/location)['source']} {installation.target}/{str(location)} -o subvol=@/{str(location)}").exit_code == 0
+
+def create_subvolume(installation, location :Union[pathlib.Path, str]) -> bool:
+ """
+ This function uses btrfs to create a subvolume.
+
+ @installation: archinstall.Installer instance
+ @location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot
+ """
+
+ SysCommand(f"btrfs subvolume create {installation.target}/{str(location)}") \ No newline at end of file
diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py
index 65abdea2..2e84a657 100644
--- a/archinstall/lib/disk/helpers.py
+++ b/archinstall/lib/disk/helpers.py
@@ -1,5 +1,7 @@
import re
import json
+import pathlib
+from typing import Union
from .blockdevice import BlockDevice
from ..exceptions import SysCallError
from ..general import SysCommand
@@ -114,7 +116,7 @@ def harddrive(size=None, model=None, fuzzy=False):
return collection[drive]
-def get_mount_info(path) -> dict:
+def get_mount_info(path :Union[pathlib.Path, str]) -> dict:
try:
output = SysCommand(f'/usr/bin/findmnt --json {path}').decode('UTF-8')
except SysCallError: