Building Vagrant Boxes with VeeWee on TravisCI

by on December 5, 2012 1:21 pm

(Pro Tip: you can safely skip the first 3 paragraphs)

We’ve all been there: You push some .travis.yml commits and your clone gets parachuted into VM Land – only to find that things don’t go quite as expected. As the credits roll, you can’t help but feel a little anger towards your clone. How could it just blindly follow the script when things went wrong and not even try to improvise or troubleshoot? You wonder – how can I get a Pastrana-level of confidence before I push that clone out the door?

How can I run the Travis box locally, before I push my commits? (Let’s pretend I didn’t just spend days investigating this and then just now find a blog entry from 3 months ago which had a more polished solution for most of this topic and then I had to switch gears at the last minute and only cover an obscure corner of the topic, mmmkay? Embarrassed but undeterred, I move forward…)

We will continue by reviewing the original problem I faced that drove me to explore running a Travis box locally. You will probably never run across the problem. But hey – at least it’s unlikely that someone has already blogged about this topic!

The Goal: I wanted to build Vagrant boxes with VeeWee on TravisCI.

Q: Why run VeeWee on Travis? A: The transparency offered by Travis would allow people to trust the published binaries. The binary boxes would be published by Travis at the end of the build to the GitHub repo’s “download” section.

So, I started by proving out that I could run VirtualBox inside Travis – https://travis-ci.org/veewee-community/travis-vagrant-up/builds/3427898/#L293 (compare the before/after directory listings).

Encouraged, I continued.

I added VeeWee to the mix, and ran into this:

It kept sticking on the “Starting a webserver :7122″ line until the Travis time limit kicked in and stopped the build. Either the step was legitimately taking too long or there was some kind of error that didn’t show up in the log. What was the build trying to tell me? I needed to get inside the box’s head. But wait, the box had no head – it was headless.

Lending Travis a helping head:

I needed to run Travis locally and see what might be trying to pop up on the GUI. So, I started by upping this Vagrantfile:

(coffee break: that Vagrant box download is over 3 gig)

After studying Travis’ GUI testing documentation, I SSHed-in to my newly upped box and ran some stuff to enable a virtual X session and publish it over VNC. I also enabled a applet-based browser-view of the VNC session:

Then, I started running the commands from my .travis.yml file:

Once I ran the “veewee vbox build” command, it just sat there. I browsed to the virtual X session in my browser and watched to see what popped up. Ah, finally I was getting somewhere:

vbox-warning

I spun my wheels for a while thinking I needed to fork VeeWee and suppress the warning to continue the build process, but ran into a snag revealed by the VirtualBox code:

Translation: no “pcszAutoConfirmId” means no way to suppress! Actually, it didn’t matter that I couldn’t suppress the message because the VM really couldn’t have run anyways – here’s what happens if I actually select “continue” to proceed past that dialogue:

it_refuses

I was so dumb because when I first did the proof-of-concept for running VirtualBox in Travis, Vagrant upped a 32-bit box, and now I was trying to create a 64-bit box. Well, the Travis box is 32-bit (for now) and VirtualBox has decided not to offer nested VT. (Nested VT, afaik, would allow the 64-bit inside 32-bit scenario) Bummer.

So, I changed the VeeWee template choice to request a 32-bit box… Hoorah! After 65 minutes the Vagrant box was all built. But when I ran it in the actual Travis service instead of locally, this is what I saw:

Oh well, it timed out! But at least it got past the earlier snag and would have built given enough time. I’m not complaining though, I can completely understand the reasoning behind the time limits Travis enforces. A 65 minute build on a free Travis account type is a burden on the other people trying to build stuff.

So, that’s where I got stuck. I’m just glad I didn’t actually promise you a real solution, in which case you might have been angry at me. Thanks.

– Luke Patterson, asktheteam@keyholesoftware.com

  • Share:

Leave a Reply

Things Twitter is Talking About
  • Did you know today is Clean Your Virtual Desktop Day? It really is: https://t.co/TCRpWgTmxg Celebrate by organizing your desktop files.
    October 20, 2014 at 4:50 PM
  • Don't miss the newest post from @bricemciver: Make Me a Promise - http://t.co/obK811q48q #JavaScript
    October 20, 2014 at 10:43 AM
  • RT @DZone: #Docker 1.3 Releases with Security, Signed Images, and Process Injection by @bendzone #devops http://t.co/uytIwFPgO6
    October 17, 2014 at 10:04 AM
  • If you have 15+ years #Java exp, you don't expect to be puzzled debugging a null pointer exception. See an exception: http://t.co/m2iDgNEleK
    October 17, 2014 at 9:51 AM
  • Many on our team attended the #Royals victory last night & @cdesalvo even got a selfie with the Gov. Go #KansasCity! http://t.co/N1Psooe2CE
    October 16, 2014 at 3:39 PM
  • Interesting ExplainLikeI'm5 talk: Why do companies develop iOS first when Android holds 70% of the 'Smart' Market? http://t.co/fxgjIBmqBi
    October 16, 2014 at 12:26 PM
  • We're looking for a top-notch #Java developer to join our team. Learn more about our company culture & the role - http://t.co/0fKsFmN0Ql
    October 16, 2014 at 9:08 AM
  • Want to learn to create custom #Java annotations & process them using the Reflection API? @jhackett01's tutorials - http://t.co/mf1F3eIDY3
    October 15, 2014 at 11:43 AM
  • Happy Ada Lovelace Day! It's a celebration of the achievements of women in STEM - if there's a woman in tech that you admire, tell her today
    October 15, 2014 at 9:13 AM
  • .@fpmoles We absolutely agree - thanks for reading!
    October 15, 2014 at 8:13 AM
  • With 15 yrs exp, @bmongar didn't expect surprise when debugging a null pointer exception. Why it puzzled him - http://t.co/m2iDgNEleK #Java
    October 14, 2014 at 11:20 AM
  • #Royals fans with tickets to tonight's canceled game, here's what you need to know - http://t.co/EErHht3zoN
    October 13, 2014 at 4:23 PM
  • RT @UzilitySoftware: Watch as Wayne explains to the boss, Marvin, what an agile board is about. #scrumalliance #scrum http://t.co/5MzB1bNw…
    October 13, 2014 at 12:01 PM
  • Getting started with #MongoDB? (Flexible #NoSQL for Humongous Data) Here's a free cheat sheet from the folks @Dzone - http://t.co/oBMvICzfcL
    October 13, 2014 at 11:10 AM
  • Brad Mongar's newest post is live on the Keyhole blog - #Java and the Sweet Science http://t.co/m2iDgNEleK
    October 13, 2014 at 8:59 AM
  • RT @housecor: If users have share links to your web app like this: "Go to here. Then click here. Then here." You're doing it wrong. #de
    October 10, 2014 at 2:18 PM
  • CSS is 20 years old today! Happy birthday, #CSS - web design would not be the same without you. http://t.co/8tEMoUjorI
    October 10, 2014 at 9:55 AM
  • Expansion update: remodel, electrical & mudding done; painting in process; carpet to go. We can't wait for our bigger team rooms!
    October 10, 2014 at 8:42 AM
  • Want an easy way to get all of our development blog posts sent straight into your email? Try this new IFTTT Recipe: http://t.co/b9RgUqGU4v
    October 9, 2014 at 10:55 AM
  • #JavaScript & #Java handle secure random number generation differently. Here's how they stack up - http://t.co/QENl4kGVIs #cryptography
    October 8, 2014 at 12:27 PM
Keyhole Software
8900 State Line Road, Suite 455
Leawood, KS 66206
ph: 877-521-7769
© 2014 Keyhole Software, LLC. All rights reserved.