xref: /freebsd/release/scripts/mk-vmimage.sh (revision 9f23cbd6cae82fd77edfad7173432fa8dccd0a95)
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