122 lines
4.4 KiB
Python
122 lines
4.4 KiB
Python
#
|
|
# Copyright (C) 2019 Red Hat, Inc.
|
|
#
|
|
# This copyrighted material is made available to anyone wishing to use,
|
|
# modify, copy, or redistribute it subject to the terms and conditions of
|
|
# the GNU General Public License v.2, or (at your option) any later version.
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY expressed or implied, including the implied warranties of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
# Public License for more details. You should have received a copy of the
|
|
# GNU General Public License along with this program; if not, write to the
|
|
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
|
|
# source code or documentation are not subject to the GNU General Public
|
|
# License and may only be used or replicated with the express permission of
|
|
# Red Hat, Inc.
|
|
#
|
|
from blivet import blockdev
|
|
from blivet import util as blivet_util, udev, arch
|
|
from blivet.devicelibs import crypto
|
|
from blivet.flags import flags as blivet_flags
|
|
from blivet.formats import get_device_format_class
|
|
from blivet.static_data import luks_data
|
|
|
|
from pyanaconda.anaconda_loggers import get_module_logger
|
|
from pyanaconda.anaconda_logging import program_log_lock
|
|
from pyanaconda.core.configuration.anaconda import conf
|
|
|
|
__all__ = ["enable_installer_mode"]
|
|
|
|
log = get_module_logger(__name__)
|
|
|
|
|
|
def enable_installer_mode():
|
|
"""Configure Blivet for use by Anaconda."""
|
|
blivet_util.program_log_lock = program_log_lock
|
|
|
|
# always enable the debug mode when in the installer mode so that we
|
|
# have more data in the logs for rare cases that are hard to reproduce
|
|
blivet_flags.debug = True
|
|
|
|
# We don't want image installs writing backups of the *image* metadata
|
|
# into the *host's* /etc/lvm. This can get real messy on build systems.
|
|
# Same applies to system.devices file that shouldn't be populated with
|
|
# PV names from the system that creates the image
|
|
if conf.target.is_image:
|
|
blivet_flags.lvm_metadata_backup = False
|
|
blivet_flags.lvm_devices_file = False
|
|
|
|
# Set the flags.
|
|
blivet_flags.auto_dev_updates = True
|
|
blivet_flags.selinux_reset_fcon = True
|
|
blivet_flags.keep_empty_ext_partitions = False
|
|
blivet_flags.discard_new = True
|
|
blivet_flags.selinux = conf.security.selinux
|
|
blivet_flags.ibft = conf.storage.ibft
|
|
blivet_flags.multipath_friendly_names = conf.storage.multipath_friendly_names
|
|
blivet_flags.allow_imperfect_devices = conf.storage.allow_imperfect_devices
|
|
blivet_flags.btrfs_compression = conf.storage.btrfs_compression
|
|
|
|
# Platform class setup depends on flags, re-initialize it.
|
|
_set_default_label_type()
|
|
|
|
# Set the minimum required entropy.
|
|
luks_data.min_entropy = crypto.MIN_CREATE_ENTROPY
|
|
|
|
# Load plugins.
|
|
if arch.is_s390():
|
|
_load_plugin_s390()
|
|
|
|
# Set the device name regexes to ignore.
|
|
udev.ignored_device_names = [
|
|
r'^mtd',
|
|
r'^mmcblk.+boot',
|
|
r'^mmcblk.+rpmb',
|
|
r'^zram',
|
|
r'^ndblk',
|
|
r'^pmem[0-9]+$',
|
|
]
|
|
|
|
# We need this so all the /dev/disk/* stuff is set up.
|
|
udev.trigger(subsystem="block", action="change")
|
|
|
|
|
|
def _set_default_label_type():
|
|
"""Set up the default label type."""
|
|
if not conf.storage.disk_label_type:
|
|
return
|
|
|
|
disklabel_class = get_device_format_class("disklabel")
|
|
supported_types = disklabel_class.get_platform_label_types()
|
|
default_type = supported_types[0] if supported_types else None
|
|
requested_type = conf.storage.disk_label_type
|
|
|
|
if requested_type == "mbr":
|
|
requested_type = "msdos"
|
|
|
|
if requested_type in supported_types:
|
|
disklabel_class.set_default_label_type(requested_type)
|
|
else:
|
|
log.warning(
|
|
"The requested disk label type '%s' is not supported on "
|
|
"this platform. Using the default disk label '%s' instead.",
|
|
conf.storage.disk_label_type, default_type
|
|
)
|
|
|
|
|
|
def _load_plugin_s390():
|
|
"""Load the s390x plugin."""
|
|
# Don't load the plugin in a dir installation.
|
|
if conf.target.is_directory:
|
|
return
|
|
|
|
# Is the plugin loaded? We are done then.
|
|
if "s390" in blockdev.get_available_plugin_names():
|
|
return
|
|
|
|
# Otherwise, load the plugin.
|
|
plugin = blockdev.PluginSpec()
|
|
plugin.name = blockdev.Plugin.S390
|
|
plugin.so_name = None
|
|
blockdev.reinit([plugin], reload=False)
|