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_emulation_setup
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	vm_emulation_cleanup
108	vm_copy_base
109	vm_create_disk || return 0
110	vm_extra_create_disk
111
112	return 0
113}
114
115main "$@"
116