mk-vmimage.sh revision 277458
1#!/bin/sh
2#-
3# Copyright (c) 2014 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: head/release/scripts/mk-vmimage.sh 277458 2015-01-20 23:56:04Z gjb $
33#
34
35usage() {
36	echo "${0} usage:"
37	echo "${@}"
38	return 1
39}
40
41main() {
42	local arg
43	while getopts "C:c:d: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				VMFORMAT="${OPTARG}"
56				;;
57			i)
58				VMBASE="${OPTARG}"
59				;;
60			o)
61				VMIMAGE="${OPTARG}"
62				;;
63			s)
64				VMSIZE="${OPTARG}"
65				;;
66			S)
67				WORLDDIR="${OPTARG}"
68				;;
69			*)
70				;;
71		esac
72	done
73	shift $(( ${OPTIND} - 1))
74
75	if [ -z "${VMBASE}" -o \
76		-z "${WORLDDIR}" -o \
77		-z "${DESTDIR}" -o \
78		-z "${VMSIZE}" -o \
79		-z "${VMIMAGE}" -o \
80		-z "${VMCONFIG}" ];
81	then
82		usage
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}" ] && [ -e "${VMCONFIG}" ]; then
93		. "${VMCONFIG}"
94	fi
95
96	vm_create_base
97	vm_install_base
98	vm_extra_install_base
99	vm_extra_install_packages
100	vm_extra_install_ports
101	vm_extra_enable_services
102	vm_extra_pre_umount
103	vm_extra_pkg_rmcache
104	cleanup
105	vm_create_disk || return 0
106	vm_extra_create_disk
107
108	return 0
109}
110
111main "$@"
112