Hacker News new | past | comments | ask | show | jobs | submit login
Babushka. Sane deployment. (babushka.me)
67 points by speek on May 1, 2010 | hide | past | favorite | 25 comments



Thanks for submitting this, speek :)

For those that are interested in trying out babushka, here's a 30 second crash course. To install:

    bash -c "`curl -L babushka.me/up`" # If you're on a Mac
    bash -c "`wget -O - babushka.me/up`" # If you're on Ubuntu
Some good examples to start with:

    babushka rubygems # Installs, updates, or adds gem sources as required for your system
    babushka homebrew # Sets you up for sudoless `brew install`s
    babushka Cucumber.tmbundle # Clones the latest, installing / restarting TextMate as required
    babushka Chromium.app # Pulls the latest Chromium nightly to /Applications
If you want to see what will happen without making any changes, use `--dry-run`:

    babushka Transmit.app --dry-run
If you're on a Mac, you can follow along in TextMate too using `--track-blocks` — babushka points out each piece of each dep as it runs them. (This also works with `--dry-run`, so you can inspect the code a tree of deps would run.)

    mate /usr/local/babushka
    babushka 'Ruby on Rails.tmbundle' --track-blocks
Any questions, get in touch with @babushka_app on Twitter, #babushka on Freenode, or email hello@babushka.me.

Cheers — @ben_h

[edit: fixed the babushka.me/up links.]


Thanks ben_h. I did two VPS deploys with babushka just yesterday... Saved me a load of time. Keep up the good work!


bash -c "`wget -O - babushka.me/up`" # If you're on Ubuntu

Needs a closing tick before the last double quote there.

This project will no doubt save a significant amount of time. Thanks for sharing your work.


I should have copied and pasted instead of typing it out :) Thanks for the correction, fixed.


Thought I'd point out that Babushka means "grandmother" or "old lady" in Russian.

Based on your logo, you were thinking Matryoshka. http://en.wikipedia.org/wiki/Matryoshka_doll

It's also known as a "Babushka doll" (because it features a grandmother-like image) but the doll is definitely not the first thing that comes to mind when hearing "Babushka".

I have no feedback on the actual product. Looks fun, best of luck. :-)


When I hear Babushka I think of an elderly Russian woman who won't let me leave until I eat a substantial amount of food.


Yep, I was aware of that :)

I chose babushka because here in Australia at least, the nested Russian dolls are known as babushka dolls. (Also, Matryoshka is kind of already taken by the video container format http://www.matroska.org/).

And hey, I'm cool with babushka being a kindly grandmother that helps you remember things you've researched, as long as you explain them in its DSL first :)


Little known fact, babushka also means butterfly in Russian (if you put the stress on a different syllable). So if you do not like the old lady as a marketing image you can always go with a pretty butterfly.


grandma and butterfly are different words in Russian. Listen http://tts.imtranslator.net/A3Xz


yes butterfly is technically babochka, but they sound the same to the english ear.


There's no "technically" about it. That's just what the word means. It's irrelevant how similar they sound to the English ear; you might as well argue that "the" is interchangeable with "duh".

Also, contrary to the GP, there's no difference in stress, which is on the first syllable in both words. The reason they're different words is that "sh" vs. "ch" is a phonemic distinction in Russian, just as it is in English. That's why we distinguish between "sheep" and "cheep", for example, and would regard it as bizarre to conflate them.


Maybe they can go for a near-homonym pun? A nested grandmother doll with butterfly wings?


There's definitely a difference between CH and SH, even in English. The pronunciations are:

BAH - bush - ka: grandma

BAH - botch - ka: butterfly

I am currently teaching Russian to my wife, and the things she says sound the same continually surprise me :)


Hey, that's cool—pretty tempting to start using that reference retrospectively. Maybe a few canvas-animated butterflies on the website? :)

Cheers!


Also, babushka is pronounced like "Bob is good." not ba-BUSH-ka.

Matryoshka is, however, pronounced more-or-less like "ma-TROYSH-ka".

Well, so says my US-ian ear.


Some people might lean towards this instead of Puppet / Chef / cfengine because the "normal" way to use Puppet is in a client / server model, and that might seem overly complex for some projects. But Puppet can be used in a serverless way.

At it's simplest, Puppet can do what it looks like Babushka is doing, without the interactive nature of Babushka (which could be viewed as a positive or a negative). Getting more complex, rules about what gets done / installed / modified can be pulled from a central location, even without a Puppetmaster (server).

I'm not saying the Babushka author is crazy for creating this. Perhaps he had an itch that needed scratching and wanted to build this just for the pleasure of it, or felt that Puppet was overly complex for his needs. I think the work he's done is pretty slick, but there doesn't appear to be much add-on value for anyone who is already using Puppet or Chef or cfengine.

If Ben is lurking around here, I'd enjoy hearing his motivations for creating this. He might disagree with my assessment, too, and that'd be interesting to hear.


Hi, great questions.

Chef and puppet have a lot to offer. In particular, there are things that chef and puppet can do that babushka can't, like orchestrating ecosystems of multiple machines, and provisioning new hardware automatically.

Deployment is a problem that I'm very interested in, being a web developer and maintaining my own production machines, and I think babushka has a lot to offer in that area. However, I don't think of babushka as a deployment tool. I think of it as a "remember what I researched or learned the first time" tool, and part of that is deployment.

In building it, I'm aiming to build the most concise, powerful DSL I can for automating chores, and at focusing it as hard as I can towards the "no job too small" end of the scale.

My other main motivation is making babushka immediately useful and approachable, both as a user and a contributor—i.e. I want you to be running deps and seeing results within 2 minutes of discovering the app. And I want you to be able to write your own deps as easily and quickly as possible, push them to github with a single command, and have anyone else run or incorporate them into their own trees of deps equally easily. Most of that is already possible today using automatic dep sources, and the remainder I'm working on. :)

For example, Josh Bassett has been building a template for installing vim plugins: http://github.com/nullobject/babushka-deps/blob/master/vim_p... - which means you can automate the installation of your own plugins by writing a babushka dep like Josh's:

    vim_plugin "vim-cucumber" do
      source "git://github.com/tpope/vim-cucumber.git"
    end
You can run that dep with a single command, even if you've never used Josh's dep source before:

    babushka nullobject/vim-cucumber
And so on, to configure anything and everything you like. It's already doing this job, which I'm really excited about. http://twitter.com/harvinius/status/13116470017

Similar things are already working well for textmate bundles, OS X app bundles and installer packages, git repos, and so on. The idea is that babushka is purely the engine (plus enough deps for it to install itself), and it should be as fast and pleasant as possible to not only write deps like the vim-cucumber one above, but to create new templates and make new tasks I've never thought of. You can extend the DSL using the DSL. :)

So — I have a lot of time for tools like chef, and probably have a lot to learn from them too. I'm building babushka to be complementary to those tools. For example, part of larger deployments is doing specific, more focused jobs at certain points, which is something that babushka is just right for.


I've look around shortly (github page, website) and I couldn't find anything so I'm going to ask what I think is the obvious question here:

Why not Chef?

Why not Puppet?

Why not X?

Babushka looks very cool, don't get me wrong. But I'm curious about the above questions.


It's a really good question, and one I probably should answer more directly on the website and in the README.

As I wrote above, I have a lot of time for these other tools—in fact the creators of sprinkle (Marcus Crafter) and deprec (Mike Bailey) are both mates of mine here in Melbourne, Australia—and I don't want to just duplicate their work. I'm trying something different here. Deployment is definitely still important to me with babushka, but I'm trying to build a more general tool that makes it as fast and pleasant as possible to automate getting to some end goal.

And that's one of the other differences—babushka is goal-oriented, not task-oriented. Unless there's some specific incompatibility, you can install babushka on (for example) any Mac in any state with this

    bash -c "`curl -L babushka.me/up`"
And then running this

    babushka homebrew
Will get you all set up with homebrew. But what it does is achieve the end goal of having homebrew set up—which might mean doing nothing, or cloning a git repo, or possibly just doing a `git reset --hard` to drop a binary in place. It depends on the system. The upshot though, is that if you're working on some other problem and a new colleague needs homebrew, you can run one command and you're done, instead of getting sidetracked for 15 minutes.

In focusing on that, I sacrifice usability in other areas—for example, right now there's not really any such thing as an unattended run using babushka, because most complex dep trees require user input at runtime. It's still very much a hands-on process. And that's cool with me—there are already tools out there that solve those problems, and solve them well.

I'm looking at working on deployment with babushka more with @glenmaddern, @dgoodlad and some other Melbourne hackers soon. But I'm very conscious of all the existing tools out there, and I'm a strong believer in deferring to the right tool for the job whenever possible. So I'm looking to integrate with existing tools where it makes sense, and solving old problems in novel and awesome ways whenever I can. :)


I happened to choose Sprinkle for the reason that I'd choose Babushka if I knew it was in mature-ish state already. Chef is twisted, elaborate, and complex initial setup effort, with servers and clients, and books of documentation. I'd better spend the time learning shell scripting itself. Puppet/Moonshine has the type of syntax that doesn't fit me as a ruby developer. X - there is no X really. Not many options out there. Theoretically you could do everything with pure Capistrano, but that's not much different than manual shell scripting yet again. However I'm not the author of Babushka, this is just my take on your questions.


Unrelated question. How did you make syntax highlighting for bash prompt? I mean, yellow strings ('user exists' on 5:40) and orange wrong commands (enclosed string "'use").

I've found no clue in http://github.com/benhoskings/dot-files


I believe that's a feature of Fish.

http://fishshell.org/index.php


Your website is useless to people who don't have Flash.


Agree to disagree :)

The only Flash component is the embedded screencast, which is hosted at Vimeo and downloadable as an mp4: http://vimeo.com/6782671


If you had spelled it "Babooshka" like Kate Bush, there's no way I could have refused to use this tool.

I would have been "all yours".

(For those too young to know who Kate Bush is, imagine if Lady Gaga took the effort she puts into weird & eclectic outfits and made weird & eclectic twists on pop music instead)




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: