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# $FreeBSD$ 32# 33 34usage() { 35 echo "${0} usage:" 36 echo "${@}" 37 return 1 38} 39 40main() { 41 local arg 42 VMCONFIG="/dev/null" 43 while getopts "C:c:d:F:f:i:o:s:S:" arg; do 44 case "${arg}" in 45 C) 46 VMBUILDCONF="${OPTARG}" 47 ;; 48 c) 49 VMCONFIG="${OPTARG}" 50 ;; 51 d) 52 DESTDIR="${OPTARG}" 53 ;; 54 F) 55 VMFS="${OPTARG}" 56 ;; 57 f) 58 VMFORMAT="${OPTARG}" 59 ;; 60 i) 61 VMBASE="${OPTARG}" 62 ;; 63 o) 64 VMIMAGE="${OPTARG}" 65 ;; 66 s) 67 VMSIZE="${OPTARG}" 68 ;; 69 S) 70 WORLDDIR="${OPTARG}" 71 ;; 72 *) 73 ;; 74 esac 75 done 76 shift $(( ${OPTIND} - 1)) 77 78 if [ -z "${VMBASE}" -o \ 79 -z "${WORLDDIR}" -o \ 80 -z "${DESTDIR}" -o \ 81 -z "${VMSIZE}" -o \ 82 -z "${VMIMAGE}" -o \ 83 -z "${VMFS}" ]; 84 then 85 usage || exit 0 86 fi 87 88 if [ -z "${VMBUILDCONF}" ] || [ ! -e "${VMBUILDCONF}" ]; then 89 echo "Must provide the path to vmimage.subr." 90 return 1 91 fi 92 93 . "${VMBUILDCONF}" 94 95 if [ ! -z "${VMCONFIG}" ] && [ ! -c "${VMCONFIG}" ]; then 96 . "${VMCONFIG}" 97 fi 98 99 vm_create_base 100 vm_install_base 101 vm_extra_install_base 102 vm_extra_install_packages 103 vm_extra_install_ports 104 vm_extra_enable_services 105 vm_extra_pre_umount 106 vm_extra_pkg_rmcache 107 cleanup 108 vm_copy_base 109 vm_create_disk || return 0 110 vm_extra_create_disk 111 112 return 0 113} 114 115main "$@" 116