FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Red Hat Linux

 
 
LinkBack Thread Tools
 
Old 11-12-2008, 10:45 PM
Dave Lehman
 
Default handle upgrades on systems whose rootfs is on an encrypted logical volume (471288)

Another upgrade case I didn't catch earlier: root on encrypted LV. Since
it's an LV, we use the device in fstab, not a UUID. So, fsset.readFstab
doesn't know how to get from /dev/mapper/luks-$lvname
to /dev/mapper/$lvname. This patch adds a new function to retrieve a
backing device from /etc/crypttab so we can create a usable Device
instance and thus successfully upgrade.

diff --git a/fsset.py b/fsset.py
index 40eb0d2..31c623e 100644
--- a/fsset.py
+++ b/fsset.py
@@ -2695,6 +2695,21 @@ def makeDevice(dev):
device = PartitionDevice(dev, encryption=cryptoDev)
return device

+def findBackingDevInCrypttab(mappingName):
+ backingDev = None
+ try:
+ lines = open("/mnt/sysimage/etc/crypttab").readlines()
+ except IOError, e:
+ pass
+ else:
+ for line in lines:
+ fields = line.split()
+ if fields[0] == mappingName:
+ backingDev = fields[1]
+ break
+
+ return backingDev
+
# XXX fix RAID
def readFstab (anaconda):
def createMapping(dict):
@@ -2833,6 +2848,39 @@ def readFstab (anaconda):
if loopIndex.has_key(device):
(dev, fs) = loopIndex[device]
device = LoopbackDevice(dev, fs)
+ elif fields[0].startswith("/dev/mapper/luks-"):
+ backingDev = findBackingDevInCrypttab(fields[0][12:])
+ log.debug("device %s has backing device %s" % (fields[0],
+ backingDev))
+ if backingDev is None:
+ log.error("unable to resolve backing device for %s" %
fields[0]
+ continue
+ elif backingDev.startswith('LABEL='):
+ label = backingDev[6:]
+ if label in labelDupes:
+ showError(label, intf)
+
+ if labelToDevice.has_key(label):
+ device = makeDevice(labelToDevice[label])
def createMapping(dict):
@@ -2833,6 +2848,39 @@ def readFstab (anaconda):
if loopIndex.has_key(device):
(dev, fs) = loopIndex[device]
device = LoopbackDevice(dev, fs)
+ elif fields[0].startswith("/dev/mapper/luks-"):
+ backingDev = findBackingDevInCrypttab(fields[0][12:])
+ log.debug("device %s has backing device %s" % (fields[0],
+ backingDev))
+ if backingDev is None:
+ log.error("unable to resolve backing device for %s" %
fields[0]
+ continue
+ elif backingDev.startswith('LABEL='):
+ label = backingDev[6:]
+ if label in labelDupes:
+ showError(label, intf)
+
+ if labelToDevice.has_key(label):
+ device = makeDevice(labelToDevice[label])
+ else:
+ log.warning ("crypttab file has LABEL=%s, but this
label "
+ "could not be found on any file
system", label
+ # bad luck, skip this entry.
+ continue
+ elif backingDev.startswith('UUID='):
+ uuid = backingDev[5:]
+ if uuid in uuidDupes:
+ showError(uuid, intf)
+
+ if uuidToDevice.has_key(uuid):
+ device = makeDevice(uuidToDevice[uuid])
+ else:
+ log.warning ("crypttab file has UUID=%s, but this
UUID"
+ "could not be found on any file
system", uuid)
+ # bad luck, skip this entry.
+ continue
+ else:
+ device = makeDevice(backingDev[5:])
elif fields[0].startswith('/dev/'):
# Older installs may have lines starting with things
like /dev/proc
# so watch out for that on upgrade.


Dave

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 09:24 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org