livemedia-creator: Add --make-oci for Open Container Initiative images
This implements the bundle spec from: https://github.com/opencontainers/specs It creates a tar with the filesystem under /rootfs/ and includes user provided config.json and runtime.json files.
This commit is contained in:
parent
b96fd98af3
commit
3de5c0b53e
@ -709,7 +709,7 @@ def virt_install(opts, install_log, disk_img, disk_size):
|
|||||||
|
|
||||||
mkqcow2(disk_img, disk_size*1024**2, qcow2_args)
|
mkqcow2(disk_img, disk_size*1024**2, qcow2_args)
|
||||||
|
|
||||||
if opts.make_fsimage or opts.make_tar:
|
if opts.make_fsimage or opts.make_tar or opts.make_oci:
|
||||||
diskimg_path = tempfile.mktemp(prefix="disk", suffix=".img")
|
diskimg_path = tempfile.mktemp(prefix="disk", suffix=".img")
|
||||||
else:
|
else:
|
||||||
diskimg_path = disk_img
|
diskimg_path = disk_img
|
||||||
@ -753,6 +753,22 @@ def virt_install(opts, install_log, disk_img, disk_size):
|
|||||||
|
|
||||||
if rc:
|
if rc:
|
||||||
raise InstallError("virt_install failed")
|
raise InstallError("virt_install failed")
|
||||||
|
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)
|
||||||
|
|
||||||
|
with PartitionMount(diskimg_path, submount="rootfs") as img_mount:
|
||||||
|
if img_mount and img_mount.temp_dir:
|
||||||
|
shutil.copy2(opts.oci_config, img_mount.temp_dir)
|
||||||
|
shutil.copy2(opts.oci_runtime, img_mount.temp_dir)
|
||||||
|
rc = mktar(img_mount.temp_dir, disk_img, opts.compression, compress_args)
|
||||||
|
os.unlink(diskimg_path)
|
||||||
|
|
||||||
|
if rc:
|
||||||
|
raise InstallError("virt_install failed")
|
||||||
|
|
||||||
|
|
||||||
def make_squashfs(disk_img, work_dir, compression="xz"):
|
def make_squashfs(disk_img, work_dir, compression="xz"):
|
||||||
@ -906,6 +922,8 @@ def main():
|
|||||||
help="Build a live pxe boot squashfs image")
|
help="Build a live pxe boot squashfs image")
|
||||||
action.add_argument("--make-ostree-live", action="store_true",
|
action.add_argument("--make-ostree-live", action="store_true",
|
||||||
help="Build a live pxe boot squashfs image of Atomic Host")
|
help="Build a live pxe boot squashfs image of Atomic Host")
|
||||||
|
action.add_argument("--make-oci", action="store_true",
|
||||||
|
help="Build an Open Container Initiative image")
|
||||||
|
|
||||||
parser.add_argument("--iso", type=os.path.abspath,
|
parser.add_argument("--iso", type=os.path.abspath,
|
||||||
help="Anaconda installation .iso path to use for virt-install")
|
help="Anaconda installation .iso path to use for virt-install")
|
||||||
@ -1006,6 +1024,12 @@ def main():
|
|||||||
pxelive_group.add_argument("--live-rootfs-keep-size", action="store_true",
|
pxelive_group.add_argument("--live-rootfs-keep-size", action="store_true",
|
||||||
help="Keep the original size of root filesystem in live image")
|
help="Keep the original size of root filesystem in live image")
|
||||||
|
|
||||||
|
# OCI specific commands
|
||||||
|
oci_group = parser.add_argument_group("OCI arguments")
|
||||||
|
oci_group.add_argument("--oci-config",
|
||||||
|
help="config.json OCI configuration file")
|
||||||
|
oci_group.add_argument("--oci-runtime",
|
||||||
|
help="runtime.json OCI configuration file")
|
||||||
|
|
||||||
parser.add_argument("--title", default="Linux Live Media",
|
parser.add_argument("--title", default="Linux Live Media",
|
||||||
help="Substituted for @TITLE@ in bootloader config files")
|
help="Substituted for @TITLE@ in bootloader config files")
|
||||||
@ -1091,6 +1115,9 @@ def main():
|
|||||||
if opts.make_tar and opts.qcow2:
|
if opts.make_tar and opts.qcow2:
|
||||||
errors.append("qcow2 cannot be used to make a tar.")
|
errors.append("qcow2 cannot be used to make a tar.")
|
||||||
|
|
||||||
|
if opts.make_oci and not (opts.oci_config and opts.oci_runtime):
|
||||||
|
errors.append("--make-oci requires --oci-config and --oci-runtime")
|
||||||
|
|
||||||
if os.getuid() != 0:
|
if os.getuid() != 0:
|
||||||
errors.append("You need to run this as root")
|
errors.append("You need to run this as root")
|
||||||
|
|
||||||
@ -1116,6 +1143,12 @@ def main():
|
|||||||
opts.image_name = "root.tar.xz"
|
opts.image_name = "root.tar.xz"
|
||||||
if opts.compression == "xz" and not opts.compress_args:
|
if opts.compression == "xz" and not opts.compress_args:
|
||||||
opts.compress_args = ["-9"]
|
opts.compress_args = ["-9"]
|
||||||
|
elif opts.make_oci:
|
||||||
|
if not opts.image_name:
|
||||||
|
opts.image_name = "bundle.tar.xz"
|
||||||
|
if opts.compression == "xz" and not opts.compress_args:
|
||||||
|
opts.compress_args = ["-9"]
|
||||||
|
|
||||||
|
|
||||||
if opts.app_file:
|
if opts.app_file:
|
||||||
opts.app_file = joinpaths(opts.result_dir, opts.app_file)
|
opts.app_file = joinpaths(opts.result_dir, opts.app_file)
|
||||||
|
Loading…
Reference in New Issue
Block a user