Create/edit Vagrant base box to pre-install cookbooks - ruby

My VM takes about 10 minutes to boot because of all the cookbooks it needs to install.
I'm looking for a way to edit an existing (or create a new) base box where I can have all the required cookbooks installed. So every time I boot my VM, the cookbooks will already be installed and I won't have to wait too long.
Is this possible?
If so, could someone please point me in the right direction?
I'm currently using the Lucid32 base box.

Sounds like you need to tune your base box so install everything you need in a vagrant box and export this box as your new base box:
vagrant halt; vagrant package; vagrant box add new_basebox package.box
See here for more details on packaging, esp. the last section.

In Vagrant v2, you can use the following command to package the VM
vagrant package

Related

how to add a local box file into vagrant box

I'm learning vagrant( https://www.vagrantup.com/intro/getting-started/boxes.html ) ,because I can't directly "vagrant box add hashicorp/precise64" as is written on the page, first I downloaded hashicorp/precise64, then added it. It said "box:successfully added box 'hashicorp/premise64'(v0) for virtualbox". Then I configured vagrantfile as is written on the page.But when I "vagrant up",it said"Box 'hashicorp/premise64' could not be found'. ..... Process 0%......".I've been searching a solution, but can't find.Can someone help? Thanks!
Awesome to see you trying out Vagrant as it is a very useful tool. Some background on hashicorp/precise64, this box is popular yes, but is a dated version of Ubuntu 12.04. I would recommend using ubuntu/xenial64 which is Ubuntu 16.04. To use this you will first run:
vagrant init ubuntu/xenial64
then
vagrant up
This process may take some time as it is initializing the box for the first time. Once it is up and running feel free to ssh into it:
vagrant ssh
I also recommend taking a look at their quick start guide here.

How can I programatically download the vagrant box(es) specified in my Vagrantfile?

I have some automatically generated Vagrantfiles and I am trying to script some Vagrant actions. Specifically, I want to automate the process of only downloading the boxes specified in a Vagrantfile, i.e. doing what vagrant box add does but without needing to specify the name or URL of the box as an argument.
Assuming I have a folder with a Vagrantfile in it, and a copy of the box has not yet been downloaded:
vagrant up downloads the box specified in the Vagrantfile and starts the VM. I don't want to start the VM, I only want to download the box.
vagrant box update downloads the box specified in the Vagrantfile, but it refuses to download a box if no versions of that box have been downloaded yet.
vagrant box add does not download the box specified in the Vagrantfile; it requires an argument. I'm trying to run this in an automated environment where the box names and/or URLs aren't known beforehand.
How can I automatically download the box in my Vagrantfile without doing anything else?
You could automate the 'vagrant up', which would download the box and then launch the virtualbox.
Then also automate
vagrant halt
vagrant destroy
Leaving you with the downloaded box ready for future 'vagrant up' usage.

Upgrade php to 5.6 in Vagrant provisioning

I upgraded php to 5.6 within the Vagrant box 'trusty64', and also installed SOAP client. When I next update Vagrant I'm thinking it might overwrite these changes. Would I also need to change the provisioning in the vagrantfile, and if so what should I add?
When I next update Vagrant I'm thinking it might overwrite these
changes.
No, You would not loose anything if you upgrade vagrant. Once the VMs are created, vagrant will operate those VMs and upgrading vagrant will not impact the existing VM.
Basically, it works like this:
- when you run vagrant up, vagrant clone the box (which is VM files) and add the VM to VirtualBox
- after the VM have been created, vagrant "operates" (i.e. start, stop ...) the VirtualBox VM for you
Would I also need to change the provisioning in the vagrantfile
Thats necessary to change the provisioning if you plan to create more VM of this kind, or if you will destroy and recreate this VM; in this case the provisioning will run and you would need to have it updated.
and if so what should I add?
save all the commands you have run to run the upgrade and create a shell script out of it, might be the most simple option. You can also look at more advanced tool (puppet, ansible, chef .... that would do this job)

Will "vagrant box update" destroy my current VM?

as described on the title, will vagrant box update destroy my current VM? My current vagrant VM is a little too fragile and needs some time to setup after it has been destroyed.
On each vagrant up I get a message, that a newer version of my base box is available, but I hesitate to do so, because I need the current setup of my VM for daily work.
Am I safe to update?
short answer is no vagrant box update only downloads and installs the new box it will NOT update any of your running Vagrant VMs.
You get the "new version box" message because check for updates on vagrant up is enabled by default. If you don't want to see it you can modify your Vagrant file by adding following line
config.vm.box_check_update = false
You have to explicitly destroy your machine and recreate it to use the updated box. Vagrant will NOT do that on its own.

VirtualBox Windows VM to Vagrant Base Box

I have created a Windows 8 VM in VirtualBox, and have customized settings, and installed software on it.
Now I would like to turn it into a Vagrant Base Box, so that I can share with team, and also spawn many other VMs based on my cutomized windows.
It is possible to do, I have seen Windows Base boxes in vagrantcloud. Except that there is no documentation on packaging an existing windows virtualbox VM.
Please help me with instructions, or link to instructions to create a Vagrant Base Box from my existing windows VM. creating a base box documentation does not help me, as it is for linux.
Thank you in advance SO community!
You can probably do that by using the --base argument to vagrant package.
First, locate the name of the VM on VirtualBox's GUI. Say it's called "Windows", you issue:
vagrant package --base Windows --output /path/to/windows.box
That .box file will be your base box. You can install it locally by using
vagrant box install /path/to/windows.box
Alternatively you can make it available on a server and put its URL on the config.box_url parameter in your Vagrantfile.

Resources