Author: gjb
Date: Tue Jan 20 23:56:04 2015
New Revision: 277458
URL: https://svnweb.freebsd.org/changeset/base/277458

Log:
  Merge the following revisions from ^/projects/release-vmimage:
   r273823-r273826, r273833, r273836, r273944, r274069-r274071,
   r274134, r274211, r274280-r274285, r274287-r274288, r274292,
   r274296-r274297, r274356, r274533, r274725, r274726, r274729,
   r274734, r274771, r274945-r274946, r277180, r277183-r277184,
   r277186-r277187, r277250-r277253, r277263-r277264, r277383-r277384,
   r277393-r277395, r277438-r277439, r277447, r277455:
  
   r273823:
    Move virtual machine / cloud provider targets and
    options from release/Makefile to their own Makefile.
  
   r273824:
    Add glue to allow enabling building cloud provider VM images
    by default.
  
    When WITH_CLOUDWARE is not empty, add CLOUDTARGETS to the
    release/Makefile 'release' target.
  
   r273825:
    Avoid hard-coding the Azure image file format.  While here,
    avoid using OSRELEASE for the output file name.
  
   r273826:
    Remove a few vestiges of passing an exit code to panic().
  
   r273833:
    Initial commit providing a mechanism to create openstack images
    as part of the release build.
  
   r273836:
    Fix output file name for openstack images.  No further conversion
    is necessary for this VM file target, so there is no need to append
    the '.raw' suffix here.
  
   r273944:
    Uncomment the cloudinit rc.conf(5) line.
  
   r274069:
    Add line continuation so OPENSTACKCONF is actually included in the env(1).
  
   r274070:
    Add a 'vm-cloudware' target, used to drive all targets in CLOUDTARGETS.
  
   r274071:
    Add examples for WITH_CLOUDWARE to release.conf.sample.
    Add WITH_CLOUDWARE evaluation to RELEASE_RMAKEFLAGS.
  
   r274134:
    Initial rewrite to consolidate VM image build scripts into one.
  
   r274211:
    Add write_partition_layout() used to populate the final image.
  
    Fix duplicated mkimg(1) call in vm_create_disk().
  
    Add primitive (untested) PowerPC/PowerPC64 VM image support.
  
    Note: As it is currently written, the /boot/pmbr and
    /boot/{gptboot,boot1.hfs} use the build host and not the target
    build.  Fixing this is likely going to be a hack in itself.
  
   r274280:
    Return if vm_create_disk() is unsuccessful.
  
   r274281:
    Add CLEANFILES entry for VM targets
  
   r274282:
    Add vm_extra_pre_umount() prototype to vmimage.subr.
  
   r274283:
    Fix DESTDIR for installworld, and make sure it is created before use.
  
   r274284:
    Move usage() from vmimage.subr to mk-vmimage.sh, in case vmimage.subr
    has not been sourced.
  
   r274285:
    Spell 'OPTARG' correctly.  Actually call vm_create_base().
  
   r274287:
    Fix line continuation in write_partition_layout().
    Remove variable test that is no longer needed.
  
   r274288:
    Fix scheme flag to mkimg(1).
  
   r274292:
    mount(8) and umount(8) devfs(5) as needed.
  
   r274296:
    Change path for mk-vmimage.sh from ${TARGET}/ to scripts/ now that
    it is consolidated into one file.
  
    Fix paths for the base image and output disk image files.
  
   r274297:
    Call cleanup() after everything is done.
  
   r274356:
    Remove a stray directory from CLEANFILES.
  
   r274533:
    Set the boot partition type to 'apple-boot' for powerpc.
  
   r274725:
    In vm_install_base(), copy the host resolv.conf into
    the build chroot before attempting to do anything that
    requires working DNS (i.e., pkg bootstrap).
  
    In vm_extra_pre_umount(), remove the resolv.conf before
    the disk image is unmounted from the backing md(4).
  
   r274726 (cperciva):
    Silence errors when umounting the chroot's /dev, since it
    probably doesn't exist when we're running this.
  
    Unmount filesystems before attempting to destroy the md which
    holds them.
  
   r274729 (cperciva):
    Unmount filesystem and destroy md before we read the vnode from
    disk and package it into a disk image.  Otherwise we end up
    packaging an unclean filesystem.
  
   r274734 (cperciva):
    Merge duplicative vm-CLOUDTYPE targets before additional duplication
    gets added by the impending arrival of ec2 and gcloud.
  
   r274771 (cperciva):
    Add NOSWAP option which can be set by a vmimage.conf file to specify
    that no swap space should be created in the image.  This will be used
    by EC2 builds, since FreeBSD/EC2 allocates swap space on "ephemeral"
    disks which are physically attached to the Xen host node.
  
   r274945:
    In vm_extra_install_packages(), only bootstrap pkg(8) if
    VM_EXTRA_PACKAGES is empty.
  
    In vm_extra_pre_umount(), cleanup downloaded packages if pkg(8) was
    bootstrapped earlier.
  
   r274946:
    Fix indentation nit.
  
   r277180:
    In vm_extra_install_base(), do not install waagent in the openstack
    image, because it is not used.  This appears to be a copy mistake.
  
    Remove vm_extra_install_base() from the openstack.conf entirely,
    since it does not need to be overridden.
  
   r277183:
    Enable the textmode console by default for VM images, since there is
    no way to tell if the environment will be able to use the
    graphics-mode console.
  
   r277184:
    Enable password-less sudo for openstack images.
  
   r277186:
    Update the VM_EXTRA_PACKAGES list for the openstack images.
  
    The documentation suggests doing a "just fetch this and run it"-style
    bootstrap, from which the list of dependencies was obtained (in
    github, at: pellaeon/bsd-cloudinit-installer)
  
    There is one Python dependency unmet, oslo.config, which is not in
    the Ports Collection.
  
   r277187:
    Add a comment to note that setting hw.vga.textmode=1 is temporary.
  
   r277250:
    Remove vm_extra_install_base() for the Azure image, now that the
    waagent exists in the ports tree.
  
    Add sysutils/azure-agent to the VM_EXTRA_PACKAGES list.
  
    In vm_extra_pre_umount(), remove the explicit pkg(8) install
    list, as dependencies are resolved by sysutils/azure-agent.
  
   r277251:
    Add a 'list-cloudware' target to print the list of supported CLOUDWARE
    values and a description.
  
    Add the AZURE_DESC and OPENSTACK_DESC descriptions.
  
   r277252:
    Update release(7)
  
   r277253:
    Add 'list-vmtargets' target, which produces a list of all supported
    VM and cloud provider images.
  
    Add VHD_DESC, VMDK_DESC, QCOW2_DESC, RAW_DESC image descriptions.
  
    Format the output to make a bit more readable.
  
    Update release(7) to document the list-vmtargets target.
  
   r277263:
    Add initial support for the GCE (Google Compute Engine) cloud hosting
    provider image.
  
   r277264:
    Style and line length cleanup.
  
   r277383:
    Remove the console setting from rc.conf(5), which is not used there.
    While here, set console to include vidconsole in the loader.conf(5).
  
   r277384:
    Fix an indentation nit.
    No functional changes.
  
   r277393:
    Remove the pkg-clean(8) call from vm_extra_pre_umount() since the
    function is often overridden.
  
    Add vm_extra_pkg_rmcache() to call pkg-clean(8) to avoid duplicated
    code.
  
   r277394:
    Move resolv.conf(5) removal back to vm_extra_pre_umount() where it
    belongs.
  
    The GCE image needs resolv.conf(5) to exist (created as part of the
    image setup), so it cannot be removed.
  
   r277395:
    Comment the line that configures ttys(5) to 'off', which makes it
    impossible to test that the image boots.
  
    Add a note explaining why the line is commented, and not (yet) removed
    entirely.
  
   r277438:
    Move the 'install' bits that are specific to virtual machine images
    from the Makefile to Makefile.vm.
  
    Rename the 'install' target to 'release-install', and add a new
    'vm-install' target.
  
    Add a new 'install' target that invokes the new targets.
  
   r277439:
    Add WITH_CLOUDWARE to the list of make(1) variables for the release
    build.
  
   r277447:
    Remove hw.vga.textmode=1 from the VM image loader.conf, which was
    included during test builds and not intended to be included when
    merging this project branch back to head.
  
   r277455:
    Remove mk-azure.sh, which is no longer needed.
  
  MFC after:    1 month
  X-MFC-To:     stable/10 (requires mkimg(1))
  Help from:    cperciva, swills
  Relnotes:     yes
  Sponsored by: The FreeBSD Foundation

Added:
  head/release/Makefile.vm
     - copied, changed from r273823, 
projects/release-vmimage/release/Makefile.vm
  head/release/scripts/mk-vmimage.sh
     - copied, changed from r274134, 
projects/release-vmimage/release/scripts/mk-vmimage.sh
  head/release/tools/gce.conf
     - copied, changed from r277263, 
projects/release-vmimage/release/tools/gce.conf
  head/release/tools/openstack.conf
     - copied, changed from r273833, 
projects/release-vmimage/release/tools/openstack.conf
  head/release/tools/vmimage.subr   (contents, props changed)
     - copied, changed from r274134, 
projects/release-vmimage/release/tools/vmimage.subr
Deleted:
  head/release/amd64/mk-azure.sh
  head/release/amd64/mk-vmimage.sh
  head/release/i386/mk-azure.sh
  head/release/i386/mk-vmimage.sh
Modified:
  head/release/Makefile
  head/release/release.conf.sample
  head/release/release.sh
  head/release/tools/azure.conf
  head/share/man/man7/release.7

Modified: head/release/Makefile
==============================================================================
--- head/release/Makefile       Tue Jan 20 23:39:08 2015        (r277457)
+++ head/release/Makefile       Tue Jan 20 23:56:04 2015        (r277458)
@@ -9,7 +9,9 @@
 #  mini-memstick: Builds minimal memory stick image (mini-memstick.img)
 #  ftp: Sets up FTP distribution area (ftp)
 #  release: Build all media and FTP distribution area
-#  install: Copies all release media into ${DESTDIR}
+#  install: Invokes the release-install and vm-install targets
+#  release-install: Copies all release installation media into ${DESTDIR}
+#  vm-install: Copies all virtual machine images into ${DESTDIR}
 #
 # Variables affecting the build process:
 #  WORLDDIR: location of src tree -- must have built world and default kernel
@@ -26,6 +28,7 @@
 #  WITH_VMIMAGES: if set, build virtual machine images with the release
 #  WITH_COMPRESSED_VMIMAGES: if set, compress virtual machine disk images
 #              with xz(1) (extremely time consuming)
+#  WITH_CLOUDWARE: if set, build cloud hosting disk images with the release
 #  TARGET/TARGET_ARCH: architecture of built release
 #
 
@@ -103,12 +106,6 @@ IMAGES+=   memstick.img
 IMAGES+=       mini-memstick.img
 .endif
 
-VMTARGETS=     vm-base vm-image
-VMFORMATS?=    vhd vmdk qcow2 raw
-VMSIZE?=       20G
-VMBASE?=       vm
-AZURECONF?=    ${.CURDIR}/tools/azure.conf
-
 CLEANFILES=    packagesystem *.txz MANIFEST system ${IMAGES}
 .if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES)
 . for I in ${IMAGES}
@@ -118,22 +115,7 @@ CLEANFILES+=       ${I}.xz
 .if defined(WITH_DVD) && !empty(WITH_DVD)
 CLEANFILES+=   pkg-stage
 .endif
-.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-CLEANFILES+=   ${VMBASE}.img
-. for FORMAT in ${VMFORMATS}
-CLEANFILES+=   ${VMBASE}.${FORMAT}
-. endfor
-.endif
 CLEANDIRS=     dist ftp release bootonly dvd
-.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-CLEANDIRS+=    ${VMTARGETS}
-.endif
-.if exists(${.CURDIR}/${TARGET}/mk-azure.sh)
-CLEANFILES+=   ${OSRELEASE}.vhd \
-               ${OSRELEASE}.vhd.raw \
-               azure.img
-CLEANDIRS+=    vm-azure
-.endif
 beforeclean:
        chflags -R noschg .
 .include <bsd.obj.mk>
@@ -299,8 +281,13 @@ release:
 .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
        ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS}
 .endif
+.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
+       ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS}
+.endif
+
+install:       release-install vm-install
 
-install:
+release-install:
 .if defined(DESTDIR) && !empty(DESTDIR)
        mkdir -p ${DESTDIR}
 .endif
@@ -313,52 +300,5 @@ install:
 .endfor
        cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256
        cd ${DESTDIR} && md5 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.MD5
-.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-       mkdir -p ${DESTDIR}/vmimages
-. for FORMAT in ${VMFORMATS}
-       cp -p ${VMBASE}.${FORMAT} \
-               ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
-. endfor
-. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
-# This is very time consuming, so defer it after the images are moved to
-# the DESTDIR.
-.  for FORMAT in ${VMFORMATS}
-       # Don't keep the originals.  There is a copy in ${.OBJDIR} if needed.
-       ${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
-.  endfor
-. endif
-       cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
-               ${DESTDIR}/vmimages/CHECKSUM.SHA256
-       cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
-               ${DESTDIR}/vmimages/CHECKSUM.MD5
-.endif
 
-vm-base:
-.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-. if exists(${.CURDIR}/${TARGET}/mk-vmimage.sh)
-       env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
-               ${.CURDIR}/${TARGET}/mk-vmimage.sh ${.TARGET} \
-               ${VMBASE}.img ${WORLDDIR} ${.OBJDIR}/${.TARGET} ${VMSIZE}
-. endif
-.endif
-       touch ${.TARGET}
-
-vm-image: vm-base
-.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-. if exists(${.CURDIR}/${TARGET}/mk-vmimage.sh)
-.  for FORMAT in ${VMFORMATS}
-       env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
-               ${.CURDIR}/${TARGET}/mk-vmimage.sh ${.TARGET} \
-               ${VMBASE}.img ${FORMAT} ${VMBASE}.${FORMAT}
-.  endfor
-. endif
-.endif
-       touch ${.TARGET}
-
-vm-azure:
-.if exists(${.CURDIR}/${TARGET}/mk-azure.sh)
-       env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} AZURECONF=${AZURECONF} \
-               ${.CURDIR}/${TARGET}/mk-azure.sh ${.TARGET} azure.img \
-               ${WORLDDIR} ${.TARGET} ${VMSIZE} ${OSRELEASE}.vhd
-.endif
-       touch ${.TARGET}
+.include "${.CURDIR}/Makefile.vm"

Copied and modified: head/release/Makefile.vm (from r273823, 
projects/release-vmimage/release/Makefile.vm)
==============================================================================
--- projects/release-vmimage/release/Makefile.vm        Wed Oct 29 14:57:30 
2014        (r273823, copy source)
+++ head/release/Makefile.vm    Tue Jan 20 23:56:04 2015        (r277458)
@@ -5,11 +5,48 @@
 # Makefile for building virtual machine and cloud provider disk images.
 #
 
-VMTARGETS=     vm-base vm-image
+VMTARGETS=     vm-image
 VMFORMATS?=    vhd vmdk qcow2 raw
 VMSIZE?=       20G
 VMBASE?=       vm
-AZURECONF?=    ${.CURDIR}/tools/azure.conf
+
+VHD_DESC=      Azure, VirtualPC, Hyper-V, Xen disk image
+VMDK_DESC=     VMWare, VirtualBox disk image
+QCOW2_DESC=    Qemu, KVM disk image
+RAW_DESC=      Unformatted raw disk image
+
+CLOUDWARE?=    AZURE \
+               GCE \
+               OPENSTACK
+AZURE_FORMAT=  vhdf
+AZURE_DESC=    Microsoft Azure platform image
+GCE_FORMAT=    raw
+GCE_DESC=      Google Compute Engine image
+OPENSTACK_FORMAT=qcow2
+OPENSTACK_DESC=        OpenStack platform image
+
+.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE)
+. for _CW in ${CLOUDWARE}
+CLOUDTARGETS+= vm-${_CW:tl}
+CLEANDIRS+=    vm-${_CW:tl}
+CLEANFILES+=   ${_CW:tl}.img \
+               ${_CW:tl}.${${_CW:tu}_FORMAT} \
+               ${_CW:tl}.${${_CW:tu}_FORMAT}.raw
+${_CW:tu}IMAGE=        ${_CW:tl}.${${_CW:tu}_FORMAT}
+.  if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF)
+${_CW:tu}CONF?=        ${.CURDIR}/tools/${_CW:tl}.conf
+.  endif
+
+vm-${_CW:tl}:
+       mkdir -p ${.OBJDIR}/${.TARGET}
+       env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
+               ${.CURDIR}/scripts/mk-vmimage.sh \
+               -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
+               -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \
+               -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF}
+       touch ${.TARGET}
+. endfor
+.endif
 
 .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
 CLEANDIRS+=    ${VMTARGETS}
@@ -19,39 +56,56 @@ CLEANFILES+=        ${VMBASE}.${FORMAT}
 . endfor
 .endif
 
-.if exists(${.CURDIR}/${TARGET}/mk-azure.sh)
-CLEANFILES+=   ${OSRELEASE}.vhd \
-               ${OSRELEASE}.vhd.raw \
-               azure.img
-CLEANDIRS+=    vm-azure
-.endif
+vm-base:       vm-image
 
-vm-base:
+vm-image:
 .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-. if exists(${.CURDIR}/${TARGET}/mk-vmimage.sh)
+. for FORMAT in ${VMFORMATS}
+       mkdir -p ${.OBJDIR}/${.TARGET}
        env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
-               ${.CURDIR}/${TARGET}/mk-vmimage.sh ${.TARGET} \
-               ${VMBASE}.img ${WORLDDIR} ${.OBJDIR}/${.TARGET} ${VMSIZE}
-. endif
+               ${.CURDIR}/scripts/mk-vmimage.sh \
+               -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \
+               -i ${.OBJDIR}/${VMBASE}.img -s ${VMSIZE} -f ${FORMAT} \
+               -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT}
+. endfor
 .endif
        touch ${.TARGET}
 
-vm-image: vm-base
+vm-cloudware:  ${CLOUDTARGETS}
+
+list-vmtargets:        list-cloudware
+       @${ECHO}
+       @${ECHO} "Supported virtual machine disk image formats:"
+.for FORMAT in ${VMFORMATS:tu}
+       @${ECHO} "  ${FORMAT:tl}: ${${FORMAT}_DESC}"
+.endfor
+
+list-cloudware:
+.if !empty(CLOUDWARE)
+       @${ECHO}
+       @${ECHO} "Supported cloud hosting provider images:"
+. for _CW in ${CLOUDWARE}
+       @${ECHO} "  ${_CW:tu}: ${${_CW:tu}_DESC}"
+. endfor
+.endif
+
+vm-install:
 .if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES)
-. if exists(${.CURDIR}/${TARGET}/mk-vmimage.sh)
+       mkdir -p ${DESTDIR}/vmimages
+. for FORMAT in ${VMFORMATS}
+       cp -p ${VMBASE}.${FORMAT} \
+               ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
+. endfor
+. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES)
+# This is very time consuming, so defer it after the images are moved to
+# the DESTDIR.
 .  for FORMAT in ${VMFORMATS}
-       env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
-               ${.CURDIR}/${TARGET}/mk-vmimage.sh ${.TARGET} \
-               ${VMBASE}.img ${FORMAT} ${VMBASE}.${FORMAT}
+       # Don't keep the originals.  There is a copy in ${.OBJDIR} if needed.
+       ${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT}
 .  endfor
 . endif
+       cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \
+               ${DESTDIR}/vmimages/CHECKSUM.SHA256
+       cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \
+               ${DESTDIR}/vmimages/CHECKSUM.MD5
 .endif
-       touch ${.TARGET}
-
-vm-azure:
-.if exists(${.CURDIR}/${TARGET}/mk-azure.sh)
-       env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} AZURECONF=${AZURECONF} \
-               ${.CURDIR}/${TARGET}/mk-azure.sh ${.TARGET} azure.img \
-               ${WORLDDIR} ${.TARGET} ${VMSIZE} ${OSRELEASE}.vhd
-.endif
-       touch ${.TARGET}

Modified: head/release/release.conf.sample
==============================================================================
--- head/release/release.conf.sample    Tue Jan 20 23:39:08 2015        
(r277457)
+++ head/release/release.conf.sample    Tue Jan 20 23:56:04 2015        
(r277458)
@@ -98,3 +98,11 @@ PORTBRANCH="ports/head@rHEAD"
 ## image formats to create.  Valid values are listed in the mkimg(1)
 ## manual page, as well as 'mkimg --formats' output.
 #VMFORMATS="vhdf vmdk qcow2 raw"
+
+## Set to a non-empty value to build virtual machine images for various
+## cloud providers as part of the release build.
+#WITH_CLOUDWARE=
+
+## If WITH_CLOUDWARE is set to a non-empty value, this is a list of providers
+## to create disk images.
+#CLOUDWARE="AZURE OPENSTACK"

Modified: head/release/release.sh
==============================================================================
--- head/release/release.sh     Tue Jan 20 23:39:08 2015        (r277457)
+++ head/release/release.sh     Tue Jan 20 23:56:04 2015        (r277458)
@@ -94,6 +94,10 @@ WITH_COMPRESSED_IMAGES=
 WITH_VMIMAGES=
 WITH_COMPRESSED_VMIMAGES=
 
+# Set to non-empty value to build virtual machine images for various
+# cloud providers as part of the release.
+WITH_CLOUDWARE=
+
 usage() {
        echo "Usage: $0 [-c release.conf]"
        exit 1
@@ -174,7 +178,8 @@ CHROOT_DMAKEFLAGS="${CONF_FILES}"
 RELEASE_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${ARCH_FLAGS} ${CONF_FILES}"
 RELEASE_KMAKEFLAGS="${MAKE_FLAGS} ${KERNEL_FLAGS} KERNCONF=\"${KERNEL}\" 
${ARCH_FLAGS} ${CONF_FILES}"
 RELEASE_RMAKEFLAGS="${ARCH_FLAGS} KERNCONF=\"${KERNEL}\" ${CONF_FILES} \
-       ${DOCPORTS} WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES}"
+       ${DOCPORTS} WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES} \
+       WITH_CLOUDWARE=${WITH_CLOUDWARE}"
 
 # Force src checkout if configured
 FORCE_SRC_KEY=

Copied and modified: head/release/scripts/mk-vmimage.sh (from r274134, 
projects/release-vmimage/release/scripts/mk-vmimage.sh)
==============================================================================
--- projects/release-vmimage/release/scripts/mk-vmimage.sh      Wed Nov  5 
13:22:19 2014        (r274134, copy source)
+++ head/release/scripts/mk-vmimage.sh  Tue Jan 20 23:56:04 2015        
(r277458)
@@ -32,6 +32,12 @@
 # $FreeBSD$
 #
 
+usage() {
+       echo "${0} usage:"
+       echo "${@}"
+       return 1
+}
+
 main() {
        local arg
        while getopts "C:c:d:f:i:o:s:S:" arg; do
@@ -49,7 +55,7 @@ main() {
                                VMFORMAT="${OPTARG}"
                                ;;
                        i)
-                               VMBASE="${VMBASE}"
+                               VMBASE="${OPTARG}"
                                ;;
                        o)
                                VMIMAGE="${OPTARG}"
@@ -87,13 +93,16 @@ main() {
                . "${VMCONFIG}"
        fi
 
+       vm_create_base
        vm_install_base
        vm_extra_install_base
        vm_extra_install_packages
        vm_extra_install_ports
        vm_extra_enable_services
        vm_extra_pre_umount
-       vm_create_disk
+       vm_extra_pkg_rmcache
+       cleanup
+       vm_create_disk || return 0
        vm_extra_create_disk
 
        return 0

Modified: head/release/tools/azure.conf
==============================================================================
--- head/release/tools/azure.conf       Tue Jan 20 23:39:08 2015        
(r277457)
+++ head/release/tools/azure.conf       Tue Jan 20 23:56:04 2015        
(r277458)
@@ -6,9 +6,37 @@
 # Set to a list of packages to install.
 # Example:
 #export VM_EXTRA_PACKAGES="www/apache24"
-export VM_EXTRA_PACKAGES=
+export VM_EXTRA_PACKAGES="sysutils/azure-agent"
 
 # Set to a list of third-party software to enable in rc.conf(5).
 # Example:
 #export VM_RC_LIST="apache24"
 export VM_RC_LIST=
+
+vm_extra_pre_umount() {
+       chroot ${DESTDIR} /usr/sbin/waagent -verbose -install
+       yes | chroot ${DESTDIR} /usr/sbin/waagent -deprovision
+       echo 'sshd_enable="YES"' >> ${DESTDIR}/etc/rc.conf
+       echo 'ifconfig_hn0="SYNCDHCP"' >> ${DESTDIR}/etc/rc.conf
+       echo 'waagent_enable="YES"' >> ${DESTDIR}/etc/rc.conf
+       echo 'console="comconsole vidconsole"' >> ${DESTDIR}/boot/loader.conf
+       echo 'comconsole_speed="115200"' >> ${DESTDIR}/boot/loader.conf
+
+       rm -f ${DESTDIR}/etc/resolv.conf
+
+       return 0
+}
+
+vm_extra_create_disk() {
+       if [ ! -x "/usr/local/bin/qemu-img" ]; then
+               env ASSUME_ALWAYS_YES=yes pkg install -y emulators/qemu-devel
+       fi
+
+       mv ${VMIMAGE} ${VMIMAGE}.raw
+       size=$(qemu-img info -f raw --output json ${VMIMAGE}.raw | awk 
'/virtual-size/ {print $2}' | tr -d ',')
+       size=$(( ( ${size} / ( 1024 * 1024 ) + 1 ) * ( 1024 * 1024 ) ))
+       qemu-img resize ${VMIMAGE}.raw ${size}
+       qemu-img convert -f raw -o subformat=fixed -O vpc ${VMIMAGE}.raw 
${VMIMAGE}
+
+       return 0
+}

Copied and modified: head/release/tools/gce.conf (from r277263, 
projects/release-vmimage/release/tools/gce.conf)
==============================================================================
--- projects/release-vmimage/release/tools/gce.conf     Fri Jan 16 19:27:19 
2015        (r277263, copy source)
+++ head/release/tools/gce.conf Tue Jan 20 23:56:04 2015        (r277458)
@@ -4,7 +4,9 @@
 #
 
 # Set to a list of packages to install.
-export VM_EXTRA_PACKAGES="firstboot-freebsd-update firstboot-pkgs 
google-cloud-sdk google-daemon panicmail sudo firstboot-growfs 
google-startup-scripts"
+export VM_EXTRA_PACKAGES="firstboot-freebsd-update firstboot-pkgs \
+       google-cloud-sdk google-daemon panicmail sudo firstboot-growfs \
+       google-startup-scripts"
 
 # Set to a list of third-party software to enable in rc.conf(5).
 export VM_RC_LIST="google_accounts_manager ntpd"
@@ -16,8 +18,7 @@ vm_extra_install_base() {
 }
 
 vm_extra_pre_umount() {
-        cat << EOF >> ${DESTDIR}/etc/rc.conf
-console="comconsole"
+       cat << EOF >> ${DESTDIR}/etc/rc.conf
 dumpdev="AUTO"
 ifconfig_vtnet0="SYNCDHCP mtu 1460"
 ntpd_sync_on_start="YES"
@@ -34,12 +35,12 @@ firstboot_growfs_enable="YES"
 google_startup_enable="YES"
 EOF
 
-        cat << EOF >> ${DESTDIR}/boot/loader.conf
+       cat << EOF >> ${DESTDIR}/boot/loader.conf
 autoboot_delay="-1"
 beastie_disable="YES"
 loader_logo="none"
 hw.memtest.tests="0"
-console="comconsole"
+console="comconsole,vidconsole"
 hw.vtnet.mq_disable=1
 kern.timecounter.hardware=ACPI-safe
 aesni_load="YES"
@@ -50,7 +51,7 @@ EOF
                ${DESTDIR}/etc/hosts
 
         # overwrite ntp.conf
-        cat << EOF > ${DESTDIR}/etc/ntp.conf
+       cat << EOF > ${DESTDIR}/etc/ntp.conf
 server metadata.google.internal iburst
 
 restrict default kod nomodify notrap nopeer noquery
@@ -61,11 +62,11 @@ restrict -6 ::1
 restrict 127.127.1.0
 EOF
 
-        cat << EOF >> ${DESTDIR}/etc/syslog.conf
+       cat << EOF >> ${DESTDIR}/etc/syslog.conf
 *.err;kern.warning;auth.notice;mail.crit                /dev/console
 EOF
 
-        cat << EOF >> ${DESTDIR}/etc/ssh/sshd_config
+       cat << EOF >> ${DESTDIR}/etc/ssh/sshd_config
 ChallengeResponseAuthentication no
 X11Forwarding no
 AcceptEnv LANG
@@ -74,11 +75,11 @@ AllowAgentForwarding no
 ClientAliveInterval 420
 EOF
 
-        cat << EOF >> ${DESTDIR}/etc/crontab
+       cat << EOF >> ${DESTDIR}/etc/crontab
 0       3       *       *       *       root    /usr/sbin/freebsd-update cron
 EOF
 
-        cat << EOF >> ${DESTDIR}/etc/sysctl.conf
+       cat << EOF >> ${DESTDIR}/etc/sysctl.conf
 net.inet.icmp.drop_redirect=1
 net.inet.ip.redirect=0
 net.inet.tcp.blackhole=2
@@ -88,9 +89,12 @@ debug.trace_on_panic=1
 debug.debugger_on_panic=0
 EOF
 
-        sed -E -i '' 's/^([^#].*[[:space:]])on/\1off/' ${DESTDIR}/etc/ttys
+       ## XXX: Verify this is needed.  I do not see this requirement
+       ## in the docs, and it impairs the ability to boot-test a copy
+       ## of the image prior to packaging for upload to GCE.
+       #sed -E -i '' 's/^([^#].*[[:space:]])on/\1off/' ${DESTDIR}/etc/ttys
 
-        touch ${DESTDIR}/firstboot
+       touch ${DESTDIR}/firstboot
 
        return 0
 }

Copied and modified: head/release/tools/openstack.conf (from r273833, 
projects/release-vmimage/release/tools/openstack.conf)
==============================================================================
--- projects/release-vmimage/release/tools/openstack.conf       Wed Oct 29 
17:04:09 2014        (r273833, copy source)
+++ head/release/tools/openstack.conf   Tue Jan 20 23:56:04 2015        
(r277458)
@@ -4,7 +4,22 @@
 #
 
 # Set to a list of packages to install.
-export VM_EXTRA_PACKAGES="net/cloud-init"
+export VM_EXTRA_PACKAGES="net/cloud-init devel/py-pbr devel/py-iso8601 \
+       net/py-eventlet net/py-netaddr comms/py-serial devel/py-six \
+       devel/py-babel net/py-oauth net/py-netifaces"
 
 # Set to a list of third-party software to enable in rc.conf(5).
-export VM_RC_LIST="#cloudinit"
+export VM_RC_LIST="cloudinit"
+
+vm_extra_pre_umount() {
+       echo 'sshd_enable="YES"' >> ${DESTDIR}/etc/rc.conf
+       echo 'ifconfig_DEFAULT="SYNCDHCP"' >> ${DESTDIR}/etc/rc.conf
+
+       # Openstack wants sudo(8) usable by default without a password.
+       echo 'ALL ALL=(ALL) NOPASSWD:ALL' >> \
+               ${DESTDIR}/usr/local/etc/sudoers.d/cloud-init
+
+       rm -f ${DESTDIR}/etc/resolv.conf
+
+       return 0
+}

Copied and modified: head/release/tools/vmimage.subr (from r274134, 
projects/release-vmimage/release/tools/vmimage.subr)
==============================================================================
--- projects/release-vmimage/release/tools/vmimage.subr Wed Nov  5 13:22:19 
2014        (r274134, copy source)
+++ head/release/tools/vmimage.subr     Tue Jan 20 23:56:04 2015        
(r277458)
@@ -9,15 +9,33 @@
 export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
 trap "cleanup" INT QUIT TRAP ABRT TERM
 
-mkimg_bootcode="/boot/pmbr"
-mkimg_partitions="-p freebsd-boot/bootfs:=/boot/gptboot"
-mkimg_partitions="${mkimg_partitions} -p freebsd-swap/swapfs::1G"
-mkimg_partitions="${mkimg_partitions} freebsd-ufs/rootfs:=${VMBASE}"
-
-usage() {
-       echo "${0} usage:"
-       echo "${@}"
-       return 1
+write_partition_layout() {
+       if [ -z "${NOSWAP}" ]; then
+               SWAPOPT="-p freebsd-swap/swapfs::1G"
+       fi
+
+       case "${TARGET}:${TARGET_ARCH}" in
+               amd64:amd64 | i386:i386)
+                       mkimg -s gpt -b /boot/pmbr \
+                               -p freebsd-boot/bootfs:=/boot/gptboot \
+                               ${SWAPOPT} \
+                               -p freebsd-ufs/rootfs:=${VMBASE} \
+                               -o ${VMIMAGE}
+                       ;;
+               powerpc:powerpc*)
+                       mkimg -s apm \
+                               -p apple-boot/bootfs:=/boot/boot1.hfs \
+                               ${SWAPOPT} \
+                               -p freebsd-ufs/rootfs:=${VMBASE} \
+                               -o ${VMIMAGE}
+                       ;;
+               *)
+                       # ENOTSUPP
+                       return 1
+                       ;;
+       esac
+
+       return 0
 }
 
 err() {
@@ -27,11 +45,11 @@ err() {
 }
 
 cleanup() {
+       umount ${DESTDIR}/dev 2>/dev/null
+       umount ${DESTDIR}
        if [ ! -z "${mddev}" ]; then
                mdconfig -d -u ${mddev}
        fi
-       umount ${DESTDIR}/dev
-       umount ${DESTDIR}
 
        return 0
 }
@@ -61,11 +79,18 @@ vm_install_base() {
                > ${DESTDIR}/etc/fstab
        echo '/dev/gpt/rootfs   /       ufs     rw      1       1' \
                >> ${DESTDIR}/etc/fstab
-       echo '/dev/gpt/swapfs  none    swap    sw      0       0' \
-               >> ${DESTDIR}/etc/fstab
+       if [ -z "${NOSWAP}" ]; then
+               echo '/dev/gpt/swapfs  none    swap    sw      0       0' \
+                       >> ${DESTDIR}/etc/fstab
+       fi
 
+       mkdir -p ${DESTDIR}/dev
+       mount -t devfs devfs ${DESTDIR}/dev
        chroot ${DESTDIR} /usr/bin/newaliases
        chroot ${DESTDIR} /etc/rc.d/ldconfig forcestart
+       umount ${DESTDIR}/dev
+
+       cp /etc/resolv.conf ${DESTDIR}/etc/resolv.conf
 
        return 0
 }
@@ -89,12 +114,16 @@ vm_extra_enable_services() {
 }
 
 vm_extra_install_packages() {
+       if [ -z "${VM_EXTRA_PACKAGES}" ]; then
+               return 0
+       fi
+       mkdir -p ${DESTDIR}/dev
+       mount -t devfs devfs ${DESTDIR}/dev
        chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
                /usr/sbin/pkg bootstrap -y
-       if [ ! -z "${VM_EXTRA_PACKAGES}" ]; then
-               chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
-                       /usr/sbin/pkg install -y ${VM_EXTRA_PACKAGES}
-       fi
+       chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
+               /usr/sbin/pkg install -y ${VM_EXTRA_PACKAGES}
+       umount ${DESTDIR}/dev
 
        return 0
 }
@@ -106,6 +135,23 @@ vm_extra_install_ports() {
        return 0
 }
 
+vm_extra_pre_umount() {
+       # Prototype.  When overridden, installs additional ports within the
+       # virtual machine environment.
+
+       rm -f ${DESTDIR}/etc/resolv.conf
+       return 0
+}
+
+vm_extra_pkg_rmcache() {
+       if [ -e ${DESTDIR}/usr/local/sbin/pkg ]; then
+               chroot ${DESTDIR} env ASSUME_ALWAYS_YES=yes \
+                       /usr/local/sbin/pkg clean -y -a
+       fi
+
+       return 0
+}
+
 vm_umount_base() {
        i=0
        sync
@@ -124,21 +170,10 @@ vm_umount_base() {
 }
 
 vm_create_disk() {
-       if [ -z "${mkimg_paritions}" ]; then
-               err "No partition types specified.  Skipping."
-               return 1
-       fi
        echo "Creating image...  Please wait."
        echo
-       mkimg -f ${mkimg_format} -s ${mkimg_scheme} \
-               ${mkimg_bootcode} \
-               ${mkimg_partitions} \
-               ${mkimg_outfile}
-
-       mkimg   -b /boot/pmbr -p freebsd-boot/bootfs:=/boot/gptboot \
-               -p freebsd-swap/swapfs::1G \
-               -p freebsd-ufs/rootfs:=${VMBASE} \
-               -o ${VMIMAGE}.raw
+
+       write_partition_layout || return 1
 
        return 0
 }

Modified: head/share/man/man7/release.7
==============================================================================
--- head/share/man/man7/release.7       Tue Jan 20 23:39:08 2015        
(r277457)
+++ head/share/man/man7/release.7       Tue Jan 20 23:56:04 2015        
(r277458)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd October 2, 2014
+.Dd January 16, 2015
 .Dt RELEASE 7
 .Os
 .Sh NAME
@@ -406,6 +406,57 @@ See
 for valid format values
 .Pq requires version 20140927 or later .
 .El
+.Pp
+For a list of supported
+.Va VMFORMATS
+values
+.Pq including cloud hosting provider formats
+along with a brief description, run:
+.Bd -literal -offset indent
+cd /usr/src
+make -C release list-vmtargets
+.Ed
+.Sh CLOUD HOSTING MACHINE IMAGES
+The
+.Fx
+release build tools support building virtual machine images for various
+cloud hosting providers, each with their own specific configuration to
+include support for each hosting provider by default.
+.Pp
+The following
+.Xr make 1
+environment variables are supported:
+.Pp
+.Bl -tag -width Ev
+.It Va CLOUDWARE
+Set to a list of one or more cloud hosting providers, enclosed in quotes.
+Requires
+.Va WITH_CLOUDWARE
+to also be set.
+.It Va WITH_CLOUDWARE
+Set to a non-empty value to enable building virtual machine images
+for various cloud hosting providers.
+Requires
+.Va CLOUDWARE
+to also be set.
+.El
+.Pp
+Additionally, the
+.Va CLOUDWARE
+and
+.Va WITH_CLOUDWARE
+variables can be added to
+.Pa release.conf ,
+and used in conjunction with
+.Pa release.sh .
+.Pp
+For a list of supported
+.Va CLOUDWARE
+values, run:
+.Bd -literal -offset indent
+cd /usr/src
+make -C release list-cloudware
+.Ed
 .Sh MAKEFILE TARGETS
 The release makefile
 .Pq Pa src/release/Makefile
@@ -470,6 +521,23 @@ target requires the
 .Va WITH_VMIMAGES
 .Xr make 1
 envirionment variable to be set to a non-null value.
+.It Cm vm-cloudware
+Builds
+.Fx
+virtual machine images for various cloud hosting providers.
+See
+.Qq CLOUD HOSTING MACHINE IMAGES
+for implementation details.
+.It Cm list-cloudware
+Displays the list of valid
+.Va CLOUDWARE
+values.
+.It Cm list-vmtargets
+Displays the list of valid
+.Va VMFORMAT
+and
+.Va CLOUDWARE
+values.
 .El
 .Pp
 Major subtargets called by targets above:
@@ -576,8 +644,11 @@ Typically, one only needs to set
 .It Pa /usr/src/Makefile
 .It Pa /usr/src/Makefile.inc1
 .It Pa /usr/src/release/Makefile
+.It Pa /usr/src/release/Makefile.vm
 .It Pa /usr/src/release/release.sh
 .It Pa /usr/src/release/release.conf.sample
+.It Pa /usr/src/release/tools/*.conf
+.It Pa /usr/src/release/tools/vmimage.subr
 .El
 .Sh EXAMPLES
 The following sequence of commands can be used to build a
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to