SlideShare a Scribd company logo
Packaging is the Worst Way 
to Distribute Software, 
except for everything else 
Ryan McKern | Puppet Labs 
mckern@puppetlabs.com
Who is this?
What do I do now? 
Release Engineering at
Maybe you've used 
our products?
What have I done? 
System Administration 
… for 13 years.
I’ve probably been 
your customer
Caveat Audiens
"Prejudice is a great time saver. You 
can form opinions without having 
to get the facts." 
Attributed to E.B. White, 
Source unknown
Let's talk about software!
Distributing software sucks 
Shipping new platforms is so hard 
Cross-platform packaging is so hard 
Unpredictable user-space is so hard 
Moving the packaged bits is so hard
Everything is so hard
Who among us knows this pain? 
sad@roberto Downloads $ wget -­‐-­‐quiet http:// 
ftpmirror.gnu.org/gcc/gcc-­‐4.9.1/gcc-­‐4.9.1.tar.bz2 
sad@roberto Downloads $ tar xjf gcc-­‐4.9.1.tar.bz2 
sad@roberto Downloads $ cd gcc-­‐4.9.1/ 
sad@roberto Downloads $ ./configure 
./configure: line 532: sed: command not found 
./configure: line 1371: sed: command not found 
./configure: line 1920: sed: command not found 
./configure: line 2291: sed: command not found 
configure: error: cannot run /bin/sh ./config.sub 
./configure: line 361: sed: command not found 
./configure: line 310: sort: command not found
This was a problem because 
the customer's time has value
Behold! 
ryan@animatronio ~ $ sudo rpm -­‐Uvh http://my.mirror.co/pub/ 
el/7/x86_64/nano-­‐2.3.1-­‐10.el7.x86_64.rpm 
Retrieving http://my.mirror.co/pub/el/7/x86_64/ 
nano-­‐2.3.1-­‐10.el7.x86_64.rpm 
Preparing... 
################################# [100%] 
Updating / installing... 
1:nano-­‐2.3.1-­‐10.el7 
################################# [100%] 
ryan@animatronio ~ $
What's so great 
about packages?
Dependency management 
calculon ~ # apt-­‐get install cmake 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
The following extra packages will be installed: 
cmake-­‐data emacsen-­‐common libarchive12 libnettle4 
libxmlrpc-­‐core-­‐c3 
The following NEW packages will be installed: 
cmake cmake-­‐data emacsen-­‐common libarchive12 libnettle4 
libxmlrpc-­‐core-­‐c3 
0 upgraded, 6 newly installed, 0 to remove and 51 not 
upgraded.
Verification 
bender ~ # mv /usr/share/man/man8/applydeltarpm.8.gz ~/ 
bender ~ # rpm -­‐V deltarpm 
missing d /usr/share/man/man8/applydeltarpm.8.gz 
bender ~ #
Distribution 
ryan@tinnytim ~ $ gem push erniebert-­‐0.1.0.gem 
Pushing gem to BetterThanRubyGems.org... 
Successfully registered gem: erniebert (0.1.0) 
ryan@tinnytim ~ $ gem install erniebert 
Fetching: ffi-­‐1.9.6.gem (100%) 
Building native extensions. This could take a while... 
Successfully installed ffi-­‐1.9.6 
Fetching: erniebert-­‐0.1.0.gem (100%) 
Successfully installed erniebert-­‐0.7.1 
1 gem installed 
ryan@tinnytim ~ $
What could be better 
about packages?
Sometimes shipping bits 
really is hard
Security is often both the joke 
and the punchline 
ouch@killbot ~ $ dpkg-­‐sig -­‐-­‐verify  
puppet_3.7.1-­‐1puppetlabs1_all.deb 
Processing ./puppet_3.7.1-­‐1puppetlabs1_all.deb... 
GOODSIG _gpgbuilder C093A3A56A6E0BEEA2821DD7133957EA11028DF3 1413702159 
ouch@killbot ~ $ dpkg-­‐sig -­‐-­‐verify  
./puppet_2.7.23-­‐1~deb7u3_all.deb 
Processing ./puppet_2.7.23-­‐1~deb7u3_all.deb... 
ouch@killbot ~ $
So, so, so many similar-but-different 
formats
Let's talk about some popular 
packaging formats
.rpm 
• Managed by the recursively named 
"RPM Package Manager" & yum 
• cpio compressed binaries & text files 
• Post-installation tasks are shell scripts
.deb 
• Managed by dpkg & apt, the 
"Advanced Package Tool" 
• ar compressed package with two 
gzipped tarballs & a small text file 
• Post-installation tasks are shell scripts
Mac .pkg 
• Used by Mac OS X, and often delivered 
in a .dmg (disk image) or a .zip file 
• xar compressed archive, containing a 
binary file, two archives, and an XML 
document 
• post-installation tasks are still 
shell scripts
About all those post-install 
shell scripts 
Maybe they're not that safe, but the 
surface area of this problem is big. 
That doesn't mean we needed "dash"
Ruby .gem, Python .egg, 
and Node .npm 
• These are library managers with 
delusions of grandeur 
• Reuses the "download, decompress, 
configure, build, install" patterns, 
which hasn't got much spam in it 
• Constant compilation is a bummer
What about... ? 
#realtalk 
We only have 45 minutes, and I hope 
you're going to have some questions for 
me to evade
What are some alternatives?
Source tarballs
curl | bash
Full Disclosure 
• Puppet Labs does use the curl|bash 
technique as an option for our PE 
agent installation 
• If you don't trust your own Puppet 
Master, who do you trust? 
• (ALL THE COOL KIDS WERE DOING IT)
You just wanted Ruby 
but you got Cthulhu 
~ $ curl -­‐sSL https://get.rvm.io | bash -­‐s -­‐-­‐ -­‐-­‐fhtagn 
G̺̞ 
̯͔̮̫̥ 
͊̌͂ 
a͍͕͓̦͈̯̟̋ 
r̘̰̟e̓̓ 
̦ C̋͋ͬt̂̅̓ 
t͇̻̩̲̬ ͇̪̹͔̾ 
̟ḧ́΅ͭ ̩̿ͭ 
͖̙̤ 
ͭl̅ͦ̓ 
̝̙̭ 
̗ ṷ 
ů̥͖ 
͍͎͍ 
̦̟ n̠̣̭ 
̞̻̱̳ 
̬ 
̣̗ 
̑ ̖͎ͩ 
hͯ ͐ 
̝̤̊ 
̞̭̳͚̞ 
̘ s 
̓ 
͔̣ 
̺̝͇ 
l̃ͪ͐̎̍ 
a̅͋̏̀ 
̜̯͉ 
͈͇̲ 
̓̑ 
̭̻l̂ͬ̽ ͮ 
̙͇̼͍ 
r̭̂̋ͦ 
̻̺̭ 
̗͙̃ 
̻̤̳ 
̰̤ 
i̅̿̌ͫͣͪ 
̺̙̽_̻͚ 
̤ s 
̮͇ 
e͍̞̚ ̿̌ͮ̍ 
̝͕̳́̽ 
̩̺ͅ 
͉ r 
f͈̱͓͓ 
̦̰̬̗ 
̗̝̼ 
m̞̗͎͍̾̈͊ 
o͈̩ͪ̈ 
̟̤̻͉ 
̃ͨͬ́̉ͩ̓ 
̰̝e͍͎h 
'̼̬̤̋̉̽lͪ ͣ 
̗̼ͥ̉R 
̱͚̏ 
̫͙͓̰͔ 
̃̂̂ 
͕͓̲ y 
.̚ 
̣̫ 
̞͓͈ 
̼̪̠s͔̹̞̟t͈̘͕ 
H͎̯ ̙̱a͍̟͍ͅ 
̘̼ 
u͙͓̙̟r̥̹̫͇͎ 
͚ 
̻ͅ 
̣ 
̙̹ ͍̮ t 
̻̳̮ h 
̩̜̣_ 
e̠_̱̣͔ 
̼ 
̺͉U 
s͈̰̣̥ p̻ 
a͕̗̣̺ k 
͇e̤͍̯ 
̻̹͓̬ 
̹̤̳a̠͍̪ b̩_ 
̪_̥͖͎͍ 
e̪̻̣̣ ̙̼ ͈̬s͇̮̞ 
ḻ͇ 
̥͖̠ 
̹̩̖ 
̙̲ 
a̺͈̹̤͈͉ͅ 
̣̮͕̙ 
̗ h 
̠̟ 
̰̜̜l̬̹̭ 
l̺̞ ̩̳̮̩̰͕ͅ 
̻r̮̥̦͍͍ 
͈̫ 
e̳̠̙̘ 
̱ 
u̠͇r̮̣͓ 
̘̬̰ 
t͔͚̳̹̰ 
̰͖ 
n̗͍ 
̥͕ 
̥͉f̜͚r̯͍ͅ 
o͈̯̦ 
̖ 
̳͓̦͔ 
¯ͭ̔ 
̻͙̫̪̪̖͈ 
͔̬ 
̣̌ 
̠̟̱̒ 
͍m̻̟ 
̭ ̼̠ ͍̣t͖h͔͉̞ 
e̬̫̦ 
̋͂ 
̖͇̼ ̊ͤ̓̋̄̐͌̾ 
̩̝̮ 
͓ 
d̰̼̞̤͕ 
̤̘̣̭͍̖ 
̻͈ 
̟̭ 
͡l̴l h͞ow l͢ f̕o 
́̃̍̆̂̇̒ͫ 
k̲͖̻̻̆͋ͬ̑ 
̩͍̭̙ 
̥ 
k̙̣͕͔ 
̘̮̤̻̜̳ 
r̯̰̱̬̭ͅ 
ḁ͙ 
͔͔̺ 
̠ 
̗ 
s̻̱͎ 
̙̦̝̗͍͎ 
̞̪t̫͉̟̻ 
͖ 
ạ̫ 
r͔̺ 
͍.͔̖͚̺̹ 
̰̫ 
Ǹ`ya͠rĺath̢ote͡p̢ ͟s̀`h 
̨ a 
̷reve̢r̀` 
͑̎ 
ň̽̌ 
ḯ΅ 
̣ 
̃̄̇ͪ̂͑ 
͉͔̙̤̪̜ h 
̉ͦ 
͕t͂̔ 
ͨ͋̅̿ 
͔̆ͫ̓ͫ 
̫͖̻ e 
ͫ͌͛ ͦ͆ͭ̽ 
̊ͩͩ̇ͣ 
̗ͅd̂ 
ā̇ͤ͋ͭͨ 
̗̰ 
͙̗̝͕̩̥ 
̟͍ ř 
nͮͯ̑̿͒ 
e̍͒̅̄ͣ̀ 
ͅͅ 
̪̠̗͕̥ 
͋̋ 
͙̹͎̺̠ 
s̊̈̽̊̌ 
s̈̌ͪ 
̱̳ 
.̄̑̎ 
͔̙̣ 
̤̰̟̦̥ 
͉̉ 
͙̬
curl | bash often assumes 
• There is no air-gap 
• Every request is a safe & sane request 
• That HTTPS is good enough
curl | bash often forgets 
• >100% Broadband coverage 
• Mirrors exist 
• HTTPS secures transport, not content
curl | bash totally ignores 
• The benefits of reusability 
• The fragility of shell scripts 
• The fragility of shells
Security is hard 
• RVM recently introduced hand-rolled 
GPG signing* 
• Thread had 48 comments within a 
week, almost universally about the 
implementation 
• Broke semver, automation, and hearts 
* https://github.com/wayneeseguin/rvm/issues/3105
Omnibus
Isn't that from Chef? 
• Sure, but so is Test Kitchen 
• Builds packages while still controlling 
the entire dependency stack 
• Lots of love from users with 
complicated dependency stacks
Omnibus is one way to skin 
the entire cat 
• Abstracts (instead of removes) 
dependency management 
• Only builds packages for the platform 
it's installed on 
• You're going to want to know Ruby
FPM
Effing Package Managers 
•General purpose swiss-army knife of 
package building 
•Works around a lot of the shortcomings 
of existing package managers 
•Jordan Sissel is a SAINT (Shout out to 
#hugops!)
"Common packaging patterns, a 
distaste for existing packaging 
practices, and some hate-driven 
development yielded FPM! Add 
some amazing contributions in 
code, bugs, features, and support 
from the community and boom we 
have modern FPM." 
Jordan Sissel 
My inbox, Oct 10 2014
Effing FPM 
• Swiss army knives are rarely the best 
tool for a given job 
• General purpose in this case means a 
lot (~150ish) of command line flags 
• Still infinitely better than curl | bash
Why so many alternatives? 
What went wrong?
RPM Packaging can 
be tough 
• RPM Spec files are weird 
• Kind-of M4, kind of Shell, all obtuse 
• Oh, and kind-of Make; only kind-of 
• Sort-of competing RPM standards
Deb Packaging can feels 
like penance 
• "debian/" directories are outright 
hostile to man & beast alike 
• Debian "Helpers" usually don't 
• dpatch can use unified diffs (sane) or 
shell scripts (what?!)
Conflation of purpose 
• Some library managers try to install 
executables, e.g. gem, pip, npm 
• Remember when I said "delusions of 
grandeur"? 
(Google Image Search was kind of 
useless here)
But really, I just have a 
hypothesis! 
• Developers love solving new problems 
• Sometimes they confuse their 
problems for the customer's problems 
• Maybe packaging isn't a solved 
problem yet, but it's close
Where do we go from here?
Sometimes the only choices you have 
are bad ones; but you still have 
to choose.
TL;DR: this problem is 
(mostly) solved 
Stop writing new installers 
from scratch 
Give your customers the best 
packages possible 
Don't forget Pareto 
(any number of 80/20 rules)
Thank you 
You're wonderful. Thank you for letting 
me rant at you for as long as you did. 
mckern@puppetlabs.com 
@the_mckern
Questions?

More Related Content

What's hot

PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
Pablo Godel
 
Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) -
Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) - Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) -
Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) -
Puppet
 
CPANci: Continuous Integration for CPAN
CPANci: Continuous Integration for CPANCPANci: Continuous Integration for CPAN
CPANci: Continuous Integration for CPAN
Mike Friedman
 
21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci
Mike Friedman
 
Logstash and friends
Logstash and friendsLogstash and friends
Logstash and friends
Julien Pivotto
 
Midwest php 2013 deploying php on paas- why & how
Midwest php 2013   deploying php on paas- why & howMidwest php 2013   deploying php on paas- why & how
Midwest php 2013 deploying php on paas- why & howdotCloud
 
Re-thinking Performance tuning with HTTP2
Re-thinking Performance tuning with HTTP2Re-thinking Performance tuning with HTTP2
Re-thinking Performance tuning with HTTP2
Vinci Rufus
 
Invoke-Obfuscation nullcon 2017
Invoke-Obfuscation nullcon 2017Invoke-Obfuscation nullcon 2017
Invoke-Obfuscation nullcon 2017
Daniel Bohannon
 
Design Reviewing The Web
Design Reviewing The WebDesign Reviewing The Web
Design Reviewing The Web
amiable_indian
 
Just curl it!
Just curl it!Just curl it!
Just curl it!
Daniel Stenberg
 
Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Rob Fuller
 
Phreebird Suite 1.0: Introducing the Domain Key Infrastructure
Phreebird Suite 1.0:  Introducing the Domain Key InfrastructurePhreebird Suite 1.0:  Introducing the Domain Key Infrastructure
Phreebird Suite 1.0: Introducing the Domain Key Infrastructure
Dan Kaminsky
 
Hacking on WildFly 9
Hacking on WildFly 9Hacking on WildFly 9
Hacking on WildFly 9
JBUG London
 
HowTo DR
HowTo DRHowTo DR
HTTP/3
HTTP/3HTTP/3
Obfuscating The Empire
Obfuscating The EmpireObfuscating The Empire
Obfuscating The Empire
Ryan Cobb
 
Giving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSGiving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOS
Madhava Jay
 
Pwning with powershell
Pwning with powershellPwning with powershell
Pwning with powershell
jaredhaight
 
First adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteFirst adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram Institute
Andrea Telatin
 

What's hot (20)

PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
 
Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) -
Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) - Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) -
Puppet Camp Atlanta 2014: DEV Toolsets for Ops (Beginner) -
 
Migrating big data
Migrating big dataMigrating big data
Migrating big data
 
CPANci: Continuous Integration for CPAN
CPANci: Continuous Integration for CPANCPANci: Continuous Integration for CPAN
CPANci: Continuous Integration for CPAN
 
21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci21st Century CPAN Testing: CPANci
21st Century CPAN Testing: CPANci
 
Logstash and friends
Logstash and friendsLogstash and friends
Logstash and friends
 
Midwest php 2013 deploying php on paas- why & how
Midwest php 2013   deploying php on paas- why & howMidwest php 2013   deploying php on paas- why & how
Midwest php 2013 deploying php on paas- why & how
 
Re-thinking Performance tuning with HTTP2
Re-thinking Performance tuning with HTTP2Re-thinking Performance tuning with HTTP2
Re-thinking Performance tuning with HTTP2
 
Invoke-Obfuscation nullcon 2017
Invoke-Obfuscation nullcon 2017Invoke-Obfuscation nullcon 2017
Invoke-Obfuscation nullcon 2017
 
Design Reviewing The Web
Design Reviewing The WebDesign Reviewing The Web
Design Reviewing The Web
 
Just curl it!
Just curl it!Just curl it!
Just curl it!
 
Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2Dirty Little Secrets They Didn't Teach You In Pentest Class v2
Dirty Little Secrets They Didn't Teach You In Pentest Class v2
 
Phreebird Suite 1.0: Introducing the Domain Key Infrastructure
Phreebird Suite 1.0:  Introducing the Domain Key InfrastructurePhreebird Suite 1.0:  Introducing the Domain Key Infrastructure
Phreebird Suite 1.0: Introducing the Domain Key Infrastructure
 
Hacking on WildFly 9
Hacking on WildFly 9Hacking on WildFly 9
Hacking on WildFly 9
 
HowTo DR
HowTo DRHowTo DR
HowTo DR
 
HTTP/3
HTTP/3HTTP/3
HTTP/3
 
Obfuscating The Empire
Obfuscating The EmpireObfuscating The Empire
Obfuscating The Empire
 
Giving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOSGiving back with GitHub - Putting the Open Source back in iOS
Giving back with GitHub - Putting the Open Source back in iOS
 
Pwning with powershell
Pwning with powershellPwning with powershell
Pwning with powershell
 
First adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteFirst adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram Institute
 

Viewers also liked

You Can't Build a Team in The Thunderdome
You Can't Build a Team in The ThunderdomeYou Can't Build a Team in The Thunderdome
You Can't Build a Team in The Thunderdome
mckern
 
Nakivo Slides 2014 12-17
Nakivo Slides 2014 12-17Nakivo Slides 2014 12-17
Nakivo Slides 2014 12-17
Nick Luchkov
 
Linux16 RPM
Linux16 RPMLinux16 RPM
Linux16 RPM
Jainul Musani
 
Pregunta Fácil
Pregunta FácilPregunta Fácil
Pregunta Fácil
lolemanu
 
Smau Milano 2016 - Fabio Alessandro Locati
Smau Milano 2016 - Fabio Alessandro LocatiSmau Milano 2016 - Fabio Alessandro Locati
Smau Milano 2016 - Fabio Alessandro Locati
SMAU
 
Spacewalk deployment at Fuqua
Spacewalk deployment at FuquaSpacewalk deployment at Fuqua
Spacewalk deployment at Fuqua
Andy Ingham
 

Viewers also liked (6)

You Can't Build a Team in The Thunderdome
You Can't Build a Team in The ThunderdomeYou Can't Build a Team in The Thunderdome
You Can't Build a Team in The Thunderdome
 
Nakivo Slides 2014 12-17
Nakivo Slides 2014 12-17Nakivo Slides 2014 12-17
Nakivo Slides 2014 12-17
 
Linux16 RPM
Linux16 RPMLinux16 RPM
Linux16 RPM
 
Pregunta Fácil
Pregunta FácilPregunta Fácil
Pregunta Fácil
 
Smau Milano 2016 - Fabio Alessandro Locati
Smau Milano 2016 - Fabio Alessandro LocatiSmau Milano 2016 - Fabio Alessandro Locati
Smau Milano 2016 - Fabio Alessandro Locati
 
Spacewalk deployment at Fuqua
Spacewalk deployment at FuquaSpacewalk deployment at Fuqua
Spacewalk deployment at Fuqua
 

Similar to Packaging is the Worst Way to Distribute Software, Except for Everything Else

Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015
ice799
 
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet
 
Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015
ice799
 
From Test to Live with Rex
From Test to Live with RexFrom Test to Live with Rex
From Test to Live with RexJan Gehring
 
Nodeconf npm 2011
Nodeconf npm 2011Nodeconf npm 2011
Nodeconf npm 2011
Florent Jaby ヅ
 
Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015
Chef
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Mandi Walls
 
Don't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen EmeryDon't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen Emery
DevOpsDays Baltimore
 
Don't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen EmeryDon't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen Emery
DevOpsDays Baltimore
 
Packaging perl (LPW2010)
Packaging perl (LPW2010)Packaging perl (LPW2010)
Packaging perl (LPW2010)
p3castro
 
Why internal pen tests are still fun
Why internal pen tests are still funWhy internal pen tests are still fun
Why internal pen tests are still funpyschedelicsupernova
 
OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...
OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...
OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...
NETWAYS
 
Packaging for the Maemo Platform
Packaging for the Maemo PlatformPackaging for the Maemo Platform
Packaging for the Maemo Platform
Jeremiah Foster
 
Steelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with PythonSteelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with Python
infodox
 
Groovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineGroovy there's a docker in my application pipeline
Groovy there's a docker in my application pipeline
Kris Buytaert
 
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
NETWAYS
 
Puppet Development Workflow
Puppet Development WorkflowPuppet Development Workflow
Puppet Development Workflow
Jeffery Smith
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
dotCloud
 
LXC Containers and AUFs
LXC Containers and AUFsLXC Containers and AUFs
LXC Containers and AUFsDocker, Inc.
 
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
Hackito Ergo Sum
 

Similar to Packaging is the Worst Way to Distribute Software, Except for Everything Else (20)

Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015Package manages and Puppet - PuppetConf 2015
Package manages and Puppet - PuppetConf 2015
 
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
 
Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015
 
From Test to Live with Rex
From Test to Live with RexFrom Test to Live with Rex
From Test to Live with Rex
 
Nodeconf npm 2011
Nodeconf npm 2011Nodeconf npm 2011
Nodeconf npm 2011
 
Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015Package Management and Chef - ChefConf 2015
Package Management and Chef - ChefConf 2015
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014
 
Don't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen EmeryDon't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen Emery
 
Don't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen EmeryDon't Mind the Gap by Galen Emery
Don't Mind the Gap by Galen Emery
 
Packaging perl (LPW2010)
Packaging perl (LPW2010)Packaging perl (LPW2010)
Packaging perl (LPW2010)
 
Why internal pen tests are still fun
Why internal pen tests are still funWhy internal pen tests are still fun
Why internal pen tests are still fun
 
OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...
OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...
OSDC 2016 - Continous Integration in Data Centers - Further 3 Years later by ...
 
Packaging for the Maemo Platform
Packaging for the Maemo PlatformPackaging for the Maemo Platform
Packaging for the Maemo Platform
 
Steelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with PythonSteelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with Python
 
Groovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineGroovy there's a docker in my application pipeline
Groovy there's a docker in my application pipeline
 
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
 
Puppet Development Workflow
Puppet Development WorkflowPuppet Development Workflow
Puppet Development Workflow
 
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @GuidewireIntroduction to Docker at SF Peninsula Software Development Meetup @Guidewire
Introduction to Docker at SF Peninsula Software Development Meetup @Guidewire
 
LXC Containers and AUFs
LXC Containers and AUFsLXC Containers and AUFs
LXC Containers and AUFs
 
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
[HES2013] Virtually secure, analysis to remote root 0day on an industry leadi...
 

Recently uploaded

Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 

Recently uploaded (20)

Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 

Packaging is the Worst Way to Distribute Software, Except for Everything Else

  • 1. Packaging is the Worst Way to Distribute Software, except for everything else Ryan McKern | Puppet Labs mckern@puppetlabs.com
  • 3. What do I do now? Release Engineering at
  • 4. Maybe you've used our products?
  • 5. What have I done? System Administration … for 13 years.
  • 6. I’ve probably been your customer
  • 8. "Prejudice is a great time saver. You can form opinions without having to get the facts." Attributed to E.B. White, Source unknown
  • 9. Let's talk about software!
  • 10. Distributing software sucks Shipping new platforms is so hard Cross-platform packaging is so hard Unpredictable user-space is so hard Moving the packaged bits is so hard
  • 12. Who among us knows this pain? sad@roberto Downloads $ wget -­‐-­‐quiet http:// ftpmirror.gnu.org/gcc/gcc-­‐4.9.1/gcc-­‐4.9.1.tar.bz2 sad@roberto Downloads $ tar xjf gcc-­‐4.9.1.tar.bz2 sad@roberto Downloads $ cd gcc-­‐4.9.1/ sad@roberto Downloads $ ./configure ./configure: line 532: sed: command not found ./configure: line 1371: sed: command not found ./configure: line 1920: sed: command not found ./configure: line 2291: sed: command not found configure: error: cannot run /bin/sh ./config.sub ./configure: line 361: sed: command not found ./configure: line 310: sort: command not found
  • 13. This was a problem because the customer's time has value
  • 14. Behold! ryan@animatronio ~ $ sudo rpm -­‐Uvh http://my.mirror.co/pub/ el/7/x86_64/nano-­‐2.3.1-­‐10.el7.x86_64.rpm Retrieving http://my.mirror.co/pub/el/7/x86_64/ nano-­‐2.3.1-­‐10.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:nano-­‐2.3.1-­‐10.el7 ################################# [100%] ryan@animatronio ~ $
  • 15.
  • 16. What's so great about packages?
  • 17. Dependency management calculon ~ # apt-­‐get install cmake Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: cmake-­‐data emacsen-­‐common libarchive12 libnettle4 libxmlrpc-­‐core-­‐c3 The following NEW packages will be installed: cmake cmake-­‐data emacsen-­‐common libarchive12 libnettle4 libxmlrpc-­‐core-­‐c3 0 upgraded, 6 newly installed, 0 to remove and 51 not upgraded.
  • 18. Verification bender ~ # mv /usr/share/man/man8/applydeltarpm.8.gz ~/ bender ~ # rpm -­‐V deltarpm missing d /usr/share/man/man8/applydeltarpm.8.gz bender ~ #
  • 19. Distribution ryan@tinnytim ~ $ gem push erniebert-­‐0.1.0.gem Pushing gem to BetterThanRubyGems.org... Successfully registered gem: erniebert (0.1.0) ryan@tinnytim ~ $ gem install erniebert Fetching: ffi-­‐1.9.6.gem (100%) Building native extensions. This could take a while... Successfully installed ffi-­‐1.9.6 Fetching: erniebert-­‐0.1.0.gem (100%) Successfully installed erniebert-­‐0.7.1 1 gem installed ryan@tinnytim ~ $
  • 20. What could be better about packages?
  • 21. Sometimes shipping bits really is hard
  • 22. Security is often both the joke and the punchline ouch@killbot ~ $ dpkg-­‐sig -­‐-­‐verify puppet_3.7.1-­‐1puppetlabs1_all.deb Processing ./puppet_3.7.1-­‐1puppetlabs1_all.deb... GOODSIG _gpgbuilder C093A3A56A6E0BEEA2821DD7133957EA11028DF3 1413702159 ouch@killbot ~ $ dpkg-­‐sig -­‐-­‐verify ./puppet_2.7.23-­‐1~deb7u3_all.deb Processing ./puppet_2.7.23-­‐1~deb7u3_all.deb... ouch@killbot ~ $
  • 23. So, so, so many similar-but-different formats
  • 24. Let's talk about some popular packaging formats
  • 25. .rpm • Managed by the recursively named "RPM Package Manager" & yum • cpio compressed binaries & text files • Post-installation tasks are shell scripts
  • 26. .deb • Managed by dpkg & apt, the "Advanced Package Tool" • ar compressed package with two gzipped tarballs & a small text file • Post-installation tasks are shell scripts
  • 27. Mac .pkg • Used by Mac OS X, and often delivered in a .dmg (disk image) or a .zip file • xar compressed archive, containing a binary file, two archives, and an XML document • post-installation tasks are still shell scripts
  • 28. About all those post-install shell scripts Maybe they're not that safe, but the surface area of this problem is big. That doesn't mean we needed "dash"
  • 29. Ruby .gem, Python .egg, and Node .npm • These are library managers with delusions of grandeur • Reuses the "download, decompress, configure, build, install" patterns, which hasn't got much spam in it • Constant compilation is a bummer
  • 30. What about... ? #realtalk We only have 45 minutes, and I hope you're going to have some questions for me to evade
  • 31. What are some alternatives?
  • 33.
  • 35.
  • 36. Full Disclosure • Puppet Labs does use the curl|bash technique as an option for our PE agent installation • If you don't trust your own Puppet Master, who do you trust? • (ALL THE COOL KIDS WERE DOING IT)
  • 37. You just wanted Ruby but you got Cthulhu ~ $ curl -­‐sSL https://get.rvm.io | bash -­‐s -­‐-­‐ -­‐-­‐fhtagn G̺̞ ̯͔̮̫̥ ͊̌͂ a͍͕͓̦͈̯̟̋ r̘̰̟e̓̓ ̦ C̋͋ͬt̂̅̓ t͇̻̩̲̬ ͇̪̹͔̾ ̟ḧ́΅ͭ ̩̿ͭ ͖̙̤ ͭl̅ͦ̓ ̝̙̭ ̗ ṷ ů̥͖ ͍͎͍ ̦̟ n̠̣̭ ̞̻̱̳ ̬ ̣̗ ̑ ̖͎ͩ hͯ ͐ ̝̤̊ ̞̭̳͚̞ ̘ s ̓ ͔̣ ̺̝͇ l̃ͪ͐̎̍ a̅͋̏̀ ̜̯͉ ͈͇̲ ̓̑ ̭̻l̂ͬ̽ ͮ ̙͇̼͍ r̭̂̋ͦ ̻̺̭ ̗͙̃ ̻̤̳ ̰̤ i̅̿̌ͫͣͪ ̺̙̽_̻͚ ̤ s ̮͇ e͍̞̚ ̿̌ͮ̍ ̝͕̳́̽ ̩̺ͅ ͉ r f͈̱͓͓ ̦̰̬̗ ̗̝̼ m̞̗͎͍̾̈͊ o͈̩ͪ̈ ̟̤̻͉ ̃ͨͬ́̉ͩ̓ ̰̝e͍͎h '̼̬̤̋̉̽lͪ ͣ ̗̼ͥ̉R ̱͚̏ ̫͙͓̰͔ ̃̂̂ ͕͓̲ y .̚ ̣̫ ̞͓͈ ̼̪̠s͔̹̞̟t͈̘͕ H͎̯ ̙̱a͍̟͍ͅ ̘̼ u͙͓̙̟r̥̹̫͇͎ ͚ ̻ͅ ̣ ̙̹ ͍̮ t ̻̳̮ h ̩̜̣_ e̠_̱̣͔ ̼ ̺͉U s͈̰̣̥ p̻ a͕̗̣̺ k ͇e̤͍̯ ̻̹͓̬ ̹̤̳a̠͍̪ b̩_ ̪_̥͖͎͍ e̪̻̣̣ ̙̼ ͈̬s͇̮̞ ḻ͇ ̥͖̠ ̹̩̖ ̙̲ a̺͈̹̤͈͉ͅ ̣̮͕̙ ̗ h ̠̟ ̰̜̜l̬̹̭ l̺̞ ̩̳̮̩̰͕ͅ ̻r̮̥̦͍͍ ͈̫ e̳̠̙̘ ̱ u̠͇r̮̣͓ ̘̬̰ t͔͚̳̹̰ ̰͖ n̗͍ ̥͕ ̥͉f̜͚r̯͍ͅ o͈̯̦ ̖ ̳͓̦͔ ¯ͭ̔ ̻͙̫̪̪̖͈ ͔̬ ̣̌ ̠̟̱̒ ͍m̻̟ ̭ ̼̠ ͍̣t͖h͔͉̞ e̬̫̦ ̋͂ ̖͇̼ ̊ͤ̓̋̄̐͌̾ ̩̝̮ ͓ d̰̼̞̤͕ ̤̘̣̭͍̖ ̻͈ ̟̭ ͡l̴l h͞ow l͢ f̕o ́̃̍̆̂̇̒ͫ k̲͖̻̻̆͋ͬ̑ ̩͍̭̙ ̥ k̙̣͕͔ ̘̮̤̻̜̳ r̯̰̱̬̭ͅ ḁ͙ ͔͔̺ ̠ ̗ s̻̱͎ ̙̦̝̗͍͎ ̞̪t̫͉̟̻ ͖ ạ̫ r͔̺ ͍.͔̖͚̺̹ ̰̫ Ǹ`ya͠rĺath̢ote͡p̢ ͟s̀`h ̨ a ̷reve̢r̀` ͑̎ ň̽̌ ḯ΅ ̣ ̃̄̇ͪ̂͑ ͉͔̙̤̪̜ h ̉ͦ ͕t͂̔ ͨ͋̅̿ ͔̆ͫ̓ͫ ̫͖̻ e ͫ͌͛ ͦ͆ͭ̽ ̊ͩͩ̇ͣ ̗ͅd̂ ā̇ͤ͋ͭͨ ̗̰ ͙̗̝͕̩̥ ̟͍ ř nͮͯ̑̿͒ e̍͒̅̄ͣ̀ ͅͅ ̪̠̗͕̥ ͋̋ ͙̹͎̺̠ s̊̈̽̊̌ s̈̌ͪ ̱̳ .̄̑̎ ͔̙̣ ̤̰̟̦̥ ͉̉ ͙̬
  • 38. curl | bash often assumes • There is no air-gap • Every request is a safe & sane request • That HTTPS is good enough
  • 39. curl | bash often forgets • >100% Broadband coverage • Mirrors exist • HTTPS secures transport, not content
  • 40. curl | bash totally ignores • The benefits of reusability • The fragility of shell scripts • The fragility of shells
  • 41. Security is hard • RVM recently introduced hand-rolled GPG signing* • Thread had 48 comments within a week, almost universally about the implementation • Broke semver, automation, and hearts * https://github.com/wayneeseguin/rvm/issues/3105
  • 43. Isn't that from Chef? • Sure, but so is Test Kitchen • Builds packages while still controlling the entire dependency stack • Lots of love from users with complicated dependency stacks
  • 44. Omnibus is one way to skin the entire cat • Abstracts (instead of removes) dependency management • Only builds packages for the platform it's installed on • You're going to want to know Ruby
  • 45. FPM
  • 46. Effing Package Managers •General purpose swiss-army knife of package building •Works around a lot of the shortcomings of existing package managers •Jordan Sissel is a SAINT (Shout out to #hugops!)
  • 47. "Common packaging patterns, a distaste for existing packaging practices, and some hate-driven development yielded FPM! Add some amazing contributions in code, bugs, features, and support from the community and boom we have modern FPM." Jordan Sissel My inbox, Oct 10 2014
  • 48. Effing FPM • Swiss army knives are rarely the best tool for a given job • General purpose in this case means a lot (~150ish) of command line flags • Still infinitely better than curl | bash
  • 49. Why so many alternatives? What went wrong?
  • 50. RPM Packaging can be tough • RPM Spec files are weird • Kind-of M4, kind of Shell, all obtuse • Oh, and kind-of Make; only kind-of • Sort-of competing RPM standards
  • 51. Deb Packaging can feels like penance • "debian/" directories are outright hostile to man & beast alike • Debian "Helpers" usually don't • dpatch can use unified diffs (sane) or shell scripts (what?!)
  • 52. Conflation of purpose • Some library managers try to install executables, e.g. gem, pip, npm • Remember when I said "delusions of grandeur"? (Google Image Search was kind of useless here)
  • 53. But really, I just have a hypothesis! • Developers love solving new problems • Sometimes they confuse their problems for the customer's problems • Maybe packaging isn't a solved problem yet, but it's close
  • 54. Where do we go from here?
  • 55. Sometimes the only choices you have are bad ones; but you still have to choose.
  • 56. TL;DR: this problem is (mostly) solved Stop writing new installers from scratch Give your customers the best packages possible Don't forget Pareto (any number of 80/20 rules)
  • 57. Thank you You're wonderful. Thank you for letting me rant at you for as long as you did. mckern@puppetlabs.com @the_mckern