To get going quickly:
vagrant up
to download and start the machine. A window with the
virtual machine's desktop should pop up. Run vagrant halt
while in that
same directory to shut the machine down.vagrant ssh
on your host computer while in the Vagrantfile
directory.That's it! See more instructions and tips below.
This is a virtual machine with all important LIGO-related software pre-installed.
I am building this because dealing with LIGO's toolkit dependencies is a hassle
and, for researchers who just need to get going with their work, a waste of
time. Doing any work at remotely is a difficult proposition (unless you are
ssh
ed into a LIGO server, which is sometimes impossible or undesirable, and
in any case requires credentials and its own special software for anything
besides SSH), and setup instructions are not uniform across OSes. My
group at Columbia University is currently using this
Virtual Machine to avoid all of these issues, but I imagine we are not the only
ones who have encountered these hurdles, so I hope that other labs might find
this useful.
There are two versions of geco-vm
: one with a GUI (graphical user
interface) and one without. The GUI version is called geco-vm-gui
; it is the
more beginner-friendly version. It is more resource intensive, however, and is
only available for desktop (not server) use. If you know what you are doing and
prefer working from the command line anyway, or if performance and resource
usage are important considerations, you should use the headless (i.e.
GUI-free), lightweight geco-vm
; otherwise, geco-vm-gui
has all the same
capabilities but comes with a familiar desktop interface and nice features like
shared clipboard (you can copy text within the virtual machine and paste it in
your host computer, and vice versa) and drag-and-drop file movement (this
feature only works for dragging files into the VM). See the Pro
Tips section below for more information applicable to both GUI and
headless version.
If you just want to use the virtual machine, you can follow these instructions to get started. These instructions should work on any system.
vagrant up
to download and boot the virtual machine.vagrant ssh
to start using the virtual machine; for the GUI
version, you can just use the virtual machine window that
pops. It should log you in automatically when the VM starts up. For
reference, the username and password are both "vagrant".That's it! Once you are ssh
ed into the guest machine, it is just like using
ssh
with any other machine. Similarly, the GUI expriece should be just like
using any Ubuntu box. While ssh
ed, you can run exit
to return to the host
machine. While not using the guest machine, you can simply run vagrant
to
get a short list of available commands for managing this VM.
vagrant destroy -f
# if you are using the headless geco-vm, write geco-vm instead of geco-vm-gui
vagrant box remove -f --all stefco/geco-vm-gui
vagrant up
It is easy to make mistakes while upgrading to the latest version of vagrant if you don't know what you're doing. This can cause you to waste hours troubleshooting a broken feature that has been fixed on the latest version of the box simply because you think you've already upgraded (when in fact you haven't). Knowing how vagrant works can help immensely in avoiding this peculiar debugging hell.
When you initialize your virtual machine with vagrant up
, vagrant does the
following:
stefco/geco-vm
saved in vagrant's
cache of vagrant boxesstefco/geco-vm-gui
or stefco/geco-vm
(depending on which you are using) if you do not have a local copy; if you
do have a local copy, even if it is outdated, vagrant will use that
onestefco/geco-vm-gui
or
stefco/geco-vm
box and stores that fresh copy of the virtual machine in the
~/Virtualbox\ VMs
directory; this copy will be the virtual machine you
useNote the following:
vagrant box update
will only update your cached box; this alone will
not have any effect on the virtual machine you are already using.vagrant destroy -f
followed by vagrant up
will just create a fresh version of the old
box; you need to make sure you also update the cached
copy of the vagrant box using vagrant box update
before you
reinitialize the virtual machine.So, to make sure you are using the latest and greatest version of stefco/geco-vm
,
you should make sure you are in your vagrant working directory on your host
machine and run:
vagrant destroy -f
# if you are using the headless geco-vm, write geco-vm instead of geco-vm-gui
vagrant box remove -f --all stefco/geco-vm-gui
vagrant up
You can check on your cached version of this (and all) vagrant boxes by running
vagrant box list
, and you can see whether you successfully deleted your
running copy of the virtual machine by running vagrant status
.
You should think of your virtual machine as disposable; ideally, you should
not store any information on it long term. Because Vagrant
automatically shares
your host computer's vagrant folder (i.e. the folder in which your Vagrantfile
is located) with the guest virtual machine under the /vagrant
directory, it
is trivially easy to keep your work saved on your host machine by keeping it
in the /vagrant
directory of the guest machine. This way, if you have to
delete your virtual machine (for example, if you are upgrading to the latest
version), you can do so without having to worry about lost work.
You can add custom scripts to your path by putting them in the /home/vagrant
directory on the host machine. You can also add those scripts to a bin
folder in the directory on your host machine where the Vagrantfile
is
located (since this directory is shared with geco-vm
through the
/vagrant
directory).
If you are using a mac with the latest build of
iTerm2 (something I highly recommend, since
iTerm2 is an excellent terminal emulator), you can use imgcat
to preview
images on your virtual machine right in your terminal during an
ssh session. This is nice for e.g. taking a quick look at a fresh plot
without leaving the command line.
This machine is built and deployed using a tool called Packer, made by the same
people who make Vagrant. Configuration information for creating a virtual
machine using Packer can be found on their
website. The important idea, though, is that Packer
uses a template file (in our case, geco-vm.json
) to specify:
provision.sh
, in our case);
this is the part where you get to customize the box with whatever you need.After installing the latest version of packer
, there is one step you will
have to take before you can build the machine for yourself. Because Atlas
requires authentication to deploy a newly build vagrant box, you must either:
ubuntu-12.04-amd64.json
template
file, orTo remove the deployment step from the template file, delete precisely these lines:
},
{
"type": "atlas",
"only": ["virtualbox-iso"],
"artifact": "stefco/geco-vm",
"artifact_type": "vagrant.box",
"metadata": {
"provider": "virtualbox",
"created_at": "{{timestamp}}"
}
To point to your newly created packer project, modify only the "artifact" line in the above code section, changing it from:
"artifact": "stefco/geco-vm",
to:
"artifact": "your_atlas_username/your_packer_project_name",
Now that that is finished, you can start running with
packer build ubuntu-12.04-amd64.json
and, after a considerable amount of time, you should have a fresh copy of the vm ready to play with.
Of course, you can modify it as you like, and if you add features that will be useful to others, I will happily incorporate those changes into the base box.
This tutorial was invaluable in getting going quickly with Packer. I also found this helpful. And, of course, Packer's own documentation is invaluable.
As far as provisioning LIGO tools, I drew inspiration from DASWG's page, from scripts written by Szabi for provisioning his own Debian box, from conversations with people at the observatories, and from the gwpy .travis.yml configuration scripts. There are also plenty of good instructions on various remote access topics on the LIGO wiki.
If you want to start with Vagrant's default "blank" Vagrantfile, you can
generate one by running vagrant init stefco/geco-vm
. This creates a
simple Vagrantfile for this box, with some helpful comments on how you can
modify the file to your liking. There are a couple of features of the
geco_vm box that are specified in the repository Vagrantfile above, so you
should probably just go ahead and use that one.
You can read Vagrant's documentation on their website for more information.
packer build
working with the Ubuntu 12.04 virtualbox machinegwpy
geco_stat