]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - release/scripts/mk-vmimage.sh
zfs: merge openzfs/zfs@d96e29576
[FreeBSD/FreeBSD.git] / release / scripts / mk-vmimage.sh
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
34 usage() {
35         echo "${0} usage:"
36         echo "${@}"
37         return 1
38 }
39
40 main() {
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
115 main "$@"