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