[master 4/8] livemedia-creator: Make --make-oci work with --no-virt

bcl installerbot-noreply at redhat.com
Wed Oct 21 00:59:19 UTC 2015


From: "Brian C. Lane" <bcl at redhat.com>

Also added a check to exit early if the config and runtime files don't
actually exist.
---
 src/sbin/livemedia-creator | 57 +++++++++++++++++++++++++++++++++-------------
 1 file changed, 41 insertions(+), 16 deletions(-)

diff --git a/src/sbin/livemedia-creator b/src/sbin/livemedia-creator
index 7344688..9d46de5 100755
--- a/src/sbin/livemedia-creator
+++ b/src/sbin/livemedia-creator
@@ -563,6 +563,7 @@ def novirt_install(opts, disk_img, disk_size, repo_url):
     or tarfile.
     """
     import selinux
+    dirinstall_path = ROOT_PATH
 
     # Set selinux to Permissive if it is Enforcing
     selinux_enforcing = False
@@ -589,17 +590,22 @@ def novirt_install(opts, disk_img, disk_size, repo_url):
         args += ["--dirinstall"]
 
         mkext4img(None, disk_img, label=opts.fs_label, size=disk_size * 1024**2)
-        if not os.path.isdir(ROOT_PATH):
-            os.mkdir(ROOT_PATH)
-        mount(disk_img, opts="loop", mnt=ROOT_PATH)
-    elif opts.make_tar:
-        args += ["--dirinstall"]
+        if not os.path.isdir(dirinstall_path):
+            os.mkdir(dirinstall_path)
+        mount(disk_img, opts="loop", mnt=dirinstall_path)
+    elif opts.make_tar or opts.make_oci:
+        # Install under dirinstall_path, make sure it starts clean
+        if os.path.exists(dirinstall_path):
+            shutil.rmtree(dirinstall_path)
+
+        if opts.make_oci:
+            # OCI installs under /rootfs/
+            dirinstall_path = joinpaths(dirinstall_path, "rootfs")
+            args += ["--dirinstall", dirinstall_path]
+        else:
+            args += ["--dirinstall"]
 
-        # Install directly into ROOT_PATH, make sure it starts clean
-        if os.path.exists(ROOT_PATH):
-            shutil.rmtree(ROOT_PATH)
-        if not os.path.isdir(ROOT_PATH):
-            os.mkdir(ROOT_PATH)
+        os.makedirs(dirinstall_path)
     else:
         args += ["--image", disk_img]
 
@@ -619,14 +625,14 @@ def novirt_install(opts, disk_img, disk_size, repo_url):
             log.info(line)
 
         # Make sure the new filesystem is correctly labeled
-        args = ["-e", "/proc", "-e", "/sys", "-e", "/dev",
-                "/etc/selinux/targeted/contexts/files/file_contexts", "/"]
-        if opts.make_iso or opts.make_fsimage or opts.make_tar:
-            execWithRedirect("setfiles", args, root=ROOT_PATH)
+        setfiles_args = ["-e", "/proc", "-e", "/sys", "-e", "/dev",
+                         "/etc/selinux/targeted/contexts/files/file_contexts", "/"]
+        if "--dirinstall" in args:
+            execWithRedirect("setfiles", setfiles_args, root=dirinstall_path)
         else:
             with PartitionMount(disk_img) as img_mount:
                 if img_mount and img_mount.mount_dir:
-                    execWithRedirect("setfiles", args, root=img_mount.mount_dir)
+                    execWithRedirect("setfiles", setfiles_args, root=img_mount.mount_dir)
     except (subprocess.CalledProcessError, OSError) as e:
         log.error("Running anaconda failed: %s", e)
         raise InstallError("novirt_install failed")
@@ -672,8 +678,21 @@ def novirt_install(opts, disk_img, disk_size, repo_url):
         for arg in opts.compress_args:
             compress_args += arg.split(" ", 1)
 
+        rc = mktar(dirinstall_path, disk_img, opts.compression, compress_args)
+        shutil.rmtree(dirinstall_path)
+
+        if rc:
+            raise InstallError("novirt_install mktar failed: rc=%s" % rc)
+    elif opts.make_oci:
+        # An OCI image places the filesystem under /rootfs/ and adds the json files at the top
+        # And then creates a tar of the whole thing.
+        compress_args = []
+        for arg in opts.compress_args:
+            compress_args += arg.split(" ", 1)
+
+        shutil.copy2(opts.oci_config, ROOT_PATH)
+        shutil.copy2(opts.oci_runtime, ROOT_PATH)
         rc = mktar(ROOT_PATH, disk_img, opts.compression, compress_args)
-        shutil.rmtree(ROOT_PATH)
 
         if rc:
             raise InstallError("novirt_install mktar failed: rc=%s" % rc)
@@ -1118,6 +1137,12 @@ def main():
     if opts.make_oci and not (opts.oci_config and opts.oci_runtime):
         errors.append("--make-oci requires --oci-config and --oci-runtime")
 
+    if opts.make_oci and not os.path.exists(opts.oci_config):
+        errors.append("oci % file is missing" % opts.oci_config)
+
+    if opts.make_oci and not os.path.exists(opts.oci_runtime):
+        errors.append("oci % file is missing" % opts.oci_runtime)
+
     if os.getuid() != 0:
         errors.append("You need to run this as root")
 


-- 
To view this commit on github, visit https://github.com/rhinstaller/lorax/commit/6ccebefc26f474edc7384be67655cad59c50cc99


More information about the anaconda-patches mailing list