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-06-11 17:22:20 +0200
committerAnton Hvornum <anton@hvornum.se>2021-06-11 17:22:20 +0200
commit24476ac1f696c882fb2f741cb8c5fa858f786f46 (patch)
treed380ff03b75fe09f27b750c19937cf0843c4a8c2
parent0a8c061ab405e244a187b4615654ecca2e538156 (diff)
Made it so that the .partitions property of Install() fetches from live data, rather than storing and caching partitions on initation. Since it now supports mounting a partition layout given by external usage.
-rw-r--r--archinstall/lib/disk.py11
-rw-r--r--archinstall/lib/installer.py5
-rw-r--r--examples/guided.py6
3 files changed, 13 insertions, 9 deletions
diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py
index 8e9d0d3f..7a7fce5e 100644
--- a/archinstall/lib/disk.py
+++ b/archinstall/lib/disk.py
@@ -636,7 +636,7 @@ class Filesystem:
:param string: A raw string passed to /usr/bin/parted -s <string>
:type string: str
"""
- return self.raw_parted(string).exit_code
+ return self.raw_parted(string).exit_code == 0
def use_entire_disk(self, root_filesystem_type='ext4') -> Partition:
# TODO: Implement this with declarative profiles instead.
@@ -652,20 +652,22 @@ class Filesystem:
DiskError("Too many partitions on disk, MBR disks can only have 3 parimary partitions")
if partition_format:
- partitioning = self.parted(f'{self.blockdevice.device} mkpart {partition_type} {partition_format} {start} {end}') == 0
+ parted_string = f'{self.blockdevice.device} mkpart {partition_type} {partition_format} {start} {end}'
else:
- partitioning = self.parted(f'{self.blockdevice.device} mkpart {partition_type} {start} {end}') == 0
+ parted_string = f'{self.blockdevice.device} mkpart {partition_type} {start} {end}'
- if partitioning:
+ if self.parted(parted_string):
start_wait = time.time()
while previous_partition_uuids == {partition.uuid for partition in self.blockdevice.partitions.values()}:
if time.time() - start_wait > 10:
raise DiskError(f"New partition never showed up after adding new partition on {self} (timeout 10 seconds).")
time.sleep(0.025)
+
time.sleep(0.5) # Let the kernel catch up with quick block devices (nvme for instance)
return self.blockdevice.get_partition(uuid=(previous_partition_uuids ^ {partition.uuid for partition in self.blockdevice.partitions.values()}).pop())
+
def set_name(self, partition: int, name: str):
return self.parted(f'{self.blockdevice.device} name {partition + 1} "{name}"') == 0
@@ -673,6 +675,7 @@ class Filesystem:
return self.parted(f'{self.blockdevice.device} set {partition + 1} {string}') == 0
def parted_mklabel(self, device: str, disk_label: str):
+ log(f"Creating a new partition labling on {device}", level=logging.INFO, fg="yellow")
# Try to unmount devices before attempting to run mklabel
try:
SysCommand(f'bash -c "umount {device}?"')
diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py
index b62b9595..91c55b33 100644
--- a/archinstall/lib/installer.py
+++ b/archinstall/lib/installer.py
@@ -57,7 +57,6 @@ class Installer:
self.post_base_install = []
storage['session'] = self
- self.partitions = get_partitions_in_use(self.target)
self.MODULES = []
self.BINARIES = []
@@ -108,6 +107,10 @@ class Installer:
self.sync_log_to_install_medium()
return False
+ @property
+ def partitions(self):
+ return get_partitions_in_use(self.target)
+
def sync_log_to_install_medium(self):
# Copy over the install log (if there is one) to the install medium if
# at least the base has been strapped in, otherwise we won't have a filesystem/structure to copy to.
diff --git a/examples/guided.py b/examples/guided.py
index 527fc67c..5a9f2b49 100644
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -224,8 +224,6 @@ def perform_filesystem_operations():
with archinstall.Filesystem(drive, mode) as fs:
fs.load_layout(archinstall.storage['disk_layouts'][drive])
- perform_installation(archinstall.storage.get('MOUNT_POINT', '/mnt'))
-
def perform_installation(mountpoint):
"""
@@ -308,7 +306,7 @@ def perform_installation(mountpoint):
# This step must be after profile installs to allow profiles to install language pre-requisits.
# After which, this step will set the language both for console and x11 if x11 was installed for instance.
- installation.set_keyboard_language(archinstall.arguments['keyboard-language'])
+ installation.set_keyboard_language(archinstall.arguments['keyboard-layout'])
if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_post_install():
with archinstall.arguments['profile'].load_instructions(namespace=f"{archinstall.arguments['profile'].namespace}.py") as imported:
@@ -375,4 +373,4 @@ else:
archinstall.storage['gfx_driver_packages'] = AVAILABLE_GFX_DRIVERS.get(archinstall.arguments.get('gfx_driver', None), None)
perform_filesystem_operations()
-perform_installation(archinstall.arguments.get('target-mountpoint', None))
+perform_installation(archinstall.storage.get('MOUNT_POINT', '/mnt')) \ No newline at end of file