[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