[PATCH] Add error checks to liveimg mount code (#1178703)

Brian C. Lane bcl at redhat.com
Thu Jan 8 19:34:09 UTC 2015


Instead of logging the mount error and falling into the rsync and
failing later catch problems with mounting the images and moving the
mountpoint.

Related: rhbz#1178703
---
 pyanaconda/packaging/livepayload.py | 67 ++++++++++++++++++++++++-------------
 1 file changed, 44 insertions(+), 23 deletions(-)

diff --git a/pyanaconda/packaging/livepayload.py b/pyanaconda/packaging/livepayload.py
index 0a67774..17c1bac 100644
--- a/pyanaconda/packaging/livepayload.py
+++ b/pyanaconda/packaging/livepayload.py
@@ -373,29 +373,50 @@ class LiveImageKSPayload(LiveImagePayload):
                     raise exn
 
         # If this looks like a tarfile, skip trying to mount it
-        if not self.is_tarfile:
-            # Mount the image and check to see if it is a LiveOS/*.img
-            # style squashfs image. If so, move it to IMAGE_DIR and mount the real
-            # root image on INSTALL_TREE
-            blivet.util.mount(self.image_path, INSTALL_TREE, fstype="auto", options="ro")
-            if os.path.exists(INSTALL_TREE+"/LiveOS"):
-                # Find the first .img in the directory and mount that on INSTALL_TREE
-                img_files = glob.glob(INSTALL_TREE+"/LiveOS/*.img")
-                if img_files:
-                    img_file = os.path.basename(sorted(img_files)[0])
-
-                    # move the mount to IMAGE_DIR
-                    os.makedirs(IMAGE_DIR, 0o755)
-                    # work around inability to move shared filesystems
-                    iutil.execWithRedirect("mount",
-                                           ["--make-rprivate", "/"])
-                    iutil.execWithRedirect("mount",
-                                           ["--move", INSTALL_TREE, IMAGE_DIR])
-                    blivet.util.mount(IMAGE_DIR+"/LiveOS/"+img_file, INSTALL_TREE,
-                                      fstype="auto", options="ro")
-
-                    source = iutil.eintr_retry_call(os.statvfs, INSTALL_TREE)
-                    self.source_size = source.f_frsize * (source.f_blocks - source.f_bfree)
+        if self.is_tarfile:
+            return
+
+        # Mount the image and check to see if it is a LiveOS/*.img
+        # style squashfs image. If so, move it to IMAGE_DIR and mount the real
+        # root image on INSTALL_TREE
+        rc = blivet.util.mount(self.image_path, INSTALL_TREE, fstype="auto", options="ro")
+        if rc != 0:
+            log.error("mount error (%s) with %s", rc, self.image_path)
+            exn = PayloadInstallError("mount error %s" % rc)
+            if errorHandler.cb(exn) == ERROR_RAISE:
+                raise exn
+
+        # Nothing more to mount
+        if not os.path.exists(INSTALL_TREE+"/LiveOS"):
+            return
+
+        # Mount the first .img in the directory on INSTALL_TREE
+        img_files = glob.glob(INSTALL_TREE+"/LiveOS/*.img")
+        if img_files:
+            # move the mount to IMAGE_DIR
+            os.makedirs(IMAGE_DIR, 0o755)
+            # work around inability to move shared filesystems
+            rc = iutil.execWithRedirect("mount",
+                                        ["--make-rprivate", "/"])
+            if rc == 0:
+                rc = iutil.execWithRedirect("mount",
+                                            ["--move", INSTALL_TREE, IMAGE_DIR])
+            if rc != 0:
+                log.error("error %s moving mount", rc)
+                exn = PayloadInstallError("mount error %s" % rc)
+                if errorHandler.cb(exn) == ERROR_RAISE:
+                    raise exn
+
+            img_file = IMAGE_DIR+"/LiveOS/"+os.path.basename(sorted(img_files)[0])
+            rc = blivet.util.mount(img_file, INSTALL_TREE, fstype="auto", options="ro")
+            if rc != 0:
+                log.error("mount error (%s) with %s", rc, img_file)
+                exn = PayloadInstallError("mount error %s with %s" % (rc, img_file))
+                if errorHandler.cb(exn) == ERROR_RAISE:
+                    raise exn
+
+            source = iutil.eintr_retry_call(os.statvfs, INSTALL_TREE)
+            self.source_size = source.f_frsize * (source.f_blocks - source.f_bfree)
 
     def install(self):
         """ Install the payload if it is a tar.
-- 
1.9.3



More information about the anaconda-patches mailing list