Boxen-puppetconf

 Boxen-puppetconf

As a rapidly growing company, GitHub's faced some challenges in how to make sure that everyone can get up and running on projects or continue to work on one of the dozens of existing projects if they've never set it up before. What a nightmare! That's what prompted @jbarnette and @wfarr to develop Boxen. Boxen aims to solve all the problems that used to plague on-boarding GitHubbers onto projects with a lot of automation and a case of the "It Just Works". This presentation talks about the history of Boxen, how it works, and some of the lessons learned along the way.

Cd839cc361ffa996be0cc8259f3d7555?s=128

Will Farrington

September 28, 2012
Tweet

Transcript

  1. Setup the

  2. managing an army of laptops ...with puppet

  3. hi, my name is will farrington

  4. but you might know me as @wfarr  

  5. i work at a “little-known startup” called github

  6. i have “the best job in the world” at github

  7. I work on System operations System operations internal apps the

    setup
  8. love ops? come work with us puppet, erlang, ruby, shell,

    c and all the graphs you can shake a stick at
  9. why

  10. None
  11. oh man, this new macbook pro is sweet! let me

    run a bunch of stuff by hand so I can get some work done in about 6 to 8 hours, maybe. - some folks
  12. None
  13. oh man, this new macbook pro is sweet! let me

    run a bunch of stuff by hand so I can get some work done in about 6 to 8 hours, maybe. - a bunch of crazy folks
  14. i thought we cared about stuff

  15. None
  16. testing

  17. repeatability

  18. Automation

  19. they matter for our software

  20. they matter for our servers

  21. but not for our laptops

  22. ಠ_ಠ

  23. None
  24. None
  25. None
  26. what

  27. Setup the

  28. Setup the

  29. boxen

  30. a living, breathing software project that tests and automates every

    little bit of your machine with love
  31. @jbarnette

  32. chrome, colloquy, dropbox, elasticsearch, emacs, erlang, git, homebrew, hub, iterm2,

    java, macvim, memcache, mongodb, mysql, nginx, nodejs, nvm, 1passwd, personalization, postgresql, projects, python, qt, rbenv, rdio, redis, ruby, solr, sparrow, textmate, virtualbox, viscosity, wget, xcode, xquartz, zeromq, zsh, and more daily.
  33. None
  34. in

  35. None
  36. hours of frustration getting github.com and other projects even working

    locally
  37. None
  38. reality

  39. None
  40. None
  41. None
  42. Text

  43. None
  44. None
  45. The Command Line Interface

  46. » boxen --projects * github (as in .com)

  47. github » script/bootstrap github » script/server github » open github.dev

    # SHIPPING!
  48. » boxen slumlord # welcome to boomtown

  49. » boxen --stealth # YOLO mode

  50. » boxen --profile # Spock mode

  51. None
  52. boxen is a stdlib for puppet

  53.  boxen is a stdlib for puppet

  54. class github::projects::octostatus { require redis ... }

  55. class github::projects::octostatus { ... $dir = "${github::config::srcdir}/ octostatus" ... }

  56. class github::projects::octostatus { ... git::repo { $dir: source => 'github/octostatus'

    } ... }
  57. class github::projects::octostatus { ... ruby::local { $dir: version => '1.9.3-p194',

    require => Git::Repo[$dir] } }
  58. None
  59. I like doing things my way

  60. I like doing things my way

  61. class github::people::hubot { include github::projects::all }

  62. class github::people::keavy { include gitx include onepassword include sizeup include

    sparrow include textmate }
  63. class github::people::yossef { package { 'Alfred': provider => 'appdmg', source

    => $alfred_dmg_url; } }
  64. class github::people::yossef { package { 'Mailplane': provider => 'compressed_app', source

    => 'http://somewhere/app.zip' } }
  65. class github::people::wfarr { git::config::global { 'alias.st': value => 'status'; 'alias.ci':

    value => 'commit'; } }
  66. class github::people::wfarr { file { '/Users/wfarr/.gitignore': ensure => present, content

    => '.DS_STORE' } }
  67. class github::people::wfarr { package { 'emacs': } git::repo { '/Users/wfarr/.emacs.d':

    source => 'wfarr/.emacs.d', submodules => true } }
  68. class github::people::wfarr { package { 'emacs': } git::repo { '/Users/wfarr/.emacs.d':

    source => 'wfarr/.emacs.d', submodules => true } }
  69. class github::people::wfarr { osx_defaults { 'troll protection': ensure => present,

    domain => 'com.apple.screensaver', key => 'askForPassword', value => 1, user => 'wfarr' } }
  70. lessons

  71. puppeteer supportocat

  72. people will do crazy things

  73. it is your job to fix it if it breaks

  74. no matter what it is your job to fix it

    if it breaks
  75. developers and designers are really good at breaking things

  76. people will not report “minor” problems

  77. people will barely report “major” problems

  78. None
  79. not having to report bugs makes people happy

  80. getting regular bug reports makes us happy

  81. users getting github notifications that the bug they hit and

    never even reported is already fixed
  82. None
  83. reduce potential for bugs by vendoring everything

  84. None
  85. None
  86. » du -sh /opt/boxen 4.1G /opt/boxen

  87. there’s

  88. None
  89. =(

  90. » env | grep BOXEN_ \ | wc -l 24

  91. » env | grep \ BOXEN_REDIS_PORT BOXEN_REDIS_PORT=16379

  92. » env | grep \ BOXEN_MYSQL_PORT BOXEN_MYSQL_PORT=13306

  93. None
  94. people will never remember to update regularly

  95. tell people when they should update

  96. None
  97. => Installing qt...

  98. None
  99. None
  100. => Fetching snapshot... => Installing qt...

  101. => Fetching snapshot... => Installing ruby-1.9.3...

  102. => Fetching snapshot... => Installing node-0.6.8...

  103. puppet defined types are slow

  104. start with puppet-defined types

  105. then rewrite in ruby

  106. we don't have the ability to mandate environments

  107. we don't want to mandate environments

  108. we have to provide something dramatically better than just doing

    it yourself
  109. we have to provide something dramatically EASIER than just doing

    it yourself
  110. None
  111. prim donn

  112. boxen is not a tool for administration

  113. boxen does not want to be a tool for administration

  114. boxen is a tool for people who want to get

    stuff done, sanely
  115. boxen has goals

  116. user-extensible

  117. framework

  118. stable

  119. easy to use

  120. documented to kingdom come

  121. not a maintenance nightmare

  122. zomg GIMME

  123. you don’t get it just yet =(

  124. we are working hard to open source it

  125. the goal was to OSS today

  126. but some mes things come up

  127. None
  128. None
  129. None
  130. None
  131. None
  132. None
  133. really

  134. private “early access” for “friends and family” next next week

  135. more testers == more fixes == everyone gets it sooner

  136. how much is ge ng opened up exactly?

  137. boxen-core boxen-web boxen-mac

  138. TONS of providers, types, and more to contribute BACK to

    puppet proper
  139. oh, and it runs on Puppet 3.0

  140. boxen

  141. questions

  142. None
  143. thanks

  144. speakerdeck.com/u/ wfarr/p/boxen

  145. drinkup @ Zekes 8:30pm