1#!/bin/sh 2#- 3# Copyright (c) 2014, 2015 The FreeBSD Foundation 4# 5# This software was developed by Glen Barber under sponsorship 6# from the FreeBSD Foundation. 7# 8# Redistribution and use in source and binary forms, with or without 9# modification, are permitted provided that the following conditions 10# are met: 11# 1. Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# 2. Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in the 15# documentation and/or other materials provided with the distribution. 16# 17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27# SUCH DAMAGE. 28# 29# mk-vmimage.sh: Create virtual machine disk images in various formats. 30# 31# 32 33usage() { 34 echo "${0} usage:" 35 echo "${@}" 36 return 1 37} 38 39main() { 40 local arg 41 VMCONFIG="/dev/null" 42 while getopts "C:c:d:F:f:i:o:s:S:" arg; do 43 case "${arg}" in 44 C) 45 VMBUILDCONF="${OPTARG}" 46 ;; 47 c) 48 VMCONFIG="${OPTARG}" 49 ;; 50 d) 51 DESTDIR="${OPTARG}" 52 ;; 53 F) 54 VMFS="${OPTARG}" 55 ;; 56 f) 57 VMFORMAT="${OPTARG}" 58 ;; 59 i) 60 VMBASE="${OPTARG}" 61 ;; 62 o) 63 VMIMAGE="${OPTARG}" 64 ;; 65 s) 66 VMSIZE="${OPTARG}" 67 ;; 68 S) 69 WORLDDIR="${OPTARG}" 70 ;; 71 *) 72 ;; 73 esac 74 done 75 shift $(( ${OPTIND} - 1)) 76 77 if [ -z "${VMBASE}" -o \ 78 -z "${WORLDDIR}" -o \ 79 -z "${DESTDIR}" -o \ 80 -z "${VMSIZE}" -o \ 81 -z "${VMIMAGE}" -o \ 82 -z "${VMFS}" ]; 83 then 84 usage || exit 0 85 fi 86 87 if [ -z "${VMBUILDCONF}" ] || [ ! -e "${VMBUILDCONF}" ]; then 88 echo "Must provide the path to vmimage.subr." 89 return 1 90 fi 91 92 . "${VMBUILDCONF}" 93 94 if [ ! -z "${VMCONFIG}" ] && [ ! -c "${VMCONFIG}" ]; then 95 . "${VMCONFIG}" 96 fi 97 98 vm_create_base 99 vm_install_base 100 vm_extra_install_base 101 vm_extra_install_packages 102 vm_extra_install_ports 103 vm_extra_enable_services 104 vm_extra_pre_umount 105 vm_extra_pkg_rmcache 106 cleanup 107 vm_copy_base 108 vm_create_disk || return 0 109 vm_extra_create_disk 110 111 return 0 112} 113 114main "$@" 115