livemedia-creator: Add support for making ami images
AMI images are un-partitioned filesystem images with a grub.conf that is read by the pv-grub bootloader used by EC2. Most of the actual work making the AMI is done in the kickstart. This just creates the image file.
This commit is contained in:
parent
c2c4762df2
commit
54dd513ed8
@ -46,7 +46,7 @@ from pykickstart.version import makeVersion
|
|||||||
from pylorax.base import DataHolder
|
from pylorax.base import DataHolder
|
||||||
from pylorax.treebuilder import TreeBuilder, RuntimeBuilder, udev_escape
|
from pylorax.treebuilder import TreeBuilder, RuntimeBuilder, udev_escape
|
||||||
from pylorax.sysutils import joinpaths, remove, linktree
|
from pylorax.sysutils import joinpaths, remove, linktree
|
||||||
from pylorax.imgutils import PartitionMount, mksparse
|
from pylorax.imgutils import PartitionMount, mksparse, mkext4img
|
||||||
from pylorax.executils import execWithRedirect, execWithCapture
|
from pylorax.executils import execWithRedirect, execWithCapture
|
||||||
|
|
||||||
|
|
||||||
@ -406,6 +406,23 @@ def get_kernels( boot_dir ):
|
|||||||
return [f[8:] for f in files if f.startswith("vmlinuz-")]
|
return [f[8:] for f in files if f.startswith("vmlinuz-")]
|
||||||
|
|
||||||
|
|
||||||
|
def make_ami( disk_img, ami_img="ami-root.img", ami_label="AMI" ):
|
||||||
|
"""
|
||||||
|
Copy the / partition to an un-partitioned disk image
|
||||||
|
|
||||||
|
ami_img is the filename to write, defaults to ami-root.img
|
||||||
|
ami_label is the FS label to apply to the image
|
||||||
|
|
||||||
|
All other AMI setup is handled by the kickstart's %post
|
||||||
|
"""
|
||||||
|
with PartitionMount( disk_img ) as img_mount:
|
||||||
|
work_dir = tempfile.mkdtemp()
|
||||||
|
log.info("working dir is {0}".format(work_dir))
|
||||||
|
log.info("creating {0}".format(ami_img))
|
||||||
|
mkext4img(img_mount.mount_dir, joinpaths(work_dir, ami_img), label=ami_label)
|
||||||
|
return work_dir
|
||||||
|
|
||||||
|
|
||||||
def make_livecd( disk_img, squashfs_args="", templatedir=None,
|
def make_livecd( disk_img, squashfs_args="", templatedir=None,
|
||||||
title="Linux", project="Linux", releasever=16 ):
|
title="Linux", project="Linux", releasever=16 ):
|
||||||
"""
|
"""
|
||||||
@ -423,6 +440,9 @@ def make_livecd( disk_img, squashfs_args="", templatedir=None,
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
with PartitionMount( disk_img ) as img_mount:
|
with PartitionMount( disk_img ) as img_mount:
|
||||||
|
if not img_mount or not img_mount.mount_dir:
|
||||||
|
return None
|
||||||
|
|
||||||
kernel_list = get_kernels( joinpaths( img_mount.mount_dir, "boot" ) )
|
kernel_list = get_kernels( joinpaths( img_mount.mount_dir, "boot" ) )
|
||||||
log.debug( "kernel_list = {0}".format(kernel_list) )
|
log.debug( "kernel_list = {0}".format(kernel_list) )
|
||||||
if kernel_list:
|
if kernel_list:
|
||||||
@ -592,7 +612,7 @@ if __name__ == '__main__':
|
|||||||
log.error("You need to run this as root")
|
log.error("You need to run this as root")
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
|
|
||||||
if not os.path.exists( opts.lorax_templates ):
|
if opts.make_iso and not os.path.exists( opts.lorax_templates ):
|
||||||
log.error( "The lorax templates directory ({0}) doesn't"
|
log.error( "The lorax templates directory ({0}) doesn't"
|
||||||
" exist.".format( opts.lorax_templates ) )
|
" exist.".format( opts.lorax_templates ) )
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
@ -614,10 +634,6 @@ if __name__ == '__main__':
|
|||||||
log.error( "--make-appliance is not yet implemented." )
|
log.error( "--make-appliance is not yet implemented." )
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
|
|
||||||
if opts.make_ami:
|
|
||||||
log.error( "--make-ami is not yet implemented." )
|
|
||||||
sys.exit( 1 )
|
|
||||||
|
|
||||||
if not opts.no_virt and not opts.iso and not opts.disk_image:
|
if not opts.no_virt and not opts.iso and not opts.disk_image:
|
||||||
log.error( "virt-install needs an install iso." )
|
log.error( "virt-install needs an install iso." )
|
||||||
sys.exit( 1 )
|
sys.exit( 1 )
|
||||||
@ -701,13 +717,16 @@ if __name__ == '__main__':
|
|||||||
result_dir = make_livecd( opts.disk_image or disk_img, opts.squashfs_args,
|
result_dir = make_livecd( opts.disk_image or disk_img, opts.squashfs_args,
|
||||||
opts.lorax_templates,
|
opts.lorax_templates,
|
||||||
opts.title, opts.project, opts.releasever )
|
opts.title, opts.project, opts.releasever )
|
||||||
|
elif opts.make_ami and not opts.image_only:
|
||||||
|
result_dir = make_ami(opts.disk_image or disk_img)
|
||||||
|
|
||||||
if not opts.keep_image and not opts.disk_image:
|
# cleanup the mess
|
||||||
os.unlink( disk_img )
|
if disk_img and not opts.keep_image and not opts.disk_image:
|
||||||
|
os.unlink( disk_img )
|
||||||
|
|
||||||
if opts.result_dir:
|
if opts.result_dir and result_dir:
|
||||||
shutil.copytree( result_dir, opts.result_dir )
|
shutil.copytree( result_dir, opts.result_dir )
|
||||||
shutil.rmtree( result_dir )
|
shutil.rmtree( result_dir )
|
||||||
|
|
||||||
log.info("SUMMARY")
|
log.info("SUMMARY")
|
||||||
log.info("-------")
|
log.info("-------")
|
||||||
|
Loading…
Reference in New Issue
Block a user