Re: [PATCH] handle upgrades on systems whose rootfs is on an encrypted logical volume (471288)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



New patch, taking into account David's comments about the number of
fields in crypttab entries. The newline is not an issue since split is
in fact getting rid of it. As for the shoddy substring code in
readFstab... While I agree with you in principal, I don't know if it's
worthwhile at this point to go through and fix it.

diff --git a/fsset.py b/fsset.py
index 40eb0d2..c7972ec 100644
--- a/fsset.py
+++ b/fsset.py
@@ -2695,6 +2695,23 @@ 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 len(fields) < 2:
+                continue
+            if fields[0] == mappingName:
+                backingDev = fields[1]
+                break
+
+    return backingDev
+
 # XXX fix RAID
 def readFstab (anaconda):
     def createMapping(dict):
@@ -2833,6 +2850,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@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux