From 0d3cd4b4179065736f01546eaa79cfe4d2667bd8 Mon Sep 17 00:00:00 2001 From: Alex Polvi Date: Fri, 28 Mar 2014 19:20:21 -0700 Subject: [PATCH 1/2] feat(iso): add iso image format to image_to_vm --- build_library/qemu_template.sh | 5 ++++ build_library/vm_image_util.sh | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/build_library/qemu_template.sh b/build_library/qemu_template.sh index f4b51e722f..7d5b352e36 100755 --- a/build_library/qemu_template.sh +++ b/build_library/qemu_template.sh @@ -7,6 +7,7 @@ VM_IMAGE= VM_KERNEL= VM_INITRD= VM_MEMORY= +VM_CDROM= VM_NCPUS="`grep -c ^processor /proc/cpuinfo`" SSH_PORT=2222 SSH_KEYS="" @@ -102,6 +103,10 @@ if [ -n "${VM_UUID}" ]; then set -- -uuid "$VM_UUID" "$@" fi +if [ -n "${VM_CDROM}" ]; then + set -- -cdrom "$VM_CDROM" "$@" +fi + # Default to KVM, fall back on full emulation # ${METADATA} will be mounted in CoreOS as /media/metadata qemu-system-x86_64 \ diff --git a/build_library/vm_image_util.sh b/build_library/vm_image_util.sh index c2f66c8730..5cfb98e5e4 100644 --- a/build_library/vm_image_util.sh +++ b/build_library/vm_image_util.sh @@ -8,6 +8,7 @@ VALID_IMG_TYPES=( ami pxe + iso openstack qemu qemu_no_kexec @@ -117,6 +118,11 @@ IMG_pxe_DISK_FORMAT=cpio IMG_pxe_PARTITIONED_IMG=0 IMG_pxe_CONF_FORMAT=pxe +## pxe, which is an cpio image +IMG_iso_DISK_FORMAT=iso +IMG_iso_PARTITIONED_IMG=0 +IMG_iso_CONF_FORMAT=iso + ## gce, image tarball IMG_gce_DISK_LAYOUT=vm IMG_gce_CONF_FORMAT=gce @@ -355,6 +361,39 @@ EOF VM_GENERATED_FILES+=( "${dst_dir}/${vmlinuz_name}" ) } +_write_iso_disk() { + local iso_target="${VM_TMP_DIR}/rootiso" + local dst_dir=$(_dst_dir) + local vmlinuz_name="$(_dst_name ".vmlinuz")" + _write_cpio_disk $@ + VM_GENERATED_FILES= + + mkdir ${iso_target} + pushd "${iso_target}" >/dev/null + mkdir isolinux syslinux coreos + mv $2 coreos/cpio.gz + mv "${dst_dir}/${vmlinuz_name}" coreos/vmlinuz + #for file in chain.c32 libcom32.c32 libutil.c32 memdisk; do + #for file in isolinux.bin ldlinux.c32; do + cp -R /usr/share/syslinux/* isolinux/ + cat< isolinux/isolinux.cfg +INCLUDE /syslinux/syslinux.cfg +EOF + cat< syslinux/syslinux.cfg +default coreos +prompt 0 +timeout 15 + +label coreos + menu default + kernel /coreos/vmlinuz + append initrd=/coreos/cpio.gz coreos.autologin +EOF + mkisofs -v -l -r -J -o $2 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table . + isohybrid $2 + popd >/dev/null +} + # If a config format is defined write it! write_vm_conf() { local conf_format=$(_get_vm_opt CONF_FORMAT) @@ -420,6 +459,13 @@ When using -nographic or -serial you must also enable the serial console: EOF } +_write_iso_conf() { + local script="$(_dst_dir)/$(_dst_name ".sh")" + local dst_name=$(basename "$VM_DST_IMG") + _write_qemu_common "${script}" + sed -e "s%^VM_CDROM=.*%VM_CDROM='${dst_name}'%" -i "${script}" +} + # Generate the vmware config file # A good reference doc: http://www.sanbarrow.com/vmx.html _write_vmx_conf() { From e3156672ceab01f74ad04838b86c38f16e73eba2 Mon Sep 17 00:00:00 2001 From: Alex Polvi Date: Mon, 31 Mar 2014 16:08:29 -0700 Subject: [PATCH 2/2] refactor to use _write_cpio_common --- build_library/vm_image_util.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/build_library/vm_image_util.sh b/build_library/vm_image_util.sh index 5cfb98e5e4..dc1d174c72 100644 --- a/build_library/vm_image_util.sh +++ b/build_library/vm_image_util.sh @@ -298,9 +298,7 @@ _write_vmdk_scsi_disk() { qemu-img convert -f raw "$1" -O vmdk -o adapter_type=lsilogic "$2" } -# The cpio "disk" is a bit special, -# consists of a kernel+initrd not a block device -_write_cpio_disk() { +_write_cpio_common() { local cpio_target="${VM_TMP_DIR}/rootcpio" local dst_dir=$(_dst_dir) local vmlinuz_name="$(_dst_name ".vmlinuz")" @@ -356,32 +354,38 @@ EOF find . | cpio -o -H newc | gzip > "$2" popd >/dev/null +} + +# The cpio "disk" is a bit special, +# consists of a kernel+initrd not a block device +_write_cpio_disk() { + local base_dir="${VM_TMP_ROOT}/usr" + local dst_dir=$(_dst_dir) + local vmlinuz_name="$(_dst_name ".vmlinuz")" + _write_cpio_common $@ # Pull the kernel out of the filesystem cp "${base_dir}"/boot/vmlinuz "${dst_dir}/${vmlinuz_name}" VM_GENERATED_FILES+=( "${dst_dir}/${vmlinuz_name}" ) } _write_iso_disk() { + local base_dir="${VM_TMP_ROOT}/usr" local iso_target="${VM_TMP_DIR}/rootiso" local dst_dir=$(_dst_dir) local vmlinuz_name="$(_dst_name ".vmlinuz")" - _write_cpio_disk $@ - VM_GENERATED_FILES= - mkdir ${iso_target} + mkdir "${iso_target}" pushd "${iso_target}" >/dev/null mkdir isolinux syslinux coreos - mv $2 coreos/cpio.gz - mv "${dst_dir}/${vmlinuz_name}" coreos/vmlinuz - #for file in chain.c32 libcom32.c32 libutil.c32 memdisk; do - #for file in isolinux.bin ldlinux.c32; do + _write_cpio_common "$1" "${iso_target}/coreos/cpio.gz" + cp "${base_dir}"/boot/vmlinuz "${iso_target}/coreos/vmlinuz" cp -R /usr/share/syslinux/* isolinux/ cat< isolinux/isolinux.cfg INCLUDE /syslinux/syslinux.cfg EOF cat< syslinux/syslinux.cfg default coreos -prompt 0 +prompt 1 timeout 15 label coreos