What we install in Virtualbox using Vagrant? - vagrant

I just started learning Vagrant and succeeded in using it. I went through this vagrantbox.es where we "download" the "templates".
I have some doubts and would be great if anyone can explain me:
1) Vagrant --> My understanding is t hat it helps in automating installing the Virtual machines in Virtualization software like Virtualbox. Is this correct?
2) Now, as per the instructions that I followed in one of the video tutorials, we need to 'download' the VM, from this link.
My doubt is what are we downloading from the link in point #2? Using Vagrant, are we downloading a VM (and which gets installed into Virtualbox, for example?). Can't we use any .iso image and let vagrant install it? I am bit confused here.
Can anyone who has used vagrant explain what exactly are we downloading?

2) Now, as per the instructions that I followed in one of the video tutorials, we need to 'download' the VM, from this link.
Must be a bit dated tutorials, even though it is still a good reference, nowadays people will download boxes from https://atlas.hashicorp.com/boxes/search. The platform is officially supported by hashicorp but everyone can upload boxes into the platform, and you can directly reference boxes from atlas such as ubuntu/trusty64 in your vagrantfile and vagrant will know how to download the box and install it for you so it saves you some steps.
My doubt is what are we downloading from the link in point #2? Using Vagrant, are we downloading a VM (and which gets installed into Virtualbox, for example?). Can't we use any .iso image and let vagrant install it? I am bit confused here.
There are some 'official' box supported by hashicorp. Some organization like laravel pushes their own official boxes (like laravel/homestead and they support virtual box and vmware provider). It will be up to you to review the box you reference and make sure about its source.
you can create your own box from the OS iso using tool such as packer you will find plenty of available packer templates on github to create boxes for different OS flavors
And finally, are these images "full" OS plus the tools (e.g. tomcat, php as you described)
This will depend - in the case of Laravel they would provide a box with OS + the stack but generally the boxes are minimal (and you want to keep it this way). You will provision this using a tool of your choice (shell, ansible, puppet ...)

Related

Does "Vagrant package" command work in vmware fusion?

I have VMWARE fusion on my macbook pro. In that I have a VM ,which was generated using vagrant. This VM has some changes and I want to create a .box file of out this VM.
I did see the post for the same in this forum. But did not find correct one.
I tried vagrant package but it is not working. I got the following error
The "package" command is not supported with VMware. We recommend
taking a look at Packer (www.packer.io) as an option for creating
VMware images
Can anyone throw some light on the same?
vagrant package currently works only for virtualbox VM as said from doc
This packages a currently running VirtualBox environment into a re-usable box. This command can only be used with other providers based on the provider implementation and if the provider supports it. A future version of Vagrant will address packaging boxes for other providers. Until then, they must be made by hand.

What vagrant really is

I'm puzzled by vagrant because I can't understand what it really is.
As we all know, if we want to run another system in our current system, we must install virtualbox and the mirror of that system such as CentOS.
When I installed vagrant it required virtualbox, so it can't be another virtualbox.
I thought it may be a system management just like bower but the vagrant box homestead which contains mysql, nginx, redis, php and memcache is just over 600M which is less than the smallest Linux system..
So I'm very confused. Could you tell me what the vagrant really is?
From the Vagrant website:
Vagrant is a tool for building complete development environments. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases development/production parity, and makes the "works on my machine" excuse a relic of the past.
Basically Vagrant allows you to easily set up a virtual development environment. Everybody can build and configure pre-packaged environments called boxes and publish them for others to use. One of those boxes being homestead.
Here's an article that explains it more in-depth: What is Vagrant and Why should I care?
From the Vagrant website
Create and configure lightweight, reproducible, and portable development environments.
Instead of just installing your software requirements, Vagrant installs a whole development environment with similar hardware and software setup. So you never have to bother with your software not working on some other hardware during development.

Vagrant: dealing with requirements for a particular version of Ruby etc?

I am installing a Vagrant machine from a client.
It says that it needs a particular version of Vagrant, Virtualbox, and Ruby, all of which are different from the particular versions of Vagrant, Virtualbox and Ruby required to run another vagrant machine from another client.
What can I do about this?
I would like to be able to run both VMs on my machine, but it's going to be very difficult if I have to install different versions of Vagrant/Virtualbox/Ruby each time I want to spin the VM up.
Best Option: Work with your clients to make each Vagrant project compatible with the latest versions of each tool. For Vagrant at least, I don't know of too many compatibility issues from version to version, as long as the Vagrantfile is written to be somewhat "future proof". The key to Vagrant is the controlled version environment inside the virtual machine. That's the key benefit which lets these environments be shared among developers and on different platforms.
Alternative: Different Ruby versions is pretty easy with RVM. Different Vagrant/Virtualbox versions would be much trickier, but you might be able to install multiple versions and then wrap everything with some scripts. Vagrant under the hood calls the Virtualbox command-line utilities like VBoxManage, so it would just need to know where those are.

Vagrant on Windows and access to shared folders

I'm working with Vagrant to leverage development environments for my developer teams. Their host OS is Windows, the Vagrant development box is Ubuntu. But most important, our boxes will be stored on our NAS, in folder shared with samba.
My own PC runs Fedora, and my Vagrant file contains this code:
config.vm.box_url = "smb://<nas>/boxes/ubuntu-1404-64.box"
From Fedora, this works. From Windows, this doesn't with the following error:
protocol smb not supported or disabled in libcurl
I've tried on Windows with file://, but this logically doesn't work. So, here I am, looking for a good solution. I know a possible workaround is to mount the network share on each Windows PC, but I don't like this solution.
Any idea? Thanks.
I'm not sure what's the status now, but in the past you could've done it by using file:////server/path/file, not sure if its still possible.
P.S #1
box_url setting can be an array of possible URLs. So try just putting all possible combination for every OS there to create multiplatform Vagrantfile.
P.S #2
We solved this by hosting the box over local httpd and not using NFS/SMB.

Symfony2 +Vagrant performance - running slow - speeding up?

I have started using vagrant with Symfony2.* to develop Web projects. I am using Windows, performance is very slow, because nfs mount isn't supported.
I've put cache into memory, which gave exotic boost, disabled xdebug (as posted here). However page still loads in more than 14 seconds in dev enviroment on windows machines. Any help would be appreciated.
Symfony >=2.3, PHP >= 5.4, Windows 7, Dell Precission m6700 quad-core i7/16GB/SSD
I've had the same performance problems, although with developing Drupal sites (also PHP based). Lately I've had quite some success by using the new rsync folder feature, which was introduced in Vagrant 1.5.
If you're working with a large number of files (10.000 - 100.000), I experienced that the built-in rsync-auto feature had a hard time keeping up. Switching to this neat little plugin saved my day. Just as the vagrant rsync folder feature, the gatling rsync plugin also only provides a one way sync (host -> guest). Since a lot of Drupal tools and compass generate files on guest, this plugin will help to sync the changes from guest to host.
If you're looking for a comparison: here you can find a recent benchmark blog post on rsync vs NFS.
Under Windows you absolutely need to use NFS OR RSYNC for sharing
folder with Vagrant.
RSYNC is an good solution when automatic mode is activated but it's
not bidirectional.
Try this config.yaml (make with PuPHPet): https://github.com/comexpertise/PuPHPet-config-lamp-webdev
Optimized for Windows: use NFS shares OR RSYNC.
Very speed but not free: Swith VirtualBox to VMWare with the Vagrant VMWare plugin (and use NFS or RSYNC sharing types).
Another solution (best performances): need to disable Vagrant sharing folders for use local file system of VM, and configure your favorite IDE/FTP for use SFTP and simply upload modified files (Netbeans can automatically upload new created/modified files)
Edit: Read my comment #2 before about newest versions of Vagrant. You need more speed? Try VMware + Vagrant VMware plugin, it's the best (y)
there is a great plugin enabling NFS on windows for Vagrant: vagrant-winnfsd
$ vagrant plugin install vagrant-winnfsd
https://github.com/GM-Alex/vagrant-winnfsd

Resources