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