xref: /freebsd/release/scripts/mk-vmimage.sh (revision 4ac8f4067096a9d4a00e41cd53bd5c4fa295fd15)
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: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				VMFS="${OPTARG}"
57				;;
58			f)
59				VMFORMAT="${OPTARG}"
60				;;
61			i)
62				VMBASE="${OPTARG}"
63				;;
64			o)
65				VMIMAGE="${OPTARG}"
66				;;
67			s)
68				VMSIZE="${OPTARG}"
69				;;
70			S)
71				WORLDDIR="${OPTARG}"
72				;;
73			*)
74				;;
75		esac
76	done
77	shift $(( ${OPTIND} - 1))
78
79	if [ -z "${VMBASE}" -o \
80		-z "${WORLDDIR}" -o \
81		-z "${DESTDIR}" -o \
82		-z "${VMSIZE}" -o \
83		-z "${VMIMAGE}" -o \
84		-z "${VMFS}" ];
85	then
86		usage || exit 0
87	fi
88
89	if [ -z "${VMBUILDCONF}" ] || [ ! -e "${VMBUILDCONF}" ]; then
90		echo "Must provide the path to vmimage.subr."
91		return 1
92	fi
93
94	. "${VMBUILDCONF}"
95
96	if [ ! -z "${VMCONFIG}" ] && [ ! -c "${VMCONFIG}" ]; then
97		. "${VMCONFIG}"
98	fi
99
100	vm_create_base
101	vm_install_base
102	vm_extra_install_base
103	vm_extra_install_packages
104	vm_extra_install_ports
105	vm_extra_enable_services
106	vm_extra_pre_umount
107	vm_extra_pkg_rmcache
108	cleanup
109	vm_copy_base
110	vm_create_disk || return 0
111	vm_extra_create_disk
112
113	return 0
114}
115
116main "$@"
117