fbcaed
From 2fe1fea904f40256387dea56405a369c22354e2c Mon Sep 17 00:00:00 2001
fbcaed
From: Radek Vykydal <rvykydal@redhat.com>
fbcaed
Date: Tue, 9 Dec 2014 11:01:18 +0100
fbcaed
Subject: [PATCH 32/32] rescue: find root partition of ostree (atomic)
fbcaed
 installations (#1152041)
fbcaed
fbcaed
---
fbcaed
 pyanaconda/rescue.py | 37 +++++++++++++++++++++++++++++++++++++
fbcaed
 1 file changed, 37 insertions(+)
fbcaed
fbcaed
diff --git a/pyanaconda/rescue.py b/pyanaconda/rescue.py
fbcaed
index e0c4e13..fbf3f06 100644
fbcaed
--- a/pyanaconda/rescue.py
fbcaed
+++ b/pyanaconda/rescue.py
fbcaed
@@ -264,6 +264,42 @@ def _unlock_devices(intf, storage):
fbcaed
                         device.format.passphrase = None
fbcaed
                         try_passphrase = None
fbcaed
 
fbcaed
+def findExistingOstreePartitions(devicetree):
fbcaed
+    import blivet
fbcaed
+    if not os.path.exists(blivet.getTargetPhysicalRoot()):
fbcaed
+        util.makedirs(blivet.getTargetPhysicalRoot())
fbcaed
+
fbcaed
+    roots = []
fbcaed
+    for device in devicetree.leaves:
fbcaed
+        if not device.format.linuxNative or not device.format.mountable or \
fbcaed
+           not device.controllable:
fbcaed
+            continue
fbcaed
+
fbcaed
+        try:
fbcaed
+            device.setup()
fbcaed
+        except Exception: # pylint: disable=broad-except
fbcaed
+            log.warning("setup of %s failed", [device.name])
fbcaed
+            continue
fbcaed
+
fbcaed
+        options = device.format.options + ",ro"
fbcaed
+        try:
fbcaed
+            device.format.mount(options=options, mountpoint=iutil.getSysroot())
fbcaed
+        except Exception: # pylint: disable=broad-except
fbcaed
+            log.warning("mount of %s as %s failed", device.name, device.format.type)
fbcaed
+            device.teardown()
fbcaed
+            continue
fbcaed
+
fbcaed
+        if not os.access(iutil.getSysroot() + "/ostree", os.R_OK):
fbcaed
+            device.teardown(recursive=True)
fbcaed
+            continue
fbcaed
+
fbcaed
+        name = _("Ostree on %s") % device.name
fbcaed
+        roots.append(blivet.Root(mounts=None, swaps=None, name=device.name))
fbcaed
+
fbcaed
+    return roots
fbcaed
+
fbcaed
+
fbcaed
+
fbcaed
 def doRescue(intf, rescue_mount, ksdata):
fbcaed
     import blivet
fbcaed
 
fbcaed
@@ -323,6 +359,7 @@ def doRescue(intf, rescue_mount, ksdata):
fbcaed
     blivet.storageInitialize(sto, ksdata, [])
fbcaed
     _unlock_devices(intf, sto)
fbcaed
     roots = blivet.findExistingInstallations(sto.devicetree)
fbcaed
+    roots.extend(findExistingOstreePartitions(sto.devicetree))
fbcaed
 
fbcaed
     if not roots:
fbcaed
         root = None
fbcaed
-- 
fbcaed
1.9.3
fbcaed