parent
a8862e9b24
commit
b63cf7cb15
|
|
@ -4,7 +4,6 @@ import os
|
||||||
import pathlib
|
import pathlib
|
||||||
|
|
||||||
import archinstall
|
import archinstall
|
||||||
import glob
|
|
||||||
|
|
||||||
def load_mirror():
|
def load_mirror():
|
||||||
if archinstall.arguments.get('mirror-region', None) is not None:
|
if archinstall.arguments.get('mirror-region', None) is not None:
|
||||||
|
|
@ -27,20 +26,6 @@ def load_harddrives():
|
||||||
archinstall.arguments['harddrives'] = [archinstall.BlockDevice(BlockDev) for BlockDev in archinstall.arguments['harddrives']]
|
archinstall.arguments['harddrives'] = [archinstall.BlockDevice(BlockDev) for BlockDev in archinstall.arguments['harddrives']]
|
||||||
# Temporarily disabling keep_partitions if config file is loaded
|
# Temporarily disabling keep_partitions if config file is loaded
|
||||||
|
|
||||||
def load_disk_layouts():
|
|
||||||
if archinstall.arguments.get('disk_layouts', None) is not None:
|
|
||||||
dl_path = pathlib.Path(archinstall.arguments['disk_layouts'])
|
|
||||||
if dl_path.exists(): # and str(dl_path).endswith('.json'):
|
|
||||||
try:
|
|
||||||
with open(dl_path) as fh:
|
|
||||||
archinstall.storage['disk_layouts'] = json.load(fh)
|
|
||||||
except Exception as e:
|
|
||||||
raise ValueError(f"--disk_layouts does not contain a valid JSON format: {e}")
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
archinstall.storage['disk_layouts'] = json.loads(archinstall.arguments['disk_layouts'])
|
|
||||||
except:
|
|
||||||
raise ValueError("--disk_layouts=<json> needs either a JSON file or a JSON string given with a valid disk layout.")
|
|
||||||
|
|
||||||
def ask_harddrives():
|
def ask_harddrives():
|
||||||
# Ask which harddrives/block-devices we will install to
|
# Ask which harddrives/block-devices we will install to
|
||||||
|
|
@ -106,7 +91,6 @@ def load_config():
|
||||||
load_localization()
|
load_localization()
|
||||||
load_gfxdriver()
|
load_gfxdriver()
|
||||||
load_servers()
|
load_servers()
|
||||||
load_disk_layouts()
|
|
||||||
|
|
||||||
def ask_user_questions():
|
def ask_user_questions():
|
||||||
"""
|
"""
|
||||||
|
|
@ -169,40 +153,6 @@ def perform_disk_operations():
|
||||||
with archinstall.Filesystem(drive, mode) as fs:
|
with archinstall.Filesystem(drive, mode) as fs:
|
||||||
fs.load_layout(dl_disk)
|
fs.load_layout(dl_disk)
|
||||||
|
|
||||||
|
|
||||||
def create_subvolume(installation_mountpoint, subvolume_location):
|
|
||||||
"""
|
|
||||||
This function uses btrfs to create a subvolume.
|
|
||||||
|
|
||||||
@installation: archinstall.Installer instance
|
|
||||||
@subvolume_location: a localized string or path inside the installation / or /boot for instance without specifying /mnt/boot
|
|
||||||
"""
|
|
||||||
if type(installation_mountpoint) == str:
|
|
||||||
installation_mountpoint_path = pathlib.Path(installation_mountpoint)
|
|
||||||
else:
|
|
||||||
installation_mountpoint_path = installation_mountpoint
|
|
||||||
# Set up the required physical structure
|
|
||||||
if type(subvolume_location) == str:
|
|
||||||
subvolume_location = pathlib.Path(subvolume_location)
|
|
||||||
|
|
||||||
target = installation_mountpoint_path / subvolume_location.relative_to(subvolume_location.anchor)
|
|
||||||
|
|
||||||
# Difference from mount_subvolume:
|
|
||||||
# We only check if the parent exists, since we'll run in to "target path already exists" otherwise
|
|
||||||
if not target.parent.exists():
|
|
||||||
target.parent.mkdir(parents=True)
|
|
||||||
|
|
||||||
if glob.glob(str(target / '*')):
|
|
||||||
raise archinstall.DiskError(f"Cannot create subvolume at {target} because it contains data (non-empty folder target)")
|
|
||||||
|
|
||||||
# Remove the target if it exists. It is nor incompatible to the previous
|
|
||||||
if target.exists():
|
|
||||||
target.rmdir()
|
|
||||||
|
|
||||||
archinstall.log(f"Creating a subvolume on {target}", level=logging.INFO)
|
|
||||||
if (cmd := archinstall.SysCommand(f"btrfs subvolume create {target}")).exit_code != 0:
|
|
||||||
raise archinstall.DiskError(f"Could not create a subvolume at {target}: {cmd}")
|
|
||||||
|
|
||||||
def perform_installation(mountpoint):
|
def perform_installation(mountpoint):
|
||||||
"""
|
"""
|
||||||
Performs the installation steps on a block device.
|
Performs the installation steps on a block device.
|
||||||
|
|
@ -220,6 +170,10 @@ def perform_installation(mountpoint):
|
||||||
if partition.mountpoint == installation.target + '/boot':
|
if partition.mountpoint == installation.target + '/boot':
|
||||||
if partition.size <= 0.25: # in GB
|
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.")
|
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.")
|
||||||
|
# to generate a fstab directory holder. Avoids an error on exit and at the same time checks the procedure
|
||||||
|
target = pathlib.Path(f"{mountpoint}/etc/fstab")
|
||||||
|
if not target.parent.exists():
|
||||||
|
target.parent.mkdir(parents=True)
|
||||||
|
|
||||||
# For support reasons, we'll log the disk layout post installation (crash or no crash)
|
# For support reasons, we'll log the disk layout post installation (crash or no crash)
|
||||||
archinstall.log(f"Disk states after installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
|
archinstall.log(f"Disk states after installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue