[rhel7-branch/master/f20-branch][PATCH 0/5] Add tmpfs support
by Martin Kolman
Hopefully 5th time is the charm! :)
In this revision:
* support for --grow and --maxsize has been removed
as confusing
* the kickstart part/partition parser has been modified to
raise error if --fstype=tmpfs is used together with
--grow or --maxsize
* pykickstart tests for this behavior
Martin Kolman (2):
Add support for returning machine word length
Add tmpfs support (#918621)
blivet/__init__.py | 4 ++
blivet/arch.py | 31 +++++++++
blivet/deviceaction.py | 10 ++-
blivet/devices.py | 27 ++++++++
blivet/formats/fs.py | 170 +++++++++++++++++++++++++++++++++++++++++++++++--
5 files changed, 233 insertions(+), 9 deletions(-)
--
1.8.3.1
10 years, 6 months
Testing email
by Martin Kolman
A mail testing if the ML server is back up.
10 years, 6 months
[master/f20-branch] Simple friday patches
by Vratislav Podzimek
These are 4 simple patches improving our code clarity and user experience a bit.
Vratislav Podzimek (4):
Use Sphinx syntax in the iutil module
Make AddLayout dialog persistent
Sort layout descriptions properly
Match layouts with stripped accents in AddLayout dialog
pyanaconda/iutil.py | 60 +++++++++++++++++++-----------------
pyanaconda/ui/gui/spokes/keyboard.py | 37 ++++++++++++----------
2 files changed, 53 insertions(+), 44 deletions(-)
--
1.8.3.1
10 years, 6 months
[master/f20-branch] DNFPayload: tweak to the API changes in dnf-0.4.7.
by Ales Kozumplik
From: Ales Kozumplik <ales(a)redhat.com>
---
pyanaconda/packaging/dnfpayload.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py
index 3dd673c..9de7ceb 100644
--- a/pyanaconda/packaging/dnfpayload.py
+++ b/pyanaconda/packaging/dnfpayload.py
@@ -227,12 +227,12 @@ class DNFPayload(packaging.PackagePayload):
@property
def environments(self):
- environments = self._base.comps.environments_iter
+ environments = self._base.comps.environments_iter()
return [env.id for env in environments]
@property
def groups(self):
- groups = self._base.comps.groups_iter
+ groups = self._base.comps.groups_iter()
return [g.id for g in groups]
@property
@@ -272,7 +272,7 @@ class DNFPayload(packaging.PackagePayload):
self._apply_selections()
try:
- if self._base.build_transaction():
+ if self._base.resolve():
log.debug("checking dependencies: success.")
else:
log.debug("empty transaction")
@@ -335,7 +335,7 @@ class DNFPayload(packaging.PackagePayload):
def gatherRepoMetadata(self):
map(self._sync_metadata, self._base.repos.iter_enabled())
- self._base.activate_sack(load_system_repo=False)
+ self._base.fill_sack(load_system_repo=False)
self._base.read_comps()
def install(self):
@@ -344,7 +344,7 @@ class DNFPayload(packaging.PackagePayload):
self._setupMedia(self.install_device)
try:
self.checkSoftwareSelection()
- except packaging.DependencyError:
+ except packaging.DependencyError as e:
if errors.errorHandler.cb(e) == errors.ERROR_RAISE:
_failure_limbo()
--
1.8.3.1
10 years, 6 months
Makefile fixes for make distcheck
by David Shea
distcheck is one of the targets generated by automake, and it can be pretty
handy: it creates the distribution tarball, unpacks, and then tries to build,
check, install, uninstall, and clean the distribution.
The first three patches fix legit problems: we weren't including some files
in the distribution, we weren't cleanup up after intltool, and make uninstall
was broken. The fourth patch just adds --enable-gtk-doc to the configure
arguments automake uses in the unpacked distribution, since we can't enable
that by default.
The fifth patch ensures that all of our install paths start with $prefix. This
one seems kind of silly, since we really do want files specifically in /etc and
/usr/lib sometimes, but make distcheck uses --prefix instead of DESTDIR for
some reason. The %configure macro in the spec file includes all of the autoconf
macros that turn $prefix-based directories into real directories, so whatever,
we can play this their way.
Patches six and seven are for gettext. Six updates our required gettext
version to 0.18.3, which lets us use gettext to directly process glade files
instead of pre-processing them with intltool. This makes things better! Seven
adds the remaining pre-processed outputs to the distribution. This makes things
worse :-( The problem is that make distcheck does a VPATH build in such a way
that the original $srcdirs are unwritable, and gettext insists that these
generated files be in $srcdir instead of $builddir. The solution is to ensure
that gettext doesn't have to generate the files.
Anyway, make distcheck works again. Gonna get this stuff right one of these
days.
10 years, 6 months
[PATCH] Remove threading from getBaseRepo handling (#1011555)
by Brian C. Lane
From: "Brian C. Lane" <bcl(a)redhat.com>
The original purpose of the getBaseRepo cache was to ensure that
requests it weren't constantly sitting on the _yum_lock. This was
accomplished with a combination of a cache, decorators to invalidate the
cache and a thread to re-validate the cache.
The problem is that the thread can be fired off at any time, and when
this happens in the middle of a PAYLOAD_MD thread update it can change
the state of yum's preconf/conf attributes, resulting in a traceback
the next time it tries to access .preconf
This patchset hopefully simplifies things a bit by removing the
threading from the picture. Now what happens is:
Any method decorated with @invalidate_br_cache ill re-validate the
cache when the method is *finished* and if it meets the criteria
passed to the decorator.
If getBaseRepo is called and the cache is invalid it will immediately
re-validate it -- all this does is examine repos and their enabled
attribute, this should not be a long running process.
In addition to this, in the software watcher it was possible for access
to payload.groups and payload.environments to stomp on the yum preconf
state while the PAYLOAD_MD thread was running, so wait for it to finish
as well.
---
pyanaconda/packaging/__init__.py | 14 +-------
pyanaconda/packaging/dnfpayload.py | 2 +-
pyanaconda/packaging/yumpayload.py | 64 +++++++++++++-----------------------
pyanaconda/ui/gui/spokes/software.py | 6 ++--
pyanaconda/ui/gui/spokes/source.py | 12 +++----
pyanaconda/ui/tui/spokes/software.py | 13 ++++----
pyanaconda/ui/tui/spokes/source.py | 8 ++---
7 files changed, 42 insertions(+), 77 deletions(-)
diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py
index a5bcb01..3686e2e 100644
--- a/pyanaconda/packaging/__init__.py
+++ b/pyanaconda/packaging/__init__.py
@@ -147,21 +147,9 @@ class Payload(object):
""" A list of addon repo identifiers. """
return [r.name for r in self.data.repo.dataList()]
- def getBaseRepo(self, wait=True, callback=None):
+ def getBaseRepo(self):
"""
Get the identifier of the current base repo.
-
- :param wait: whether to block until the identifier is derived from the
- configuration (may take a long time) or just try to use
- the cached value and return REPO_NOT_SET if there is none
- :type wait: bool
- :param callback: callback that will be called once the indentifier is
- derived from the configuration (gets the repo ID as
- the first argument) if it is not returned instantly
- :type callback: str -> None
- :returns: id of the current base repo or None if wait=True is used or
- REPO_NOT_SET if wait=False is used and the value is not cached
-
"""
return None
diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py
index 3dd673c..3b78574 100644
--- a/pyanaconda/packaging/dnfpayload.py
+++ b/pyanaconda/packaging/dnfpayload.py
@@ -217,7 +217,7 @@ class DNFPayload(packaging.PackagePayload):
# addon repos via kickstart
return [r.name for r in self.data.repo.dataList()]
- def getBaseRepo(self, wait=True, callback=None):
+ def getBaseRepo(self):
# is any locking needed here as in the yumpayload?
repo_names = [constants.BASE_REPO_NAME] + DEFAULT_REPOS
for repo in self._base.repos.iter_enabled():
diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index 2f2813a..9c157c3 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -62,7 +62,7 @@ except ImportError:
log.error("import of yum failed")
yum = None
-from pyanaconda.constants import BASE_REPO_NAME, DRACUT_ISODIR, INSTALL_TREE, ISO_DIR, MOUNT_DIR, ROOT_PATH, THREAD_REFRESH_BASE_REPO
+from pyanaconda.constants import BASE_REPO_NAME, DRACUT_ISODIR, INSTALL_TREE, ISO_DIR, MOUNT_DIR, ROOT_PATH
from pyanaconda.flags import flags
from pyanaconda import iutil
@@ -78,9 +78,7 @@ from pyanaconda.errors import ERROR_RAISE, errorHandler
from pyanaconda.packaging import DependencyError, MetadataError, NoNetworkError, NoSuchGroup, \
NoSuchPackage, PackagePayload, PayloadError, PayloadInstallError, \
PayloadSetupError
-from pyanaconda.packaging import REPO_NOT_SET
from pyanaconda.progress import progressQ
-from pyanaconda.threads import threadMgr, AnacondaThread
from pyanaconda.localization import langcode_matches_locale
@@ -117,13 +115,13 @@ class YumLock(object):
def invalidates_br_cache(cond_fn=None):
"""
Function returning decorator for methods that invalidate base repo cache.
+ After the method has been run the base repo will be re-validated
:param cond_fn: condition function telling if base repo should be
invalidated or not (HAS TO TAKE THE SAME ARGUMENTS AS THE
DECORATED FUNCTION)
"""
-
def decorator(method):
"""
Decorator for methods that invalidate base repo cache.
@@ -131,13 +129,14 @@ def invalidates_br_cache(cond_fn=None):
:param method: decorated method of the YumPayload class
"""
-
@wraps(method)
def inner_method(yum_payload, *args, **kwargs):
+ ret = method(yum_payload, *args, **kwargs)
+
if cond_fn is None or cond_fn(yum_payload, *args, **kwargs):
yum_payload.invalidate_br_cache()
-
- return method(yum_payload, *args, **kwargs)
+ yum_payload._refreshBaseRepo()
+ return ret
return inner_method
@@ -175,9 +174,7 @@ class YumPayload(PackagePayload):
# base repo caching
self._cached_base_repo = None
self._br_cache_valid = False
- self._br_callbacks = []
- self._br_cache_valid_lock = threading.Lock()
- self._br_refresh_lock = threading.Lock()
+ self._br_cache_valid_lock = threading.RLock()
self.reset()
@@ -422,29 +419,21 @@ reposdir=%s
return _repos
- def getBaseRepo(self, wait=True, callback=None):
- # prevent potential thread calling callbacks from finishing if we want
- # to add some more
- with self._br_refresh_lock:
- # test and set atomically
- with self._br_cache_valid_lock:
- if self._br_cache_valid:
- return self._cached_base_repo
-
- # cache not valid, should we start a thread to refresh it?
- refresh_thread = threadMgr.get(THREAD_REFRESH_BASE_REPO)
- if not refresh_thread:
- threadMgr.add(AnacondaThread(name=THREAD_REFRESH_BASE_REPO, target=self._refreshBaseRepo))
-
- if callback:
- self._br_callbacks.append(callback)
-
- if wait:
- threadMgr.wait(THREAD_REFRESH_BASE_REPO)
- return self._cached_base_repo
- else:
- # not waiting for the thread and cache was not valid
- return REPO_NOT_SET
+ def getBaseRepo(self):
+ """ Return the cached base repo id, if it is valid.
+ Otherwise, re-validate it and return it.
+
+ This should result in minmal access to _yum_lock, especially
+ since the methods that would invalidate the cached value also
+ re-validate it after they have been run. These methods are
+ decorated with @invalidate_br_cache
+ """
+ with self._br_cache_valid_lock:
+ if self._br_cache_valid:
+ return self._cached_base_repo
+
+ self._refreshBaseRepo()
+ return self._cached_base_repo
def _refreshBaseRepo(self):
with _yum_lock:
@@ -455,7 +444,6 @@ reposdir=%s
# cache the value for multiple use
self._cached_base_repo = repo_name
self._br_cache_valid = True
- current_cached = self._cached_base_repo
break
else:
# didn't find any base repo set and enabled
@@ -463,14 +451,6 @@ reposdir=%s
# set the cache to None, but make it valid
self._cached_base_repo = None
self._br_cache_valid = True
- current_cached = self._cached_base_repo
-
- with self._br_refresh_lock:
- # go through scheduled callbacks (if any) and remove them
- for callback in self._br_callbacks:
- callback(current_cached)
-
- self._br_callbacks = []
@property
def mirrorEnabled(self):
diff --git a/pyanaconda/ui/gui/spokes/software.py b/pyanaconda/ui/gui/spokes/software.py
index ce2089e..0e1fa66 100644
--- a/pyanaconda/ui/gui/spokes/software.py
+++ b/pyanaconda/ui/gui/spokes/software.py
@@ -193,12 +193,10 @@ class SoftwareSelectionSpoke(NormalSpoke):
hubQ.send_message(self.__class__.__name__, _("Downloading group metadata..."))
+ threadMgr.wait(constants.THREAD_PAYLOAD_MD)
# we have no way to select environments with kickstart right now
# so don't try.
- if flags.automatedInstall and self.data.packages.seen:
- # We don't want to do a full refresh, just join the metadata thread
- threadMgr.wait(constants.THREAD_PAYLOAD_MD)
- else:
+ if not (flags.automatedInstall and self.data.packages.seen):
# Grabbing the list of groups could potentially take a long time
# at first (yum does a lot of magic property stuff, some of which
# involves side effects like network access. We need to reference
diff --git a/pyanaconda/ui/gui/spokes/source.py b/pyanaconda/ui/gui/spokes/source.py
index e93e313..ffbf7d7 100644
--- a/pyanaconda/ui/gui/spokes/source.py
+++ b/pyanaconda/ui/gui/spokes/source.py
@@ -348,7 +348,7 @@ class SourceSpoke(NormalSpoke):
elif self._mirror_active():
# this preserves the url for later editing
self.data.method.method = None
- if not old_source.method and self.payload.getBaseRepo(wait=True) and \
+ if not old_source.method and self.payload.getBaseRepo() and \
not self._proxyChange:
return False
elif self._http_active() or self._ftp_active():
@@ -450,7 +450,7 @@ class SourceSpoke(NormalSpoke):
hubQ.send_message(self.__class__.__name__, _(METADATA_DOWNLOAD_MESSAGE))
self.payload.gatherRepoMetadata()
self.payload.release()
- if not self.payload.getBaseRepo(wait=True):
+ if not self.payload.getBaseRepo():
hubQ.send_message(self.__class__.__name__, _(METADATA_ERROR_MESSAGE))
hubQ.send_ready(self.__class__.__name__, False)
self._error = True
@@ -482,10 +482,10 @@ class SourceSpoke(NormalSpoke):
@property
def completed(self):
- if flags.automatedInstall and (not self.data.method.method or not self.payload.getBaseRepo(wait=False)):
+ if flags.automatedInstall and (not self.data.method.method or not self.payload.getBaseRepo()):
return False
else:
- return not self._error and self.ready and (self.data.method.method or self.payload.getBaseRepo(wait=False))
+ return not self._error and self.ready and (self.data.method.method or self.payload.getBaseRepo())
@property
def mandatory(self):
@@ -504,7 +504,7 @@ class SourceSpoke(NormalSpoke):
return _("Checking software dependencies...")
elif not self.ready:
return _(BASEREPO_SETUP_MESSAGE)
- elif not self.payload.getBaseRepo(wait=True):
+ elif not self.payload.getBaseRepo():
return _("Error setting up base repository")
elif self._error:
return _("Error setting up software source")
@@ -518,7 +518,7 @@ class SourceSpoke(NormalSpoke):
if not self._currentIsoFile:
return _("Error setting up ISO file")
return os.path.basename(self._currentIsoFile)
- elif self.payload.getBaseRepo(wait=True):
+ elif self.payload.getBaseRepo():
return _("Closest mirror")
else:
return _("Nothing selected")
diff --git a/pyanaconda/ui/tui/spokes/software.py b/pyanaconda/ui/tui/spokes/software.py
index 087cc5b..18c3689 100644
--- a/pyanaconda/ui/tui/spokes/software.py
+++ b/pyanaconda/ui/tui/spokes/software.py
@@ -60,9 +60,8 @@ class SoftwareSpoke(NormalTUISpoke):
def _initialize(self):
""" Private initialize. """
threadMgr.wait(THREAD_PAYLOAD)
- if self._kickstarted:
- threadMgr.wait(THREAD_PAYLOAD_MD)
- else:
+ threadMgr.wait(THREAD_PAYLOAD_MD)
+ if not self._kickstarted:
try:
self.payload.environments
except MetadataError:
@@ -79,7 +78,7 @@ class SoftwareSpoke(NormalTUISpoke):
return _("Error checking software selection")
if not self.ready:
return _("Processing...")
- if not self.payload.getBaseRepo(wait=False):
+ if not self.payload.getBaseRepo():
return _("Installation source not set up")
if not self.txid_valid:
return _("Source changed - please verify")
@@ -109,15 +108,15 @@ class SoftwareSpoke(NormalTUISpoke):
not self.errors and self.txid_valid
if flags.automatedInstall:
- return processingDone and self.payload.getBaseRepo(wait=False) and self.data.packages.seen
+ return processingDone and self.payload.getBaseRepo() and self.data.packages.seen
else:
- return self.payload.getBaseRepo(wait=False) and self.environment is not None and processingDone
+ return self.payload.getBaseRepo() and self.environment is not None and processingDone
def refresh(self, args=None):
""" Refresh screen. """
NormalTUISpoke.refresh(self, args)
- if not self.payload.getBaseRepo(wait=False):
+ if not self.payload.getBaseRepo():
message = TextWidget(_("Installation source needs to be set up first."))
self._window.append(message)
diff --git a/pyanaconda/ui/tui/spokes/source.py b/pyanaconda/ui/tui/spokes/source.py
index d167ee9..565dc0f 100644
--- a/pyanaconda/ui/tui/spokes/source.py
+++ b/pyanaconda/ui/tui/spokes/source.py
@@ -193,7 +193,7 @@ class SourceSpoke(SourceSwitchHandler, EditTUISpoke):
if not self.data.method.dir:
return _("Error setting up software source")
return os.path.basename(self.data.method.dir)
- elif self.payload.getBaseRepo(wait=True):
+ elif self.payload.getBaseRepo():
return _("Closest mirror")
else:
return _("Nothing selected")
@@ -218,10 +218,10 @@ class SourceSpoke(SourceSwitchHandler, EditTUISpoke):
@property
def completed(self):
- if flags.automatedInstall and (not self.data.method.method or not self.payload.getBaseRepo(wait=False)):
+ if flags.automatedInstall and (not self.data.method.method or not self.payload.getBaseRepo()):
return False
else:
- return not self.errors and self.ready and (self.data.method.method or self.payload.getBaseRepo(wait=False))
+ return not self.errors and self.ready and (self.data.method.method or self.payload.getBaseRepo())
def refresh(self, args=None):
EditTUISpoke.refresh(self, args)
@@ -316,7 +316,7 @@ class SourceSpoke(SourceSwitchHandler, EditTUISpoke):
else:
self.payload.gatherRepoMetadata()
self.payload.release()
- if not self.payload.getBaseRepo(wait=True):
+ if not self.payload.getBaseRepo():
self.errors.append(_("Error downloading package metadata"))
else:
try:
--
1.8.3.1
10 years, 6 months
[PATCH] Fix typos in translation functions
by David Shea
---
pyanaconda/ui/tui/spokes/network.py | 2 +-
pyanaconda/ui/tui/spokes/storage.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/pyanaconda/ui/tui/spokes/network.py b/pyanaconda/ui/tui/spokes/network.py
index 4ce250c..dcbc21d 100644
--- a/pyanaconda/ui/tui/spokes/network.py
+++ b/pyanaconda/ui/tui/spokes/network.py
@@ -39,7 +39,7 @@ __all__ = ["NetworkSpoke"]
class NetworkSpoke(EditTUISpoke):
""" Spoke used to configure network settings. """
- title = N__("Network configuration")
+ title = N_("Network configuration")
category = "system"
def __init__(self, app, data, storage, payload, instclass):
diff --git a/pyanaconda/ui/tui/spokes/storage.py b/pyanaconda/ui/tui/spokes/storage.py
index 82d9445..ab56687 100644
--- a/pyanaconda/ui/tui/spokes/storage.py
+++ b/pyanaconda/ui/tui/spokes/storage.py
@@ -59,7 +59,7 @@ class StorageSpoke(NormalTUISpoke):
Storage spoke where users proceed to customize storage features such
as disk selection, partitioning, and fs type.
"""
- title = M_("Installation Destination")
+ title = N_("Installation Destination")
category = "system"
def __init__(self, app, data, storage, payload, instclass):
--
1.8.4.2
10 years, 6 months
Timezones, take 2
by David Shea
Since our code is taken pretty directly from the datetime panel in
gnome-control-center, I'm leaving TimezoneMap.c alone as much as possible in
order the keep us more in sync with GNOME. I'll submit patches to
gnome-control-center upstream once I've worked out the wrinkles described
below. Sure would be nice if this thing was part of Gtk or a separate library
or something.
Patch 1 is the one that pins locations to the zone that was clicked. I've fixed
the bug that Vratislav found in the last one, which was basically that I wasn't
converting between offset values right. I also added a check for whether a new
offset value was found at all, and don't update the location if it wasn't. This
means that the map can have dead spots: any spot in the map that does not have
a mapping between its color in cc.png and the data in TimezoneMap.c will fail
to choose a timezone offset, and any offset with no location in the tzdb will
fail to choose a location.
To find those dead spots, enter patches 2 and 3: patch 2 checks for whether
colors defined in cc.png have matching entires in TimezoneMap.c and vice versa,
and patch 3 checks for whether each UTC offset defined in TimezoneMap.c has a
corresponding location. The answer to patch 3, after all of this, is still: no.
At least not in the zone.tab in F19 for UTC-1. I need to look at this more
closely to figure out if this is a bug in the tzdata or what.
I added two more checks while I was at it: patch 4 checks that we have
highlight images for each entry in TimezoneMap.c and vice versa, and patch 5
ensures that there are no duplicate colors in the TimezoneMap.c definitions.
The main problem, re: cc.png <-> TimezoneMap.c, was that whoever originally
created cc.png left in borders between timezones, which is not helpful when
you're trying to map between zones and arbitrary clicks. Ryan Lerch helped out
on that one by creating a handy XCF file that has each zone as a separate
layer, and the new cc.png is generated from that. Patches 7 and 8 fix the rest
of the problems, by removing an erroneous image and fixing the color_codes
table.
For the last patch, I figured I should re-run autoscan after adding the tests,
so I did.
The next step is to send this stuff up to gnome-control-center. Sure would be
nice if this thing was in a separate library.
10 years, 6 months
[blivet] Require cryptsetup instead of cryptsetup-luks (#969597)
by Anne Mulhern
Resolves: fed#969597
cryptsetup-luks was an independent package but now is provided by the
cryptsetup package; therefore it is the cryptsetup package that should
be required in the spec file and elsewhere.
Signed-off-by: mulhern <amulhern(a)redhat.com>
---
blivet/devices.py | 2 +-
blivet/formats/luks.py | 2 +-
python-blivet.spec | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/blivet/devices.py b/blivet/devices.py
index d620eaf..2e678ab 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -1989,7 +1989,7 @@ class DMCryptDevice(DMDevice):
class LUKSDevice(DMCryptDevice):
""" A mapped LUKS device. """
_type = "luks/dm-crypt"
- _packages = ["cryptsetup-luks"]
+ _packages = ["cryptsetup"]
def __init__(self, name, format=None, size=None, uuid=None,
exists=False, sysfsPath='', parents=None):
diff --git a/blivet/formats/luks.py b/blivet/formats/luks.py
index 0c4b25b..fef464a 100644
--- a/blivet/formats/luks.py
+++ b/blivet/formats/luks.py
@@ -51,7 +51,7 @@ class LUKS(DeviceFormat):
_formattable = True # can be formatted
_supported = False # is supported
_linuxNative = True # for clearpart
- _packages = ["cryptsetup-luks"] # required packages
+ _packages = ["cryptsetup"] # required packages
def __init__(self, *args, **kwargs):
""" Create a LUKS instance.
diff --git a/python-blivet.spec b/python-blivet.spec
index e104f86..ff246eb 100644
--- a/python-blivet.spec
+++ b/python-blivet.spec
@@ -29,7 +29,7 @@ Requires: util-linux >= %{utillinuxver}
Requires: parted >= %{partedver}
Requires: pyparted >= %{pypartedver}
Requires: device-mapper >= %{dmver}
-Requires: cryptsetup-luks
+Requires: cryptsetup
Requires: python-cryptsetup >= %{pythoncryptsetupver}
Requires: mdadm
Requires: lvm2
--
1.8.3.1
10 years, 6 months