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() {