362 lines
9.8 KiB
Python
362 lines
9.8 KiB
Python
|
#
|
||
|
# DBus structures for the partitioning data.
|
||
|
#
|
||
|
# Copyright (C) 2018 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 dasbus.structure import DBusData, generate_string_from_data
|
||
|
from dasbus.typing import * # pylint: disable=wildcard-import
|
||
|
|
||
|
from pyanaconda.core.configuration.anaconda import conf
|
||
|
|
||
|
__all__ = ["PartitioningRequest", "MountPointRequest"]
|
||
|
|
||
|
|
||
|
class PartitioningRequest(DBusData):
|
||
|
"""Partitioning request data."""
|
||
|
|
||
|
def __init__(self):
|
||
|
self._partitioning_scheme = conf.storage.default_scheme
|
||
|
self._file_system_type = ""
|
||
|
self._excluded_mount_points = []
|
||
|
self._hibernation = False
|
||
|
|
||
|
self._encrypted = False
|
||
|
self._passphrase = ""
|
||
|
self._cipher = ""
|
||
|
self._luks_version = ""
|
||
|
|
||
|
self._pbkdf = ""
|
||
|
self._pbkdf_memory = 0
|
||
|
self._pbkdf_time = 0
|
||
|
self._pbkdf_iterations = 0
|
||
|
|
||
|
self._escrow_certificate = ""
|
||
|
self._backup_passphrase_enabled = False
|
||
|
|
||
|
@property
|
||
|
def partitioning_scheme(self) -> Int:
|
||
|
"""The partitioning scheme.
|
||
|
|
||
|
Allowed values:
|
||
|
0 Create regular partitions.
|
||
|
1 Use the btrfs scheme.
|
||
|
2 Use the lvm scheme.
|
||
|
3 Use the lvm thinp scheme.
|
||
|
|
||
|
:return: an number of the partitioning scheme
|
||
|
"""
|
||
|
return self._partitioning_scheme
|
||
|
|
||
|
@partitioning_scheme.setter
|
||
|
def partitioning_scheme(self, scheme: Int):
|
||
|
self._partitioning_scheme = scheme
|
||
|
|
||
|
@property
|
||
|
def file_system_type(self) -> Str:
|
||
|
"""Type of a file system used on the partitions.
|
||
|
|
||
|
For example: ext4
|
||
|
|
||
|
:return: a name of a file system type
|
||
|
"""
|
||
|
return self._file_system_type
|
||
|
|
||
|
@file_system_type.setter
|
||
|
def file_system_type(self, value: Str):
|
||
|
self._file_system_type = value
|
||
|
|
||
|
@property
|
||
|
def excluded_mount_points(self) -> List[Str]:
|
||
|
"""Excluded mount points.
|
||
|
|
||
|
Don't create partitions for the excluded
|
||
|
mount points during the partitioning.
|
||
|
|
||
|
For example: /home, /boot, swap
|
||
|
|
||
|
:return: a list of mount points
|
||
|
"""
|
||
|
return self._excluded_mount_points
|
||
|
|
||
|
@property
|
||
|
def hibernation(self) -> Bool:
|
||
|
"""Should the partitioning include hibernation swap?
|
||
|
|
||
|
If True a swap partition large enough for hibernation will be created
|
||
|
even if swap was not configured in the Anaconda configuration file.
|
||
|
|
||
|
:return: True or False
|
||
|
"""
|
||
|
return self._hibernation
|
||
|
|
||
|
@hibernation.setter
|
||
|
def hibernation(self, value: Bool):
|
||
|
self._hibernation = value
|
||
|
|
||
|
@excluded_mount_points.setter
|
||
|
def excluded_mount_points(self, mount_points: List[Str]):
|
||
|
self._excluded_mount_points = mount_points
|
||
|
|
||
|
@property
|
||
|
def encrypted(self) -> Bool:
|
||
|
"""Should devices be encrypted?
|
||
|
|
||
|
:return: True or False
|
||
|
"""
|
||
|
return self._encrypted
|
||
|
|
||
|
@encrypted.setter
|
||
|
def encrypted(self, encrypted: Bool):
|
||
|
self._encrypted = encrypted
|
||
|
|
||
|
@property
|
||
|
def passphrase(self) -> Str:
|
||
|
"""Passphrase for all encrypted devices.
|
||
|
|
||
|
:return: a string with the passphrase
|
||
|
"""
|
||
|
return self._passphrase
|
||
|
|
||
|
@passphrase.setter
|
||
|
def passphrase(self, value: Str):
|
||
|
self._passphrase = value
|
||
|
|
||
|
@property
|
||
|
def cipher(self) -> Str:
|
||
|
"""Encryption algorithm used to encrypt the filesystem.
|
||
|
|
||
|
For example: aes-xts-plain64
|
||
|
|
||
|
:return: a name of an algorithm
|
||
|
"""
|
||
|
return self._cipher
|
||
|
|
||
|
@cipher.setter
|
||
|
def cipher(self, cipher: Str):
|
||
|
self._cipher = cipher
|
||
|
|
||
|
@property
|
||
|
def luks_version(self) -> Str:
|
||
|
"""Version of LUKS.
|
||
|
|
||
|
Allowed values:
|
||
|
luks1 Use the version 1.
|
||
|
luks2 Use the version 2.
|
||
|
|
||
|
:return: a string with the LUKS version
|
||
|
"""
|
||
|
return self._luks_version
|
||
|
|
||
|
@luks_version.setter
|
||
|
def luks_version(self, version: Str):
|
||
|
self._luks_version = version
|
||
|
|
||
|
@property
|
||
|
def pbkdf(self) -> Str:
|
||
|
"""The PBKDF algorithm.
|
||
|
|
||
|
Set Password-Based Key Derivation Function (PBKDF)
|
||
|
algorithm for LUKS keyslot.
|
||
|
|
||
|
Example: 'argon2i'
|
||
|
|
||
|
:return: a name of the algorithm
|
||
|
"""
|
||
|
return self._pbkdf
|
||
|
|
||
|
@pbkdf.setter
|
||
|
def pbkdf(self, pbkdf: Str):
|
||
|
self._pbkdf = pbkdf
|
||
|
|
||
|
@property
|
||
|
def pbkdf_memory(self) -> Int:
|
||
|
"""The memory cost for PBKDF."""
|
||
|
return self._pbkdf_memory
|
||
|
|
||
|
@pbkdf_memory.setter
|
||
|
def pbkdf_memory(self, memory: Int):
|
||
|
"""Set the memory cost for PBKDF.
|
||
|
|
||
|
:param memory: the memory cost in kilobytes
|
||
|
"""
|
||
|
self._pbkdf_memory = memory
|
||
|
|
||
|
@property
|
||
|
def pbkdf_time(self) -> Int:
|
||
|
"""The time to spend with PBKDF processing.
|
||
|
|
||
|
Sets the number of milliseconds to spend with PBKDF
|
||
|
passphrase processing.
|
||
|
|
||
|
:return: a number of milliseconds
|
||
|
"""
|
||
|
return self._pbkdf_time
|
||
|
|
||
|
@pbkdf_time.setter
|
||
|
def pbkdf_time(self, time_ms: Int):
|
||
|
self._pbkdf_time = time_ms
|
||
|
|
||
|
@property
|
||
|
def pbkdf_iterations(self) -> Int:
|
||
|
"""The number of iterations for PBKDF.
|
||
|
|
||
|
Avoid PBKDF benchmark and set time cost (iterations) directly.
|
||
|
|
||
|
:return: a number of iterations
|
||
|
"""
|
||
|
return self._pbkdf_iterations
|
||
|
|
||
|
@pbkdf_iterations.setter
|
||
|
def pbkdf_iterations(self, iterations: Int):
|
||
|
self._pbkdf_iterations = iterations
|
||
|
|
||
|
@property
|
||
|
def escrow_certificate(self) -> Str:
|
||
|
"""URL of an X.509 certificate.
|
||
|
|
||
|
Store the data encryption keys of all encrypted volumes created during
|
||
|
installation, encrypted using the certificate, as files in /root.
|
||
|
|
||
|
:return: URL of an X.509 certificate
|
||
|
"""
|
||
|
return self._escrow_certificate
|
||
|
|
||
|
@escrow_certificate.setter
|
||
|
def escrow_certificate(self, url: Str):
|
||
|
self._escrow_certificate = url
|
||
|
|
||
|
@property
|
||
|
def backup_passphrase_enabled(self) -> Bool:
|
||
|
"""Is the backup passphrase enabled?
|
||
|
|
||
|
In addition to storing the data encryption keys, generate a backup passphrase
|
||
|
and add it to all encrypted volumes created during installation. Then store the
|
||
|
passphrase, encrypted using the specified certificate as files in /root.
|
||
|
|
||
|
:return: True or False
|
||
|
"""
|
||
|
return self._backup_passphrase_enabled
|
||
|
|
||
|
@backup_passphrase_enabled.setter
|
||
|
def backup_passphrase_enabled(self, enabled: Bool):
|
||
|
self._backup_passphrase_enabled = enabled
|
||
|
|
||
|
def __repr__(self):
|
||
|
"""Generate a string representation."""
|
||
|
return generate_string_from_data(
|
||
|
self,
|
||
|
skip=["passphrase"],
|
||
|
add={"passphrase_set": bool(self.passphrase)}
|
||
|
)
|
||
|
|
||
|
|
||
|
class MountPointRequest(DBusData):
|
||
|
"""Mount point request data."""
|
||
|
|
||
|
def __init__(self):
|
||
|
self._device_spec = ""
|
||
|
self._mount_point = ""
|
||
|
self._mount_options = ""
|
||
|
self._reformat = False
|
||
|
self._format_type = ""
|
||
|
self._format_options = ""
|
||
|
|
||
|
@property
|
||
|
def device_spec(self) -> Str:
|
||
|
"""The block device to mount.
|
||
|
|
||
|
:return: a device specification
|
||
|
"""
|
||
|
return self._device_spec
|
||
|
|
||
|
@device_spec.setter
|
||
|
def device_spec(self, spec: Str):
|
||
|
"""Set the block device to mount."""
|
||
|
self._device_spec = spec
|
||
|
|
||
|
@property
|
||
|
def mount_point(self) -> Str:
|
||
|
"""Mount point.
|
||
|
|
||
|
Set where the device will be mounted.
|
||
|
For example: '/', '/home', 'none'
|
||
|
|
||
|
:return: a path to a mount point or 'none'
|
||
|
"""
|
||
|
return self._mount_point
|
||
|
|
||
|
@mount_point.setter
|
||
|
def mount_point(self, mount_point: Str):
|
||
|
self._mount_point = mount_point
|
||
|
|
||
|
@property
|
||
|
def mount_options(self) -> Str:
|
||
|
"""Mount options for /etc/fstab.
|
||
|
|
||
|
Specifies a free form string of options to be used when
|
||
|
mounting the filesystem. This string will be copied into
|
||
|
the /etc/fstab file of the installed system.
|
||
|
|
||
|
:return: a string with options
|
||
|
"""
|
||
|
return self._mount_options
|
||
|
|
||
|
@mount_options.setter
|
||
|
def mount_options(self, options: Str):
|
||
|
self._mount_options = options
|
||
|
|
||
|
@property
|
||
|
def reformat(self) -> Bool:
|
||
|
"""Should the device be reformatted?
|
||
|
|
||
|
:return: True or False
|
||
|
"""
|
||
|
return self._reformat
|
||
|
|
||
|
@reformat.setter
|
||
|
def reformat(self, reformat: Bool):
|
||
|
self._reformat = reformat
|
||
|
|
||
|
@property
|
||
|
def format_type(self) -> Str:
|
||
|
"""New format of the device.
|
||
|
|
||
|
For example: 'xfs'
|
||
|
|
||
|
:return: a specification of the format
|
||
|
"""
|
||
|
return self._format_type
|
||
|
|
||
|
@format_type.setter
|
||
|
def format_type(self, format_type: Str):
|
||
|
self._format_type = format_type
|
||
|
|
||
|
@property
|
||
|
def format_options(self) -> Str:
|
||
|
"""Additional format options.
|
||
|
|
||
|
Specifies additional parameters to be passed to the mkfs
|
||
|
program that makes a filesystem on this partition.
|
||
|
|
||
|
:return: a string with options
|
||
|
"""
|
||
|
return self._format_options
|
||
|
|
||
|
@format_options.setter
|
||
|
def format_options(self, options: Str):
|
||
|
self._format_options = options
|