<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def guestfs_conn_mount_ro(disk_path, disk_root, retries=5, wait=1):
 """ Open a GuestFS handle with `disk_path` and try mounting the root filesystem. `disk_root` is a hint where it should be looked and will only be used if GuestFS will not be able to deduce it independently. Note that mounting a live guest, can lead to filesystem inconsistencies, causing the mount operation to fail. As we use readonly mode, this is safe, but the operation itself can still fail. Therefore, this method will watch for mount failures and retry 5 times before throwing an exception. Args: disk_path(str):
 Path to the disk. disk_root(str):
 Hint what is the root device with the OS filesystem. retries(int):
 Number of retries for :func:`~guestfs.GuestFS.mount_ro` operation. Note that on each retry a new GuestFS handle will be used. wait(int):
 Time to wait between retries. Yields: guestfs.GuestFS: An open GuestFS handle. Raises: :exc:`GuestFSError`: On any guestfs operation error, including exceeding retries for the :func:`~guestfs.GuestFS.mount_ro` operation. """


    for attempt in range(retries):
        with guestfs_conn_ro(disk_path) as conn:
            rootfs = find_rootfs(conn, disk_root)
            try:
                conn.mount_ro(rootfs, '/')
            except RuntimeError as err:
                LOGGER.debug(err)
                if attempt < retries - 1:
                    LOGGER.debug(
                        (
                            'failed mounting %s:%s using guestfs, '
                            'attempt %s/%s'
                        ), disk_path, rootfs, attempt + 1, retries
                    )
                    time.sleep(wait)
                    continue
                else:
                    raise GuestFSError(
                        'failed mounting {0}:{1} using guestfs'.format(
                            disk_path, rootfs
                        )
                    )
            yield conn
            try:
                conn.umount(rootfs)
            except RuntimeError as err:
                LOGGER.debug(err)
                raise GuestFSError(
                    ('failed unmounting {0}:{1} using'
                     'guestfs').format(disk_path, rootfs)
                )
            break