xref: /spdk/doc/vagrant.md (revision 3f912cf0e905f0862cf767064ac23579f1fb08fb)
1de191b8fSBen Walker# Vagrant Development Environment {#vagrant}
2de191b8fSBen Walker
31e1fd9acSwawryk## Introduction {#vagrant_intro}
4de191b8fSBen Walker
5de191b8fSBen Walker[Vagrant](https://www.vagrantup.com/) provides a quick way to get a basic
6de191b8fSBen WalkerNVMe enabled virtual machine sandbox running without the need for any
7de191b8fSBen Walkerspecial hardware.
886bd269eSVitaliy MysakThe Vagrant environment for SPDK has support for a variety of Linux distributions as well as FreeBSD.
986bd269eSVitaliy MysakRun scripts/vagrant/create_vbox.sh -h to see the complete list.
1086bd269eSVitaliy MysakThis environment requires Vagrant 1.9.4 or newer and
11de191b8fSBen WalkerVirtualBox 5.1 or newer with the matching VirtualBox extension pack.
12de191b8fSBen Walker
1390c9ad7bSDaniel VerkampNote: If you are behind a corporate firewall, set `http_proxy` and `https_proxy` in
14de191b8fSBen Walkeryour environment before trying to start up the VM.  Also make sure that you
154a49d59cSDaniel Verkamphave installed the optional vagrant module `vagrant-proxyconf`:
164a49d59cSDaniel Verkamp
174a49d59cSDaniel Verkamp~~~{.sh}
184a49d59cSDaniel Verkampexport http_proxy=...
194a49d59cSDaniel Verkampexport https_proxy=...
204a49d59cSDaniel Verkampvagrant plugin install vagrant-proxyconf
214a49d59cSDaniel Verkamp~~~
22de191b8fSBen Walker
2330dfc6d5SDaniel MrzyglodIn case you want use kvm/libvirt you should also install `vagrant-libvirt`
2430dfc6d5SDaniel Mrzyglod
251e1fd9acSwawryk## VM Configuration {#vagrant_config}
26de191b8fSBen Walker
2703f2a463SVitaliy MysakTo create a configured VM with vagrant you need to run `create_vbox.sh` script.
28de191b8fSBen Walker
2986bd269eSVitaliy MysakBasically, the script will create a new sub-directory based on distribution you choose,
3003f2a463SVitaliy Mysakcopy the vagrant configuration file (a.k.a. `Vagrantfile`) to it,
3103f2a463SVitaliy Mysakand run `vagrant up` with some settings defined by the script arguments.
32de191b8fSBen Walker
3303f2a463SVitaliy MysakBy default, the VM created is configured with:
343d8a0b19SKarol Latecki
3503f2a463SVitaliy Mysak- 2 vCPUs
3603f2a463SVitaliy Mysak- 4G of RAM
3703f2a463SVitaliy Mysak- 2 NICs (1 x NAT - host access, 1 x private network)
38de191b8fSBen Walker
3903f2a463SVitaliy MysakIn order to modify some advanced settings like provisioning and rsyncing,
4003f2a463SVitaliy Mysakyou may want to change Vagrantfile source.
41de191b8fSBen Walker
4286bd269eSVitaliy MysakFor additional support, use the Vagrant help function to learn how to destroy, restart, etc.
4386bd269eSVitaliy MysakFurther below is sample output from a successful VM launch and execution of the NVMe hello
44de191b8fSBen Walkerworld example application.
45de191b8fSBen Walker
46de191b8fSBen Walker~~~{.sh}
47de191b8fSBen Walker    vagrant --help
48de191b8fSBen Walker~~~
49de191b8fSBen Walker
501e1fd9acSwawryk## Running An Example {#vagrant_example}
51de191b8fSBen Walker
5203f2a463SVitaliy MysakThe following shows sample output from starting up a Ubuntu18 VM,
5303f2a463SVitaliy Mysakcompiling SPDK on it and running the NVMe sample application `hello_world`.
5403f2a463SVitaliy MysakIf you don't see the NVMe device as seen below in both the `lspci` output as well as the
5590c9ad7bSDaniel Verkampapplication output, you likely have a VirtualBox and/or Vagrant
56de191b8fSBen Walkerversioning issue.
57de191b8fSBen Walker
58de191b8fSBen Walker~~~{.sh}
5903f2a463SVitaliy Mysakuser@dev-system:~$ cd spdk/scripts/vagrant
6003f2a463SVitaliy Mysakuser@dev-system:~/spdk/scripts/vagrant$ ./create_vbox.sh ubuntu18
6103f2a463SVitaliy Mysakmkdir: created directory '/home/user/spdk/scripts/vagrant/ubuntu18'
6203f2a463SVitaliy Mysak~/spdk/scripts/vagrant/ubuntu18 ~/spdk/scripts/vagrant
6303f2a463SVitaliy Mysakvagrant-proxyconf already installed... skipping
64de191b8fSBen WalkerBringing machine 'default' up with 'virtualbox' provider...
6503f2a463SVitaliy Mysak==> default: Box 'bento/ubuntu-18.04' could not be found. Attempting to find and install...
6603f2a463SVitaliy Mysak    default: Box Provider: virtualbox
6703f2a463SVitaliy Mysak    default: Box Version: 201803.24.0
6803f2a463SVitaliy Mysak==> default: Loading metadata for box 'bento/ubuntu-18.04'
6903f2a463SVitaliy Mysak    default: URL: https://vagrantcloud.com/bento/ubuntu-18.04
7003f2a463SVitaliy Mysak==> default: Adding box 'bento/ubuntu-18.04' (v201803.24.0) for provider: virtualbox
7103f2a463SVitaliy Mysak    default: Downloading: https://vagrantcloud.com/bento/boxes/ubuntu-18.04/versions/201803.24.0/providers/virtualbox.box
7203f2a463SVitaliy Mysak==> default: Box download is resuming from prior download progress
7303f2a463SVitaliy Mysak==> default: Successfully added box 'bento/ubuntu-18.04' (v201803.24.0) for 'virtualbox'!
7403f2a463SVitaliy Mysak==> default: Importing base box 'bento/ubuntu-18.04'...
7503f2a463SVitaliy Mysak==> default: Matching MAC address for NAT networking...
7603f2a463SVitaliy Mysak==> default: Setting the name of the VM: ubuntu18_default_1237088131451_82174
7703f2a463SVitaliy Mysak==> default: Fixed port collision for 22 => 2222. Now on port 2202.
78de191b8fSBen Walker==> default: Clearing any previously set network interfaces...
79de191b8fSBen Walker==> default: Preparing network interfaces based on configuration...
80de191b8fSBen Walker    default: Adapter 1: nat
81de191b8fSBen Walker    default: Adapter 2: hostonly
82de191b8fSBen Walker==> default: Forwarding ports...
8303f2a463SVitaliy Mysak    default: 22 (guest) => 2202 (host) (adapter 1)
84de191b8fSBen Walker==> default: Running 'pre-boot' VM customizations...
85de191b8fSBen Walker==> default: Booting VM...
86de191b8fSBen Walker==> default: Waiting for machine to boot. This may take a few minutes...
8703f2a463SVitaliy Mysak    default: SSH address: 127.0.0.1:2202
88de191b8fSBen Walker    default: SSH username: vagrant
89de191b8fSBen Walker    default: SSH auth method: private key
9003f2a463SVitaliy Mysak    default: Warning: Remote connection disconnect. Retrying...
9103f2a463SVitaliy Mysak    default: Warning: Connection reset. Retrying...
9203f2a463SVitaliy Mysak<<some output trimmed>>
9303f2a463SVitaliy Mysak    default: Warning: Connection reset. Retrying...
9403f2a463SVitaliy Mysak    default: Warning: Remote connection disconnect. Retrying...
95de191b8fSBen Walker    default:
96de191b8fSBen Walker    default: Vagrant insecure key detected. Vagrant will automatically replace
97de191b8fSBen Walker    default: this with a newly generated keypair for better security.
98de191b8fSBen Walker    default:
99de191b8fSBen Walker    default: Inserting generated public key within guest...
100de191b8fSBen Walker    default: Removing insecure key from the guest if it's present...
101de191b8fSBen Walker    default: Key inserted! Disconnecting and reconnecting using new SSH key...
102de191b8fSBen Walker==> default: Machine booted and ready!
103de191b8fSBen Walker==> default: Checking for guest additions in VM...
104de191b8fSBen Walker==> default: Configuring and enabling network interfaces...
10503f2a463SVitaliy Mysak==> default: Configuring proxy for Apt...
10603f2a463SVitaliy Mysak==> default: Configuring proxy environment variables...
10703f2a463SVitaliy Mysak==> default: Rsyncing folder: /home/user/spdk/ => /home/vagrant/spdk_repo/spdk
108de191b8fSBen Walker==> default: Mounting shared folders...
10903f2a463SVitaliy Mysak    default: /vagrant => /home/user/spdk/scripts/vagrant/ubuntu18
11003f2a463SVitaliy Mysak==> default: Running provisioner: file...
111de191b8fSBen Walker
11203f2a463SVitaliy Mysak  SUCCESS!
113de191b8fSBen Walker
11403f2a463SVitaliy Mysak  cd to ubuntu18 and type "vagrant ssh" to use.
11503f2a463SVitaliy Mysak  Use vagrant "suspend" and vagrant "resume" to stop and start.
11603f2a463SVitaliy Mysak  Use vagrant "destroy" followed by "rm -rf ubuntu18" to destroy all trace of vm.
11703f2a463SVitaliy Mysak~~~
11803f2a463SVitaliy Mysak
119*3f912cf0SMichal BergerCheck the environment.
12003f2a463SVitaliy Mysak
12103f2a463SVitaliy Mysak~~~{.sh}
12203f2a463SVitaliy Mysakuser@dev-system:~/spdk/scripts/vagrant$ cd ubuntu18
12303f2a463SVitaliy Mysakuser@dev-system:~/spdk/scripts/vagrant/ubuntu18$ vagrant ssh
12403f2a463SVitaliy MysakWelcome to Ubuntu Bionic Beaver (development branch) (GNU/Linux 4.15.0-12-generic x86_64)
12503f2a463SVitaliy Mysak<<some output trimmed>>
12603f2a463SVitaliy Mysakvagrant@vagrant:~$ lspci | grep "Non-Volatile"
127de191b8fSBen Walker00:0e.0 Non-Volatile memory controller: InnoTek Systemberatung GmbH Device 4e56
12803f2a463SVitaliy Mysakvagrant@vagrant:~$ ls
12903f2a463SVitaliy Mysakspdk_repo
13003f2a463SVitaliy Mysak~~~
131de191b8fSBen Walker
13203f2a463SVitaliy MysakCompiling SPDK and running an example.
13303f2a463SVitaliy Mysak
13403f2a463SVitaliy Mysak~~~{.sh}
13503f2a463SVitaliy Mysakvagrant@vagrant:~/spdk_repo/spdk$ sudo apt update
13603f2a463SVitaliy Mysak<<output trimmed>>
13786bd269eSVitaliy Mysakvagrant@vagrant:~/spdk_repo/spdk$ sudo scripts/pkgdep.sh
13803f2a463SVitaliy Mysak<<output trimmed>>
13903f2a463SVitaliy Mysak
14003f2a463SVitaliy Mysakvagrant@vagrant:~/spdk_repo/spdk$ ./configure
14185bc2bbeSPawel WodkowskiCreating mk/config.mk...done.
14203f2a463SVitaliy MysakType 'make' to build.
14303f2a463SVitaliy Mysak
14403f2a463SVitaliy Mysakvagrant@vagrant:~/spdk_repo/spdk$ make
14503f2a463SVitaliy Mysak<<output trimmed>>
14603f2a463SVitaliy Mysak
14703f2a463SVitaliy Mysakvagrant@vagrant:~/spdk_repo/spdk$ sudo ./scripts/setup.sh
14803f2a463SVitaliy Mysak0000:00:0e.0 (80ee 4e56): nvme -> uio_pci_generic
14903f2a463SVitaliy Mysak
15085bdd43bSBen Walkervagrant@vagrant:~/spdk_repo/spdk$ sudo build/examples/hello_world
15103f2a463SVitaliy MysakStarting SPDK v18.10-pre / DPDK 18.05.0 initialization...
15203f2a463SVitaliy Mysak[ DPDK EAL parameters: hello_world -c 0x1 --legacy-mem --file-prefix=spdk0 --base-virtaddr=0x200000000000 --proc-type=auto ]
15303f2a463SVitaliy MysakEAL: Detected 4 lcore(s)
15403f2a463SVitaliy MysakEAL: Detected 1 NUMA nodes
15503f2a463SVitaliy MysakEAL: Auto-detected process type: PRIMARY
15603f2a463SVitaliy MysakEAL: Multi-process socket /var/run/dpdk/spdk0/mp_socket
157de191b8fSBen WalkerEAL: Probing VFIO support...
158de191b8fSBen WalkerInitializing NVMe Controllers
159de191b8fSBen WalkerEAL: PCI device 0000:00:0e.0 on NUMA socket 0
160de191b8fSBen WalkerEAL:   probe driver: 80ee:4e56 spdk_nvme
161de191b8fSBen WalkerAttaching to 0000:00:0e.0
162de191b8fSBen WalkerAttached to 0000:00:0e.0
163de191b8fSBen WalkerUsing controller ORCL-VBOX-NVME-VER12 (VB1234-56789        ) with 1 namespaces.
164de191b8fSBen Walker  Namespace ID: 1 size: 1GB
165de191b8fSBen WalkerInitialization complete.
16603f2a463SVitaliy MysakINFO: using host memory buffer for IO
167de191b8fSBen WalkerHello world!
168de191b8fSBen Walker~~~
169