xref: /freebsd-src/release/scripts/mk-vmimage.sh (revision 0b1c5628c74a37e2aa2aa3769c606d3e826302f8)
11e7c1f17SGlen Barber#!/bin/sh
21e7c1f17SGlen Barber#-
304bd90c6SGlen Barber# Copyright (c) 2014, 2015 The FreeBSD Foundation
41e7c1f17SGlen Barber#
51e7c1f17SGlen Barber# This software was developed by Glen Barber under sponsorship
61e7c1f17SGlen Barber# from the FreeBSD Foundation.
71e7c1f17SGlen Barber#
81e7c1f17SGlen Barber# Redistribution and use in source and binary forms, with or without
91e7c1f17SGlen Barber# modification, are permitted provided that the following conditions
101e7c1f17SGlen Barber# are met:
111e7c1f17SGlen Barber# 1. Redistributions of source code must retain the above copyright
121e7c1f17SGlen Barber#    notice, this list of conditions and the following disclaimer.
131e7c1f17SGlen Barber# 2. Redistributions in binary form must reproduce the above copyright
141e7c1f17SGlen Barber#    notice, this list of conditions and the following disclaimer in the
151e7c1f17SGlen Barber#    documentation and/or other materials provided with the distribution.
161e7c1f17SGlen Barber#
171e7c1f17SGlen Barber# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
181e7c1f17SGlen Barber# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
191e7c1f17SGlen Barber# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
201e7c1f17SGlen Barber# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
211e7c1f17SGlen Barber# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
221e7c1f17SGlen Barber# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
231e7c1f17SGlen Barber# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
241e7c1f17SGlen Barber# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
251e7c1f17SGlen Barber# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
261e7c1f17SGlen Barber# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
271e7c1f17SGlen Barber# SUCH DAMAGE.
281e7c1f17SGlen Barber#
291e7c1f17SGlen Barber# mk-vmimage.sh: Create virtual machine disk images in various formats.
301e7c1f17SGlen Barber#
311e7c1f17SGlen Barber#
321e7c1f17SGlen Barber
33144d107fSGlen Barberusage() {
34144d107fSGlen Barber	echo "${0} usage:"
35144d107fSGlen Barber	echo "${@}"
36144d107fSGlen Barber	return 1
37144d107fSGlen Barber}
38144d107fSGlen Barber
391e7c1f17SGlen Barbermain() {
401e7c1f17SGlen Barber	local arg
41e90de534SGlen Barber	VMCONFIG="/dev/null"
4289585511SMark Johnston	while getopts "C:c:d:F:f:i:o:s:S:" arg; do
431e7c1f17SGlen Barber		case "${arg}" in
441e7c1f17SGlen Barber			C)
451e7c1f17SGlen Barber				VMBUILDCONF="${OPTARG}"
461e7c1f17SGlen Barber				;;
471e7c1f17SGlen Barber			c)
481e7c1f17SGlen Barber				VMCONFIG="${OPTARG}"
491e7c1f17SGlen Barber				;;
501e7c1f17SGlen Barber			d)
511e7c1f17SGlen Barber				DESTDIR="${OPTARG}"
521e7c1f17SGlen Barber				;;
5389585511SMark Johnston			F)
5489585511SMark Johnston				VMFS="${OPTARG}"
5589585511SMark Johnston				;;
561e7c1f17SGlen Barber			f)
571e7c1f17SGlen Barber				VMFORMAT="${OPTARG}"
581e7c1f17SGlen Barber				;;
591e7c1f17SGlen Barber			i)
6007fe767eSGlen Barber				VMBASE="${OPTARG}"
611e7c1f17SGlen Barber				;;
621e7c1f17SGlen Barber			o)
631e7c1f17SGlen Barber				VMIMAGE="${OPTARG}"
641e7c1f17SGlen Barber				;;
651e7c1f17SGlen Barber			s)
661e7c1f17SGlen Barber				VMSIZE="${OPTARG}"
671e7c1f17SGlen Barber				;;
681e7c1f17SGlen Barber			S)
691e7c1f17SGlen Barber				WORLDDIR="${OPTARG}"
701e7c1f17SGlen Barber				;;
711e7c1f17SGlen Barber			*)
721e7c1f17SGlen Barber				;;
731e7c1f17SGlen Barber		esac
741e7c1f17SGlen Barber	done
751e7c1f17SGlen Barber	shift $(( ${OPTIND} - 1))
761e7c1f17SGlen Barber
771e7c1f17SGlen Barber	if [ -z "${VMBASE}" -o \
781e7c1f17SGlen Barber		-z "${WORLDDIR}" -o \
791e7c1f17SGlen Barber		-z "${DESTDIR}" -o \
801e7c1f17SGlen Barber		-z "${VMSIZE}" -o \
8189585511SMark Johnston		-z "${VMIMAGE}" -o \
8289585511SMark Johnston		-z "${VMFS}" ];
831e7c1f17SGlen Barber	then
84e90de534SGlen Barber		usage || exit 0
851e7c1f17SGlen Barber	fi
861e7c1f17SGlen Barber
871e7c1f17SGlen Barber	if [ -z "${VMBUILDCONF}" ] || [ ! -e "${VMBUILDCONF}" ]; then
881e7c1f17SGlen Barber		echo "Must provide the path to vmimage.subr."
891e7c1f17SGlen Barber		return 1
901e7c1f17SGlen Barber	fi
911e7c1f17SGlen Barber
921e7c1f17SGlen Barber	. "${VMBUILDCONF}"
931e7c1f17SGlen Barber
94e90de534SGlen Barber	if [ ! -z "${VMCONFIG}" ] && [ ! -c "${VMCONFIG}" ]; then
951e7c1f17SGlen Barber		. "${VMCONFIG}"
961e7c1f17SGlen Barber	fi
971e7c1f17SGlen Barber
9807fe767eSGlen Barber	vm_create_base
991e7c1f17SGlen Barber	vm_install_base
100*0b1c5628SColin Percival	vm_emulation_setup
1011e7c1f17SGlen Barber	vm_extra_install_base
1021e7c1f17SGlen Barber	vm_extra_install_packages
1031e7c1f17SGlen Barber	vm_extra_install_ports
1041e7c1f17SGlen Barber	vm_extra_enable_services
1051e7c1f17SGlen Barber	vm_extra_pre_umount
1062d4ff62fSGlen Barber	vm_extra_pkg_rmcache
107*0b1c5628SColin Percival	vm_emulation_cleanup
10825c11557SColin Percival	vm_copy_base
10987f6c4acSGlen Barber	vm_create_disk || return 0
1101e7c1f17SGlen Barber	vm_extra_create_disk
1111e7c1f17SGlen Barber
1121e7c1f17SGlen Barber	return 0
1131e7c1f17SGlen Barber}
1141e7c1f17SGlen Barber
1151e7c1f17SGlen Barbermain "$@"
116