index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | Anton Hvornum <anton@hvornum.se> | 2021-11-23 11:37:51 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-23 11:37:51 +0000 |
commit | 6b6c9c84bed1e4640f5f46282da1767827f977a9 (patch) | |
tree | 9a6750bd296e18cb36189ea06808524c1619d4e8 | |
parent | e15697119116487f84e72a22e99f8e46d714f21f (diff) |
-rw-r--r-- | archinstall/lib/disk/blockdevice.py | 8 | ||||
-rw-r--r-- | archinstall/lib/disk/helpers.py | 4 | ||||
-rw-r--r-- | archinstall/lib/disk/partition.py | 19 | ||||
-rw-r--r-- | examples/guided.py | 6 |
diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index b3195784..c4802a5f 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -2,13 +2,12 @@ import os import json import logging import time +from .helpers import convert_size_to_gb from ..exceptions import DiskError from ..output import log from ..general import SysCommand from ..storage import storage -GIGA = 2 ** 30 - class BlockDevice: def __init__(self, path, info=None): if not info: @@ -155,15 +154,12 @@ class BlockDevice: for partition in json.loads(SysCommand(f'lsblk -J -o+UUID {self.path}').decode('UTF-8'))['blockdevices']: return partition.get('uuid', None) - def convert_size_to_gb(self, size): - return round(size / GIGA,1) - @property def size(self): output = json.loads(SysCommand(f"lsblk --json -b -o+SIZE {self.path}").decode('UTF-8')) for device in output['blockdevices']: - return self.convert_size_to_gb(device['size']) + return convert_size_to_gb(device['size']) @property def bus_type(self): diff --git a/archinstall/lib/disk/helpers.py b/archinstall/lib/disk/helpers.py index fea9ef65..46d86bd5 100644 --- a/archinstall/lib/disk/helpers.py +++ b/archinstall/lib/disk/helpers.py @@ -10,6 +10,10 @@ from ..general import SysCommand from ..output import log ROOT_DIR_PATTERN = re.compile('^.*?/devices') +GIGA = 2 ** 30 + +def convert_size_to_gb(size): + return round(size / GIGA,1) def sort_block_devices_based_on_performance(block_devices): result = {device: 0 for device in block_devices} diff --git a/archinstall/lib/disk/partition.py b/archinstall/lib/disk/partition.py index 4aea3832..b27c8459 100644 --- a/archinstall/lib/disk/partition.py +++ b/archinstall/lib/disk/partition.py @@ -7,7 +7,7 @@ import os import hashlib from typing import Optional from .blockdevice import BlockDevice -from .helpers import get_mount_info, get_filesystem_type +from .helpers import get_mount_info, get_filesystem_type, convert_size_to_gb from ..storage import storage from ..exceptions import DiskError, SysCallError, UnknownFilesystemFormat from ..output import log @@ -111,17 +111,26 @@ class Partition: return partition['size'] # * self.sector_size @property + def size(self): + for i in range(storage['DISK_RETRY_ATTEMPTS']): + self.partprobe() + + if (handle := SysCommand(f"lsblk --json -b -o+SIZE {self.path}")).exit_code == 0: + lsblk = json.loads(handle.decode('UTF-8')) + + for device in lsblk['blockdevices']: + return convert_size_to_gb(device['size']) + + time.sleep(storage['DISK_TIMEOUTS']) + + @property def boot(self): output = json.loads(SysCommand(f"sfdisk --json {self.block_device.path}").decode('UTF-8')) # Get the bootable flag from the sfdisk output: # { # "partitiontable": { - # "label":"dos", - # "id":"0xd202c10a", # "device":"/dev/loop0", - # "unit":"sectors", - # "sectorsize":512, # "partitions": [ # {"node":"/dev/loop0p1", "start":2048, "size":10483712, "type":"83", "bootable":true} # ] diff --git a/examples/guided.py b/examples/guided.py index e48ad89d..1ee31d38 100644 --- a/examples/guided.py +++ b/examples/guided.py @@ -264,6 +264,12 @@ def perform_installation(mountpoint): # This *can* be done outside of the installation, but the installer can deal with it. installation.mount_ordered_layout(archinstall.storage['disk_layouts']) + # Placing /boot check during installation because this will catch both re-use and wipe scenarios. + for partition in installation.partitions: + if partition.mountpoint == installation.target + '/boot': + if partition.size <= 0.25: # in GB + raise archinstall.DiskError(f"The selected /boot partition in use is not large enough to properly install a boot loader. Please resize it to at least 256MB and re-run the installation.") + # if len(mirrors): # Certain services might be running that affects the system during installation. # Currently, only one such service is "reflector.service" which updates /etc/pacman.d/mirrorlist |