xref: /freebsd/release/scripts/mk-vmimage.sh (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
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	ROOTLABEL="gpt"
97
98	vm_create_base
99	vm_install_base
100	vm_extra_install_base
101	vm_extra_install_packages
102	vm_extra_install_ports
103	vm_extra_enable_services
104	vm_extra_pre_umount
105	vm_extra_pkg_rmcache
106	cleanup
107	vm_copy_base
108	vm_create_disk || return 0
109	vm_extra_create_disk
110
111	return 0
112}
113
114main "$@"
115