]> git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/scripts/vagrant/create_vbox.sh
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / scripts / vagrant / create_vbox.sh
1 #!/usr/bin/env bash
2
3 # create_vbox.sh
4 #
5 # Creates a virtual box with vagrant in the $PWD.
6 #
7 # This script creates a subdirectory called $PWD/<distro> and copies the Vagrantfile
8 # into that directory before running 'vagrant up'
9
10 VAGRANT_TARGET="$PWD"
11
12 DIR="$( cd "$( dirname $0 )" && pwd )"
13 SPDK_DIR="$( cd "${DIR}/../../" && pwd )"
14
15 # The command line help
16 display_help() {
17 echo
18 echo " Usage: ${0##*/} [-b nvme-backing-file] [-n <num-cpus>] [-s <ram-size>] [-x <http-proxy>] [-hvrld] <distro>"
19 echo
20 echo " distro = <centos7 | ubuntu16 | ubuntu18 | fedora26 | fedora27 | freebsd11> "
21 echo
22 echo " -b <nvme-backing-file> default: ${NVME_FILE}"
23 echo " -s <ram-size> in kb default: ${SPDK_VAGRANT_VMRAM}"
24 echo " -n <num-cpus> 1 to 4 default: ${SPDK_VAGRANT_VMCPU}"
25 echo " -x <http-proxy> default: \"${SPDK_VAGRANT_HTTP_PROXY}\""
26 echo " -p <provider> libvirt or virtualbox"
27 echo " --vhost-host-dir=<path> directory path with vhost test dependencies"
28 echo " (test VM qcow image, fio binary, ssh keys)"
29 echo " --vhost-vm-dir=<path> directory where to put vhost dependencies in VM"
30 echo " -r dry-run"
31 echo " -l use a local copy of spdk, don't try to rsync from the host."
32 echo " -d deploy a test vm by provisioning all prerequisites for spdk autotest"
33 echo " -h help"
34 echo " -v verbose"
35 echo
36 echo " Examples:"
37 echo
38 echo " $0 -x http://user:password@host:port fedora27"
39 echo " $0 -s 2048 -n 2 ubuntu16"
40 echo " $0 -rv freebsd"
41 echo " $0 fedora26 "
42 echo
43 }
44
45 # Set up vagrant proxy. Assumes git-bash on Windows
46 # https://stackoverflow.com/questions/19872591/how-to-use-vagrant-in-a-proxy-environment
47 SPDK_VAGRANT_HTTP_PROXY=""
48
49 VERBOSE=0
50 HELP=0
51 COPY_SPDK_DIR=1
52 DRY_RUN=0
53 DEPLOY_TEST_VM=0
54 SPDK_VAGRANT_DISTRO="distro"
55 SPDK_VAGRANT_VMCPU=4
56 SPDK_VAGRANT_VMRAM=4096
57 SPDK_VAGRANT_PROVIDER="virtualbox"
58 OPTIND=1
59 NVME_FILE="nvme_disk.img"
60
61 while getopts ":b:n:s:x:p:vrldh-:" opt; do
62 case "${opt}" in
63 -)
64 case "${OPTARG}" in
65 vhost-host-dir=*) VHOST_HOST_DIR="${OPTARG#*=}" ;;
66 vhost-vm-dir=*) VHOST_VM_DIR="${OPTARG#*=}" ;;
67 *) echo "Invalid argument '$OPTARG'" ;;
68 esac
69 ;;
70 x)
71 http_proxy=$OPTARG
72 https_proxy=$http_proxy
73 SPDK_VAGRANT_HTTP_PROXY="${http_proxy}"
74 ;;
75 n)
76 SPDK_VAGRANT_VMCPU=$OPTARG
77 ;;
78 s)
79 SPDK_VAGRANT_VMRAM=$OPTARG
80 ;;
81 p)
82 SPDK_VAGRANT_PROVIDER=$OPTARG
83 ;;
84 v)
85 VERBOSE=1
86 ;;
87 r)
88 DRY_RUN=1
89 ;;
90 h)
91 display_help >&2
92 exit 0
93 ;;
94 l)
95 COPY_SPDK_DIR=0
96 ;;
97 d)
98 DEPLOY_TEST_VM=1
99 ;;
100 b)
101 NVME_FILE=$OPTARG
102 ;;
103 *)
104 echo " Invalid argument: -$OPTARG" >&2
105 echo " Try: \"$0 -h\"" >&2
106 exit 1
107 ;;
108 esac
109 done
110
111 shift "$((OPTIND-1))" # Discard the options and sentinel --
112
113 SPDK_VAGRANT_DISTRO="$@"
114
115 case "$SPDK_VAGRANT_DISTRO" in
116 centos7)
117 export SPDK_VAGRANT_DISTRO
118 ;;
119 ubuntu16)
120 export SPDK_VAGRANT_DISTRO
121 ;;
122 ubuntu18)
123 export SPDK_VAGRANT_DISTRO
124 ;;
125 fedora26)
126 export SPDK_VAGRANT_DISTRO
127 ;;
128 fedora27)
129 export SPDK_VAGRANT_DISTRO
130 ;;
131 fedora28)
132 export SPDK_VAGRANT_DISTRO
133 ;;
134 freebsd11)
135 export SPDK_VAGRANT_DISTRO
136 ;;
137 *)
138 echo " Invalid argument \"${SPDK_VAGRANT_DISTRO}\""
139 echo " Try: \"$0 -h\"" >&2
140 exit 1
141 ;;
142 esac
143
144 if ! echo "$SPDK_VAGRANT_DISTRO" | grep -q fedora && [ $DEPLOY_TEST_VM -eq 1 ]; then
145 echo "Warning: Test machine deployment is only available on fedora distros. Disabling it for this build"
146 DEPLOY_TEST_VM=0
147 fi
148
149 if [ ${VERBOSE} = 1 ]; then
150 echo
151 echo DIR=${DIR}
152 echo SPDK_DIR=${SPDK_DIR}
153 echo VAGRANT_TARGET=${VAGRANT_TARGET}
154 echo HELP=$HELP
155 echo DRY_RUN=$DRY_RUN
156 echo NVME_FILE=$NVME_FILE
157 echo SPDK_VAGRANT_DISTRO=$SPDK_VAGRANT_DISTRO
158 echo SPDK_VAGRANT_VMCPU=$SPDK_VAGRANT_VMCPU
159 echo SPDK_VAGRANT_VMRAM=$SPDK_VAGRANT_VMRAM
160 echo SPDK_VAGRANT_PROVIDER=$SPDK_VAGRANT_PROVIDER
161 echo SPDK_VAGRANT_HTTP_PROXY=$SPDK_VAGRANT_HTTP_PROXY
162 echo VHOST_HOST_DIR=$VHOST_HOST_DIR
163 echo VHOST_VM_DIR=$VHOST_VM_DIR
164 echo
165 fi
166
167 export SPDK_VAGRANT_HTTP_PROXY
168 export SPDK_VAGRANT_VMCPU
169 export SPDK_VAGRANT_VMRAM
170 export SPDK_DIR
171 export COPY_SPDK_DIR
172 export DEPLOY_TEST_VM
173 export NVME_FILE
174
175 if [ -n "$SPDK_VAGRANT_PROVIDER" ]; then
176 provider="--provider=${SPDK_VAGRANT_PROVIDER}"
177 fi
178
179 if [ -n "$VHOST_HOST_DIR" ]; then
180 export VHOST_HOST_DIR
181 fi
182
183 if [ -n "$VHOST_VM_DIR" ]; then
184 export VHOST_VM_DIR
185 fi
186
187 if [ -n "$SPDK_VAGRANT_PROVIDER" ]; then
188 export SPDK_VAGRANT_PROVIDER
189 fi
190
191 if [ ${DRY_RUN} = 1 ]; then
192 echo "Environemnt Variables"
193 printenv SPDK_VAGRANT_DISTRO
194 printenv SPDK_VAGRANT_VMRAM
195 printenv SPDK_VAGRANT_VMCPU
196 printenv SPDK_VAGRANT_PROVIDER
197 printenv SPDK_VAGRANT_HTTP_PROXY
198 printenv SPDK_DIR
199 fi
200
201 if [ -d "${VAGRANT_TARGET}/${SPDK_VAGRANT_DISTRO}-${SPDK_VAGRANT_PROVIDER}" ]; then
202 echo "Error: ${VAGRANT_TARGET}/${SPDK_VAGRANT_DISTRO}-${SPDK_VAGRANT_PROVIDER} already exists!"
203 exit 1
204 fi
205
206 if [ ${DRY_RUN} != 1 ]; then
207 mkdir -vp "${VAGRANT_TARGET}/${SPDK_VAGRANT_DISTRO}-${SPDK_VAGRANT_PROVIDER}"
208 cp ${DIR}/Vagrantfile ${VAGRANT_TARGET}/${SPDK_VAGRANT_DISTRO}-${SPDK_VAGRANT_PROVIDER}
209 pushd "${VAGRANT_TARGET}/${SPDK_VAGRANT_DISTRO}-${SPDK_VAGRANT_PROVIDER}"
210 if [ ! -z "${http_proxy}" ]; then
211 export http_proxy
212 export https_proxy
213 if vagrant plugin list | grep -q vagrant-proxyconf; then
214 echo "vagrant-proxyconf already installed... skipping"
215 else
216 vagrant plugin install vagrant-proxyconf
217 fi
218 if echo "$SPDK_VAGRANT_DISTRO" | grep -q freebsd; then
219 cat >~/vagrant_pkg.conf <<EOF
220 pkg_env: {
221 http_proxy: ${http_proxy}
222 }
223 EOF
224 fi
225 fi
226 vagrant up $provider
227 echo ""
228 echo " SUCCESS!"
229 echo ""
230 echo " cd to ${SPDK_VAGRANT_DISTRO}-${SPDK_VAGRANT_PROVIDER} and type \"vagrant ssh\" to use."
231 echo " Use vagrant \"suspend\" and vagrant \"resume\" to stop and start."
232 echo " Use vagrant \"destroy\" followed by \"rm -rf ${SPDK_VAGRANT_DISTRO}\" to destroy all trace of vm."
233 echo ""
234 fi