diff options
author | gjb <gjb@FreeBSD.org> | 2014-11-05 13:22:19 +0000 |
---|---|---|
committer | gjb <gjb@FreeBSD.org> | 2014-11-05 13:22:19 +0000 |
commit | b70ef7c982f0509a990aca256050a1d5ef721431 (patch) | |
tree | 6f87eab2bc67b1c4241bb8f9b509e3531dbbfb4f /release/amd64 | |
parent | 47dc31278a9555f9cf19e395d87a0950344ea008 (diff) | |
download | FreeBSD-src-b70ef7c982f0509a990aca256050a1d5ef721431.zip FreeBSD-src-b70ef7c982f0509a990aca256050a1d5ef721431.tar.gz |
Initial rewrite to consolidate VM image build scripts into one.
There may be some very sharp edges here while refactoring.
- Move amd64/mk-vmimage.sh -> scripts/mk-vmimage.sh.
- Remove vm-base target from Makefile.vm.
- In vm-image target, use getopts flags for argument passing.
- Create tools/vmimage.subr, containing default and prototype
for the following functions that are used to drive the build,
run in this order:
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_create_disk()
- In tools/azure.conf, override:
vm_extra_install_base()
vm_extra_pre_umount()
vm_extra_create_disk()
- In tools/openstack.conf, override:
vm_extra_install_base()
vm_extra_pre_umount()
Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'release/amd64')
-rwxr-xr-x | release/amd64/mk-openstack.sh | 153 | ||||
-rwxr-xr-x | release/amd64/mk-vmimage.sh | 197 |
2 files changed, 0 insertions, 350 deletions
diff --git a/release/amd64/mk-openstack.sh b/release/amd64/mk-openstack.sh deleted file mode 100755 index 863860b..0000000 --- a/release/amd64/mk-openstack.sh +++ /dev/null @@ -1,153 +0,0 @@ -#!/bin/sh -#- -# Copyright (c) 2014 The FreeBSD Foundation -# All rights reserved. -# -# This software was developed by Glen Barber under sponsorship -# from the FreeBSD Foundation. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# -# mk-openstack.sh: Create virtual machine disk images for Openstack -# -# $FreeBSD$ -# - -export PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin" - -usage() { - echo "Usage:" - echo -n "$(basename ${0}) vm-openstack <base image>" - echo " <source tree> <dest dir> <disk image size> <vm image name>" - exit 1 -} - -panic() { - msg="${@}" - printf "${msg}\n" - if [ ! -z "${mddev}" ]; then - mdconfig -d -u ${mddev} - fi - # Do not allow one failure case to chain through any remaining image - # builds. - exit 0 -} - -vm_create_openstack() { - # Arguments: - # vm-openstack <base image> <source tree> <dest dir> <disk image size> - # <vm image name> - - VMBASE="${1}" - WORLDDIR="${2}" - DESTDIR="${3}" - VMSIZE="${4}" - VMIMAGE="${5}" - - if [ -z "${VMBASE}" -o -z "${WORLDDIR}" -o -z "${DESTDIR}" \ - -o -z "${VMSIZE}" -o -z "${VMIMAGE}" ]; then - usage - fi - - trap "umount ${DESTDIR}/dev ${DESTDIR}" INT QUIT TRAP ABRT TERM - - i=0 - mkdir -p ${DESTDIR} - truncate -s ${VMSIZE} ${VMBASE} - mddev=$(mdconfig -f ${VMBASE}) - newfs -j /dev/${mddev} - mkdir -p ${DESTDIR} - mount /dev/${mddev} ${DESTDIR} - make -C ${WORLDDIR} DESTDIR=$(realpath ${DESTDIR}) \ - installworld installkernel distribution || \ - panic "\n\nCannot install the base system to ${DESTDIR}." - mount -t devfs devfs ${DESTDIR}/dev - chroot ${DESTDIR} /usr/bin/newaliases - echo '# Custom /etc/fstab for FreeBSD VM images' \ - > ${DESTDIR}/etc/fstab - echo '/dev/gpt/rootfs / ufs rw 2 2' \ - >> ${DESTDIR}/etc/fstab - echo '/dev/gpt/swapfs none swap sw 0 0' \ - >> ${DESTDIR}/etc/fstab - - chroot ${DESTDIR} /etc/rc.d/ldconfig forcestart - 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 - - rm -f ${DESTDIR}/etc/resolv.conf - echo 'sshd_enable="YES"' > ${DESTDIR}/etc/rc.conf - echo 'ifconfig_DEFAULT="SYNCDHCP"' >> ${DESTDIR}/etc/rc.conf - - if [ ! -z "${VM_RC_LIST}" ]; then - for _rcvar in ${VM_RC_LIST}; do - echo ${_rcvar}_enable="YES" >> ${DESTDIR}/etc/rc.conf - done - fi - - sync - - while ! umount ${DESTDIR}/dev ${DESTDIR}; do - i=$(( $i + 1 )) - if [ $i -ge 10 ]; then - # This should never happen. But, it has happened. - msg="Cannot umount(8) ${DESTDIR}\n" - msg="${msg}Something has gone horribly wrong." - panic "${msg}" - fi - sleep 1 - done - - echo "Creating image... Please wait." - - mkimg -f ${OPENSTACK_FORMAT} -s gpt \ - -b /boot/pmbr -p freebsd-boot/bootfs:=/boot/gptboot \ - -p freebsd-swap/swapfs::1G \ - -p freebsd-ufs/rootfs:=${VMBASE} \ - -o ${VMIMAGE} - - return 0 -} - -main() { - cmd="${1}" - shift 1 - - if [ -e "${OPENSTACKCONF}" -a ! -c "${OPENSTACKCONF}" ]; then - . ${OPENSTACKCONF} - fi - - case ${cmd} in - vm-openstack) - eval vm_create_openstack "$@" || return 0 - ;; - *|\?) - usage - ;; - esac - - return 0 -} - -main "$@" diff --git a/release/amd64/mk-vmimage.sh b/release/amd64/mk-vmimage.sh deleted file mode 100755 index b3ffd23..0000000 --- a/release/amd64/mk-vmimage.sh +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/sh -#- -# Copyright (c) 2014 The FreeBSD Foundation -# All rights reserved. -# -# This software was developed by Glen Barber under sponsorship -# from the FreeBSD Foundation. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# -# mk-vmimage.sh: Create virtual machine disk images in various formats. -# -# $FreeBSD$ -# - -PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin" -export PATH - -usage_vm_base() { - echo -n "$(basename ${0}) vm-base <base image> <source tree>" - echo " <dest dir> <disk image size>" - return 0 -} - -usage_vm_image() { - echo -n "$(basename ${0}) vm-image <base image> <image format>" - echo " <output image>" - return 0 -} - -usage() { - echo "Usage:" - echo "$(basename ${0}) [vm-base|vm-image] [...]" - echo - usage_vm_base - echo - usage_vm_image - exit 1 -} - -panic() { - msg="${@}" - printf "${msg}\n" - if [ ! -z "${mddev}" ]; then - mdconfig -d -u ${mddev} - fi - case ${cmd} in - vm-base) - # If the vm-base target fails, the vm-image target - # cannot possibly succeed. Touch the .TARGET file - # so it is not attempted. - touch vm-image - ;; - *) - # FALLTHROUGH - ;; - esac - # Do not allow one failure case to chain through any remaining image - # builds. - return 1 -} - -vm_create_baseimage() { - # Creates the UFS root filesystem for the virtual machine disk, - # written to the formatted disk image with mkimg(1). - # - # Arguments: - # vm-base <base image> <source tree> <dest dir> <disk image size> - - VMBASE="${1}" - WORLDDIR="${2}" - DESTDIR="${3}" - VMSIZE="${4}" - - if [ -z "${VMBASE}" -o -z "${WORLDDIR}" -o -z "${DESTDIR}" \ - -o -z "${VMSIZE}" ]; then - usage - fi - - i=0 - mkdir -p ${DESTDIR} - truncate -s ${VMSIZE} ${VMBASE} - mddev=$(mdconfig -f ${VMBASE}) - newfs -j /dev/${mddev} - mount /dev/${mddev} ${DESTDIR} - cd ${WORLDDIR} && \ - make DESTDIR=${DESTDIR} \ - installworld installkernel distribution || \ - panic "\n\nCannot install the base system to ${DESTDIR}." - chroot ${DESTDIR} /usr/bin/newaliases - echo '# Custom /etc/fstab for FreeBSD VM images' \ - > ${DESTDIR}/etc/fstab - echo '/dev/gpt/rootfs / ufs rw 2 2' \ - >> ${DESTDIR}/etc/fstab - echo '/dev/gpt/swapfs none swap sw 0 0' \ - >> ${DESTDIR}/etc/fstab - sync - while ! umount ${DESTDIR}; do - i=$(( $i + 1 )) - if [ $i -ge 10 ]; then - # This should never happen. But, it has happened. - msg="Cannot umount(8) ${DESTDIR}\n" - msg="${msg}Something has gone horribly wrong." - panic "${msg}" - fi - sleep 1 - done - - return 0 -} - -vm_create_vmdisk() { - # Creates the virtual machine disk image from the raw disk image. - # - # Arguments: - # vm-image <base image> <image format> <output image>" - - VMBASE="${1}" - FORMAT="${2}" - VMIMAGE="${3}" - - if [ -z "${VMBASE}" -o -z "${FORMAT}" -o -z "${VMIMAGE}" ]; then - usage - fi - - mkimg_version=$(mkimg --version 2>/dev/null | awk '{print $2}') - - # We need mkimg(1) '--version' output, at minimum, to be able to - # tell what virtual machine disk image formats are available. - # Bail if mkimg(1) reports an empty '--version' value. - if [ -z "${mkimg_version}" ]; then - msg="Cannot determine mkimg(1) version.\n" - msg="${msg}Cannot continue without a known mkimg(1) version." - panic "${msg}" - fi - - if ! mkimg --formats 2>/dev/null | grep -q ${FORMAT}; then - panic "'${FORMAT}' is not supported by this mkimg(1).\n" - fi - - case ${FORMAT} in - vhd) - mkimg_format=vhdf - ;; - *) - mkimg_format=${FORMAT} - ;; - esac - - mkimg -f ${mkimg_format} -s gpt \ - -b /boot/pmbr -p freebsd-boot/bootfs:=/boot/gptboot \ - -p freebsd-swap/swapfs::1G \ - -p freebsd-ufs/rootfs:=${VMBASE} \ - -o ${VMIMAGE} - - return 0 -} - -main() { - cmd="${1}" - shift 1 - - case ${cmd} in - vm-base) - eval vm_create_baseimage "$@" || return 0 - ;; - vm-image) - eval vm_create_vmdisk "$@" || return 0 - ;; - *|\?) - usage - ;; - esac - - return 0 -} - -main "$@" |