Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:hopeandtruth6517:storage
calamares
3.3.1-mount.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 3.3.1-mount.patch of Package calamares
diff -ruN a/src/modules/mount/main.py b/src/modules/mount/main.py --- a/src/modules/mount/main.py 2024-03-20 10:16:59.219995317 -0600 +++ b/src/modules/mount/main.py 2023-06-02 08:08:11.000000000 -0600 @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - <https://calamares.io> === @@ -16,7 +16,6 @@ import tempfile import subprocess import os -import re import libcalamares @@ -43,79 +42,6 @@ return _("Mounting partitions.") -def disk_name_for_partition(partition): - """ Returns disk name for each found partition. - - :param partition: - :return: - """ - name = os.path.basename(partition["device"]) - - if name.startswith("/dev/mmcblk") or name.startswith("/dev/nvme"): - return re.sub("p[0-9]+$", "", name) - - return re.sub("[0-9]+$", "", name) - - -def is_ssd_disk(partition): - """ Checks if given partition is on an ssd disk. - - :param partition: A dict containing the partition information - :return: True is the partition in on an ssd, False otherwise - """ - - try: - disk_name = disk_name_for_partition(partition) - filename = os.path.join("/sys/block", disk_name, "queue/rotational") - - with open(filename) as sysfile: - return sysfile.read() == "0\n" - except: - return False - - -def get_mount_options(filesystem, mount_options, partition): - """ - Returns the mount options for the partition object and filesystem - - :param filesystem: A string containing the filesystem - :param mount_options: A list of dicts that descripes the mount options for each mountpoint - :param partition: A dict containing information about the partition - :return: A comma seperated string containing the mount options suitable for passing to mount - """ - - # Extra mounts can optionally have "options" set, in this case, they override other all other settings - if "options" in partition: - return ",".join(partition["options"]) - - # If there are no mount options defined then we use the defaults - if mount_options is None: - return "defaults" - - options = next((x for x in mount_options if x["filesystem"] == filesystem), None) - - # If there is no match then check for default options - if options is None: - options = next((x for x in mount_options if x["filesystem"] == "default"), None) - - # If it is still None, then fallback to returning defaults - if options is None: - return "defaults" - - option_items = options.get("options", []).copy() - - # Append the appropriate options for ssd or hdd if set - if is_ssd_disk(partition): - option_items.extend(options.get("ssdOptions", [])) - else: - option_items.extend(options.get("hddOptions", [])) - - if option_items: - return ",".join(option_items) - else: - return "defaults" - - def get_btrfs_subvolumes(partitions): """ Gets the job-configuration for btrfs subvolumes, or if there is @@ -143,9 +69,7 @@ # If we have a swap **file**, give it a separate subvolume. swap_choice = libcalamares.globalstorage.value("partitionChoices") if swap_choice and swap_choice.get("swap", None) == "file": - swap_subvol = libcalamares.job.configuration.get("btrfsSwapSubvol", "/@swap") - btrfs_subvolumes.append({'mountPoint': '/swap', 'subvolume': swap_subvol}) - libcalamares.globalstorage.insert("btrfsSwapSubvol", swap_subvol) + btrfs_subvolumes.append({'mountPoint': '/swap', 'subvolume': '/@swap'}) return btrfs_subvolumes @@ -214,16 +138,9 @@ raise ZfsException(_("Failed to set zfs mountpoint")) -def mount_partition(root_mount_point, partition, partitions, mount_options, mount_options_list): +def mount_partition(root_mount_point, partition, partitions): """ Do a single mount of @p partition inside @p root_mount_point. - - :param root_mount_point: A string containing the root of the install - :param partition: A dict containing information about the partition - :param partitions: The full list of partitions used to filter out btrfs subvols which have duplicate mountpoints - :param mount_options: The mount options from the config file - :param mount_options_list: A list of options for each mountpoint to be placed in global storage for future modules - :return: """ # Create mount point with `+` rather than `os.path.join()` because # `partition["mountPoint"]` starts with a '/'. @@ -259,13 +176,11 @@ if fstype == "zfs": mount_zfs(root_mount_point, partition) else: # fstype == "zfs" - mount_options_string = get_mount_options(fstype, mount_options, partition) if libcalamares.utils.mount(device, mount_point, fstype, - mount_options_string) != 0: + partition.get("options", "")) != 0: libcalamares.utils.warning("Cannot mount {}".format(device)) - mount_options_list.append({"mountpoint": raw_mount_point, "option_string": mount_options_string}) # Special handling for btrfs subvolumes. Create the subvolumes listed in mount.conf if fstype == "btrfs" and partition["mountPoint"] == '/': @@ -292,41 +207,21 @@ device = os.path.join("/dev/mapper", partition["luksMapperName"]) # Mount the subvolumes - swap_subvol = libcalamares.job.configuration.get("btrfsSwapSubvol", "/@swap") for s in btrfs_subvolumes: - if s['subvolume'] == swap_subvol: - mount_option_no_subvol = get_mount_options("btrfs_swap", mount_options, partition) - else: - mount_option_no_subvol = get_mount_options(fstype, mount_options, partition) - - # Only add subvol= argument if we are not mounting the entire filesystem - if s['subvolume']: - mount_option = f"subvol={s['subvolume']},{mount_option_no_subvol}" - else: - mount_option = mount_option_no_subvol + mount_option = "subvol={}".format(s['subvolume']) subvolume_mountpoint = mount_point[:-1] + s['mountPoint'] - mount_options_list.append({"mountpoint": s['mountPoint'], "option_string": mount_option_no_subvol}) if libcalamares.utils.mount(device, subvolume_mountpoint, fstype, - mount_option) != 0: + ",".join([mount_option, partition.get("options", "")])) != 0: libcalamares.utils.warning("Cannot mount {}".format(device)) -def enable_swap_partition(devices): - try: - for d in devices: - libcalamares.utils.host_env_process_output(["swapon", d]) - except subprocess.CalledProcessError: - libcalamares.utils.warning(f"Failed to enable swap for devices: {devices}") - - def run(): """ Mount all the partitions from GlobalStorage and from the job configuration. Partitions are mounted in-lexical-order of their mountPoint. """ - partitions = libcalamares.globalstorage.value("partitions") if not partitions: @@ -334,25 +229,16 @@ return (_("Configuration Error"), _("No partitions are defined for <pre>{!s}</pre> to use.").format("mount")) - # Find existing swap partitions that are part of the installation and enable them now - swap_devices = [p["device"] for p in partitions if (p["fs"] == "linuxswap" and p.get("claimed", False))] - - enable_swap_partition(swap_devices) - root_mount_point = tempfile.mkdtemp(prefix="calamares-root-") - # Get the mountOptions, if this is None, that is OK and will be handled later - mount_options = libcalamares.job.configuration.get("mountOptions") - # Guard against missing keys (generally a sign that the config file is bad) extra_mounts = libcalamares.job.configuration.get("extraMounts") or [] - if not extra_mounts: + extra_mounts_efi = libcalamares.job.configuration.get("extraMountsEfi") or [] + if not extra_mounts and not extra_mounts_efi: libcalamares.utils.warning("No extra mounts defined. Does mount.conf exist?") - if libcalamares.globalstorage.value("firmwareType") != "efi": - for mount in extra_mounts: - if mount.get("efi", None) is True: - extra_mounts.remove(mount) + if libcalamares.globalstorage.value("firmwareType") == "efi": + extra_mounts.extend(extra_mounts_efi) # Add extra mounts to the partitions list and sort by mount points. # This way, we ensure / is mounted before the rest, and every mount point @@ -360,20 +246,13 @@ # under /tmp, we make sure /tmp is mounted before the partition) mountable_partitions = [p for p in partitions + extra_mounts if "mountPoint" in p and p["mountPoint"]] mountable_partitions.sort(key=lambda x: x["mountPoint"]) - - # mount_options_list will be inserted into global storage for use in fstab later - mount_options_list = [] try: for partition in mountable_partitions: - mount_partition(root_mount_point, partition, partitions, mount_options, mount_options_list) + mount_partition(root_mount_point, partition, partitions) except ZfsException as ze: return _("zfs mounting error"), ze.message - if not mount_options_list: - libcalamares.utils.warning("No mount options defined, {!s} partitions, {!s} mountable".format(len(partitions), len(mountable_partitions))) - libcalamares.globalstorage.insert("rootMountPoint", root_mount_point) - libcalamares.globalstorage.insert("mountOptionsList", mount_options_list) # Remember the extra mounts for the unpackfs module libcalamares.globalstorage.insert("extraMounts", extra_mounts)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor