Your SlideShare is downloading. ×
Outsourcing your webapp maintenance to Debian
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Outsourcing your webapp maintenance to Debian

118
views

Published on

Today's web applications often have a lot of external dependencies. Start off with a basic framework, sprinkle a couple of handy modules and finish with a generous serving of JavaScript front-end …

Today's web applications often have a lot of external dependencies. Start off with a basic framework, sprinkle a couple of handy modules and finish with a generous serving of JavaScript front-end libraries.

What you end up is a gigantic mess of code from different sources which follow very different release schedules and policies. Language-specific package managers can automate much of the dependency resolution and package installation, but you're on your own in terms of integration and quality assurance. Also, the minute you start distributing someone else's code with your project, you become responsible for the security of that third-party code.

We moved away from statically-linked C/C++ programs a long time ago and now (mostly) live in a nicely-packaged shared library world. Can we leverage the power of Debian (i.e. the great work of the package maintainers and security team) to similarly reduce the burden of those who end up having to maintain our webapps?

This talk will examine the decision that the Libravatar project made to outsource much of its maintenance burden to Debian by using system packages for almost everything.

https://summit.debconf.org/debconf14/meeting/16/outsourcing-your-webapp-maintenance-to-debian/

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
118
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. #!/bin/sh ##### Outsourcing your webapp maintenance to Debian # by Francois Marier <francois@debian.org> # apt-get update apt-get -y upgrade
  • 2. dependencies in webapps
  • 3. dependencies in webapps case study
  • 4. dependencies in webapps case study approach
  • 5. dependencies in webapps case study approach results
  • 6. dependencies in webapps case study discussion approach results
  • 7. external depencies in web applications
  • 8. $ ls vendor/packages/ amqplib anyjson BeautifulSoup beautifulsoup4 bleach celery decorator distribute Django django-assets django-authopenid django-celery django-debug-toolbar django-extensions django-inplaceedit django-invitation django-kombu django-model-utils django-picklefield django-registration django-reversion django-tastypie django-voting django-webtest dj-database-url docutils feedparser gdata ghettoq html2text html5lib importlib Jinja2 jsmin kombu markupsafe mechanize mimeparse mock odict ordereddict pygeoip Pygments python-dateutil python-memcached python-mimeparse python-openid python-otp python-patch pytz PyYaml requests scrapy sessionprofile six south sphinx sqlparse staticgenerator twill twisted typecheck unicodecsv unittest-xml-reporting webob webtest whoosh zope.interface
  • 9. browserid@1.0.0-b2 ├── async@0.2.9 ├─┬ awsbox@0.7.1 │ ├─┬ awssum@1.1.0 │ │ ├── underscore@1.4.4 │ │ └─┬ xml2js@0.2.8 │ │ └── sax@0.5.8 │ ├─┬ awssum-amazon@1.1.0 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-ec2@1.5.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-route53@1.2.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├── colors@0.6.2 │ ├─┬ nice-route53@0.3.4 │ │ └─┬ awssum-amazon-route53@1.0.3 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├─┬ optimist@0.3.1 │ │ └── wordwrap@0.0.2 │ ├─┬ read-package-json@1.1.9 │ │ ├─┬ glob@3.2.11 │ │ │ ├── inherits@2.0.1 │ │ │ └─┬ minimatch@0.3.0 │ │ │ └── sigmund@1.0.0 │ │ ├── graceful-fs@2.0.3 │ │ ├── lru-cache@2.5.0 │ │ └─┬ normalize-package-data@0.2.13 │ │ ├── github-url-from-git@1.1.1 │ │ └── github-url-from-...@0.1.0 │ ├── relative-date@1.1.1 │ ├── temp@0.4.0 │ └─┬ xml2js@0.1.13 │ └── sax@0.6.0 ├─┬ bcrypt@0.7.7 │ └── bindings@1.0.0 ├─┬ cef@0.3.3 │ └── dateformat@1.0.2-1.2.3 ├── cjson@0.2.1 ├─┬ client-sessions@0.6.0 │ │ ├── esprima@1.0.3 │ │ ├── estraverse@1.1.2-1 │ │ ├─┬ jade@0.30.0 │ │ │ ├── character-parser@1.0.2 │ │ │ ├─┬ commander@1.1.1 │ │ │ │ └── keypress@0.1.0 │ │ │ ├─┬ monocle@0.1.50 │ │ │ │ └─┬ readdirp@0.2.5 │ │ │ │ └─┬ minimatch@1.0.0 │ │ │ │ ├── lru-cache@2.5.0 │ │ │ │ └── sigmund@1.0.0 │ │ │ └─┬ transformers@2.0.1 │ │ │ ├─┬ css@1.0.8 │ │ │ │ ├── css-parse@1.0.4 │ │ │ │ └── css-stringify@1.0.5 │ │ │ ├─┬ promise@2.0.0 │ │ │ │ └── is-promise@1.0.1 │ │ │ └─┬ uglify-js@2.2.5 │ │ │ ├─┬ optimist@0.3.7 │ │ │ │ └── wordwrap@0.0.2 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0 │ │ └─┬ nomnom@1.5.2 │ │ ├── colors@0.5.1 │ │ └── underscore@1.1.7 │ ├─┬ optimist@0.3.4 │ │ └── wordwrap@0.0.2 │ └─┬ plist@0.4.3 │ ├── xmlbuilder@0.4.3 │ └── xmldom@0.1.19 ├── irc@0.3.6 ├─┬ jshint@2.1.11 │ ├─┬ cli@0.4.5 │ │ └─┬ glob@4.0.5 │ │ ├── graceful-fs@3.0.2 │ │ ├── inherits@2.0.1 │ │ ├─┬ minimatch@1.0.0 │ │ │ ├── lru-cache@2.5.0 │ │ │ └── sigmund@1.0.0 │ │ └── once@1.3.0 │ ├── console-browserify@0.1.6 │ ├─┬ minimatch@0.4.0 │ │ ├── lru-cache@2.5.0 │ │ └── sigmund@1.0.0 │ ├── shelljs @0.1.4 ├─┬ nodemailer@0.5.3 │ ├─┬ mailcomposer@0.2.12 │ │ ├─┬ dkim-signer@0.1.2 │ │ │ └── punycode@1.2.4 │ │ ├── follow-redirects@│ │ ├── he@0.3.6 │ │ ├── mime@1.2.11 │ │ └─┬ mimelib@0.2.17 │ │ ├── addressparser@0.2.1 │ │ └─┬ encoding@0.1.8 │ │ └── iconv-lite@0.4.4 │ └─┬ simplesmtp@0.3.32 │ ├── rai@0.1.11 │ └── xoauth2@0.1.8 ├─┬ optimist@0.6.0 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.2 ├── postprocess@0.2.4 ├─┬ rimraf@2.2.2 │ └── graceful-fs@2.0.3 ├── semver@2.1.0 ├─┬ temp@0.6.0 │ ├── osenv@0.0.3 │ └─┬ rimraf@2.1.4 │ └── graceful-fs@1.2.3 ├─┬ toobusy@0.2.4 │ └── bindings@1.1.0 ├── uglify-js@1.0.6 ├── uglifycss@0.0.5 ├── underscore@1.5.2 ├── urlparse@0.0.1 ├─┬ useragent@2.0.7 │ └── lru-cache@2.2.4 ├── validator@1.5.1 ├─┬ vows@0.7.0 │ ├── diff@1.0.8 │ ├── eyes@0.1.8 │ └─┬ glob@3.1.21 │ ├── graceful-fs@1.2.3 │ ├── inherits@1.0.0 │ └─┬ minimatch@0.2.14 │ ├── lru-cache@2.5.0 │ └── sigmund@1.0.0 ├── which@1.0.5 └─┬ winston@0.7.2 ├── colors@0.6.2 ├── cycle@1.0.3 ├── eyes@0.1.8 ├── pkginfo@0.3.0 ├─┬ request@2.16.6 │ ├── aws-sign@0.2.0 │ └── cookies@0.3.8 ├─┬ compute-cluster@0.0.6 │ └─┬ vows@0.6.0 │ └── eyes@0.1.8 ├─┬ connect@1.7.2 │ ├── mime@1.2.11 │ └── qs@1.2.2 ├── connect-cachify@0.0.15 ├─┬ connect-fonts@0.0.11 │ ├── filed@0.1.0 │ ├── mime@1.2.9 │ ├─┬ node-font-face-...@0.1.1 │ │ └─┬ ua-parser@0.2.4 │ │ └── yamlparser@0.0.2 │ ├─┬ oppressor@0.0.1 │ │ ├── negotiator@0.2.8 │ │ ├── response-stream@0.0.0 │ │ └── through@0.1.4 │ └── tmp@0.0.16 ├── connect-fonts-feurasans@0.0.3 ├── connect-fonts-opensans@0.0.5 ├── connect-logger-statsd@0.0.1 ├─┬ convict@0.4.1 │ ├── moment@1.7.2 │ ├─┬ optimist@0.5.0 │ │ └── wordwrap@0.0.2 │ └── validator@0.4.24 ├─┬ cover@0.2.9 │ ├─┬ cli-table@0.0.2 │ │ └── colors@0.3.0 │ ├── underscore@1.2.4 │ └── underscore.string@2.0.0 ├── ejs@0.8.4 ├── etagify@0.0.2 ├─┬ express@2.5.0 │ ├── mime@1.2.11 │ ├── mkdirp@0.0.7 │ └── qs@1.2.2 ├── gobbledygook@0.0.3 ├── hood@0.2.1 ├── htmlparser@1.7.6 ├─┬ i18n-abide@0.0.14 │ ├── async@0.1.22 │ ├─┬ jsxgettext@0.1.7 │ │ ├─┬ escodegen@0.0.23 │ │ │ ├── estraverse@0.0.4 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0
  • 10. browserid@1.0.0-b2 ├── async@0.2.9 ├─┬ awsbox@0.7.1 │ ├─┬ awssum@1.1.0 │ │ ├── underscore@1.4.4 │ │ └─┬ xml2js@0.2.8 │ │ └── sax@0.5.8 │ ├─┬ awssum-amazon@1.1.0 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-ec2@1.5.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-route53@1.2.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├── colors@0.6.2 │ ├─┬ nice-route53@0.3.4 │ │ └─┬ awssum-amazon-route53@1.0.3 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├─┬ optimist@0.3.1 │ │ └── wordwrap@0.0.2 │ ├─┬ read-package-json@1.1.9 │ │ ├─┬ glob@3.2.11 │ │ │ ├── inherits@2.0.1 │ │ │ └─┬ minimatch@0.3.0 │ │ │ └── sigmund@1.0.0 │ │ ├── graceful-fs@2.0.3 │ │ ├── lru-cache@2.5.0 │ │ └─┬ normalize-package-data@0.2.13 │ │ ├── github-url-from-git@1.1.1 │ │ └── github-url-from-...@0.1.0 │ ├── relative-date@1.1.1 │ ├── temp@0.4.0 │ └─┬ xml2js@0.1.13 │ └── sax@0.6.0 ├─┬ bcrypt@0.7.7 │ └── bindings@1.0.0 ├─┬ cef@0.3.3 │ └── dateformat@1.0.2-1.2.3 ├── cjson@0.2.1 ├─┬ client-sessions@0.6.0 │ │ ├── esprima@1.0.3 │ │ ├── estraverse@1.1.2-1 │ │ ├─┬ jade@0.30.0 │ │ │ ├── character-parser@1.0.2 │ │ │ ├─┬ commander@1.1.1 │ │ │ │ └── keypress@0.1.0 │ │ │ ├─┬ monocle@0.1.50 │ │ │ │ └─┬ readdirp@0.2.5 │ │ │ │ └─┬ minimatch@1.0.0 │ │ │ │ ├── lru-cache@2.5.0 │ │ │ │ └── sigmund@1.0.0 │ │ │ └─┬ transformers@2.0.1 │ │ │ ├─┬ css@1.0.8 │ │ │ │ ├── css-parse@1.0.4 │ │ │ │ └── css-stringify@1.0.5 │ │ │ ├─┬ promise@2.0.0 │ │ │ │ └── is-promise@1.0.1 │ │ │ └─┬ uglify-js@2.2.5 │ │ │ ├─┬ optimist@0.3.7 │ │ │ │ └── wordwrap@0.0.2 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0 │ │ └─┬ nomnom@1.5.2 │ │ ├── colors@0.5.1 │ │ └── underscore@1.1.7 │ ├─┬ optimist@0.3.4 │ │ └── wordwrap@0.0.2 │ └─┬ plist@0.4.3 │ ├── xmlbuilder@0.4.3 │ └── xmldom@0.1.19 ├── irc@0.3.6 ├─┬ jshint@2.1.11 │ ├─┬ cli@0.4.5 │ │ └─┬ glob@4.0.5 │ │ ├── graceful-fs@3.0.2 │ │ ├── inherits@2.0.1 │ │ ├─┬ minimatch@1.0.0 │ │ │ ├── lru-cache@2.5.0 │ │ │ └── sigmund@1.0.0 │ │ └── once@1.3.0 │ ├── console-browserify@0.1.6 │ ├─┬ minimatch@0.4.0 │ │ ├── lru-cache@2.5.0 │ │ └── sigmund@1.0.0 │ ├── shelljs @0.1.4 ├─┬ nodemailer@0.5.3 │ ├─┬ mailcomposer@0.2.12 │ │ ├─┬ dkim-signer@0.1.2 │ │ │ └── punycode@1.2.4 │ │ ├── follow-redirects@│ │ ├── he@0.3.6 │ │ ├── mime@1.2.11 │ │ └─┬ mimelib@0.2.17 │ │ ├── addressparser@0.2.1 │ │ └─┬ encoding@0.1.8 │ │ └── iconv-lite@0.4.4 │ └─┬ simplesmtp@0.3.32 │ ├── rai@0.1.11 │ └── xoauth2@0.1.8 ├─┬ optimist@0.6.0 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.2 ├── postprocess@0.2.4 ├─┬ rimraf@2.2.2 │ └── graceful-fs@2.0.3 ├── semver@2.1.0 ├─┬ temp@0.6.0 │ ├── osenv@0.0.3 │ └─┬ rimraf@2.1.4 │ └── graceful-fs@1.2.3 ├─┬ toobusy@0.2.4 │ └── bindings@1.1.0 ├── uglify-js@1.0.6 ├── uglifycss@0.0.5 ├── underscore@1.5.2 ├── urlparse@0.0.1 ├─┬ useragent@2.0.7 │ └── lru-cache@2.2.4 ├── validator@1.5.1 ├─┬ vows@0.7.0 │ ├── diff@1.0.8 │ ├── eyes@0.1.8 │ └─┬ glob@3.1.21 │ ├── graceful-fs@1.2.3 │ ├── inherits@1.0.0 │ └─┬ minimatch@0.2.14 │ ├── lru-cache@2.5.0 │ └── sigmund@1.0.0 ├── which@1.0.5 └─┬ winston@0.7.2 ├── colors@0.6.2 ├── cycle@1.0.3 ├── eyes@0.1.8 ├── pkginfo@0.3.0 ├─┬ request@2.16.6 │ ├── aws-sign@0.2.0 │ └── cookies@0.3.8 ├─┬ compute-cluster@0.0.6 │ └─┬ vows@0.6.0 │ └── eyes@0.1.8 ├─┬ connect@1.7.2 │ ├── mime@1.2.11 │ └── qs@1.2.2 ├── connect-cachify@0.0.15 ├─┬ connect-fonts@0.0.11 │ ├── filed@0.1.0 │ ├── mime@1.2.9 │ ├─┬ node-font-face-...@0.1.1 │ │ └─┬ ua-parser@0.2.4 │ │ └── yamlparser@0.0.2 │ ├─┬ oppressor@0.0.1 │ │ ├── negotiator@0.2.8 │ │ ├── response-stream@0.0.0 │ │ └── through@0.1.4 │ └── tmp@0.0.16 ├── connect-fonts-feurasans@0.0.3 ├── connect-fonts-opensans@0.0.5 ├── connect-logger-statsd@0.0.1 ├─┬ convict@0.4.1 │ ├── moment@1.7.2 │ ├─┬ optimist@0.5.0 │ │ └── wordwrap@0.0.2 │ └── validator@0.4.24 ├─┬ cover@0.2.9 │ ├─┬ cli-table@0.0.2 │ │ └── colors@0.3.0 │ ├── underscore@1.2.4 │ └── underscore.string@2.0.0 ├── ejs@0.8.4 ├── etagify@0.0.2 ├─┬ express@2.5.0 │ ├── mime@1.2.11 │ ├── mkdirp@0.0.7 │ └── qs@1.2.2 ├── gobbledygook@0.0.3 ├── hood@0.2.1 ├── htmlparser@1.7.6 ├─┬ i18n-abide@0.0.14 │ ├── async@0.1.22 │ ├─┬ jsxgettext@0.1.7 │ │ ├─┬ escodegen@0.0.23 │ │ │ ├── estraverse@0.0.4 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0
  • 11. browserid@1.0.0-b2 ├── async@0.2.9 ├─┬ awsbox@0.7.1 │ ├─┬ awssum@1.1.0 │ │ ├── underscore@1.4.4 │ │ └─┬ xml2js@0.2.8 │ │ └── sax@0.5.8 │ ├─┬ awssum-amazon@1.1.0 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-ec2@1.5.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-route53@1.2.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├── colors@0.6.2 │ ├─┬ nice-route53@0.3.4 │ │ └─┬ awssum-amazon-route53@1.0.3 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├─┬ optimist@0.3.1 │ │ └── wordwrap@0.0.2 │ ├─┬ read-package-json@1.1.9 │ │ ├─┬ glob@3.2.11 │ │ │ ├── inherits@2.0.1 │ │ │ └─┬ minimatch@0.3.0 │ │ │ └── sigmund@1.0.0 │ │ ├── graceful-fs@2.0.3 │ │ ├── lru-cache@2.5.0 │ │ └─┬ normalize-package-data@0.2.13 │ │ ├── github-url-from-git@1.1.1 │ │ └── github-url-from-...@0.1.0 │ ├── relative-date@1.1.1 │ ├── temp@0.4.0 │ └─┬ xml2js@0.1.13 │ └── sax@0.6.0 ├─┬ bcrypt@0.7.7 │ └── bindings@1.0.0 ├─┬ cef@0.3.3 │ └── dateformat@1.0.2-1.2.3 ├── cjson@0.2.1 ├─┬ client-sessions@0.6.0 │ │ ├── esprima@1.0.3 │ │ ├── estraverse@1.1.2-1 │ │ ├─┬ jade@0.30.0 │ │ │ ├── character-parser@1.0.2 │ │ │ ├─┬ commander@1.1.1 │ │ │ │ └── keypress@0.1.0 │ │ │ ├─┬ monocle@0.1.50 │ │ │ │ └─┬ readdirp@0.2.5 │ │ │ │ └─┬ minimatch@1.0.0 │ │ │ │ ├── lru-cache@2.5.0 │ │ │ │ └── sigmund@1.0.0 │ │ │ └─┬ transformers@2.0.1 │ │ │ ├─┬ css@1.0.8 │ │ │ │ ├── css-parse@1.0.4 │ │ │ │ └── css-stringify@1.0.5 │ │ │ ├─┬ promise@2.0.0 │ │ │ │ └── is-promise@1.0.1 │ │ │ └─┬ uglify-js@2.2.5 │ │ │ ├─┬ optimist@0.3.7 │ │ │ │ └── wordwrap@0.0.2 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0 │ │ └─┬ nomnom@1.5.2 │ │ ├── colors@0.5.1 │ │ └── underscore@1.1.7 │ ├─┬ optimist@0.3.4 │ │ └── wordwrap@0.0.2 │ └─┬ plist@0.4.3 │ ├── xmlbuilder@0.4.3 │ └── xmldom@0.1.19 ├── irc@0.3.6 ├─┬ jshint@2.1.11 │ ├─┬ cli@0.4.5 │ │ └─┬ glob@4.0.5 │ │ ├── graceful-fs@3.0.2 │ │ ├── inherits@2.0.1 │ │ ├─┬ minimatch@1.0.0 │ │ │ ├── lru-cache@2.5.0 │ │ │ └── sigmund@1.0.0 │ │ └── once@1.3.0 │ ├── console-browserify@0.1.6 │ ├─┬ minimatch@0.4.0 │ │ ├── lru-cache@2.5.0 │ │ └── sigmund@1.0.0 │ ├── shelljs @0.1.4 ├─┬ nodemailer@0.5.3 │ ├─┬ mailcomposer@0.2.12 │ │ ├─┬ dkim-signer@0.1.2 │ │ │ └── punycode@1.2.4 │ │ ├── follow-redirects@│ │ ├── he@0.3.6 │ │ ├── mime@1.2.11 │ │ └─┬ mimelib@0.2.17 │ │ ├── addressparser@0.2.1 │ │ └─┬ encoding@0.1.8 │ │ └── iconv-lite@0.4.4 │ └─┬ simplesmtp@0.3.32 │ ├── rai@0.1.11 │ └── xoauth2@0.1.8 ├─┬ optimist@0.6.0 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.2 ├── postprocess@0.2.4 ├─┬ rimraf@2.2.2 │ └── graceful-fs@2.0.3 ├── semver@2.1.0 ├─┬ temp@0.6.0 │ ├── osenv@0.0.3 │ └─┬ rimraf@2.1.4 │ └── graceful-fs@1.2.3 ├─┬ toobusy@0.2.4 │ └── bindings@1.1.0 ├── uglify-js@1.0.6 ├── uglifycss@0.0.5 ├── underscore@1.5.2 ├── urlparse@0.0.1 ├─┬ useragent@2.0.7 │ └── lru-cache@2.2.4 ├── validator@1.5.1 ├─┬ vows@0.7.0 │ ├── diff@1.0.8 │ ├── eyes@0.1.8 │ └─┬ glob@3.1.21 │ ├── graceful-fs@1.2.3 │ ├── inherits@1.0.0 │ └─┬ minimatch@0.2.14 │ ├── lru-cache@2.5.0 │ └── sigmund@1.0.0 ├── which@1.0.5 └─┬ winston@0.7.2 ├── colors@0.6.2 ├── cycle@1.0.3 ├── eyes@0.1.8 ├── pkginfo@0.3.0 ├─┬ request@2.16.6 │ ├── aws-sign@0.2.0 │ └── cookies@0.3.8 ├─┬ compute-cluster@0.0.6 │ └─┬ vows@0.6.0 │ └── eyes@0.1.8 ├─┬ connect@1.7.2 │ ├── mime@1.2.11 │ └── qs@1.2.2 ├── connect-cachify@0.0.15 ├─┬ connect-fonts@0.0.11 │ ├── filed@0.1.0 │ ├── mime@1.2.9 │ ├─┬ node-font-face-...@0.1.1 │ │ └─┬ ua-parser@0.2.4 │ │ └── yamlparser@0.0.2 │ ├─┬ oppressor@0.0.1 │ │ ├── negotiator@0.2.8 │ │ ├── response-stream@0.0.0 │ │ └── through@0.1.4 │ └── tmp@0.0.16 ├── connect-fonts-feurasans@0.0.3 ├── connect-fonts-opensans@0.0.5 ├── connect-logger-statsd@0.0.1 ├─┬ convict@0.4.1 │ ├── moment@1.7.2 │ ├─┬ optimist@0.5.0 │ │ └── wordwrap@0.0.2 │ └── validator@0.4.24 ├─┬ cover@0.2.9 │ ├─┬ cli-table@0.0.2 │ │ └── colors@0.3.0 │ ├── underscore@1.2.4 │ └── underscore.string@2.0.0 ├── ejs@0.8.4 ├── etagify@0.0.2 ├─┬ express@2.5.0 │ ├── mime@1.2.11 │ ├── mkdirp@0.0.7 │ └── qs@1.2.2 ├── gobbledygook@0.0.3 ├── hood@0.2.1 ├── htmlparser@1.7.6 ├─┬ i18n-abide@0.0.14 │ ├── async@0.1.22 │ ├─┬ jsxgettext@0.1.7 │ │ ├─┬ escodegen@0.0.23 │ │ │ ├── estraverse@0.0.4 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0 1.4.4 1.2.4 1.1.7 1.5.2
  • 12. not a new problem
  • 13. c/c++ dynamic linking
  • 14. shared library instead of bundling
  • 15. fix libbroken once
  • 16. fix libbroken once maintainer uploads the new upstream version
  • 17. fix libbroken once maintainer uploads the new upstream version security team patches the stable package
  • 18. How to leverage this work in our webapps?
  • 19. libravatar.org
  • 20. libravatar.org
  • 21. delivering (federated) avatars to third-party websites
  • 22. www
  • 23. www cdn1 cdn2 cdn4 cdn5
  • 24. www cdn1 cdn2 cdn4 cdn5
  • 25. www cdn1 cdn2 cdn4 cdn5
  • 26. www cdn1 cdn2 cdn4 cdn5
  • 27. www cdn1 cdn2 cdn4 cdn5
  • 28. www cdn1 cdn2 yours? cdn4 cdn5
  • 29. Francois@FMARIER.ORG
  • 30. francois@fmarier.org
  • 31. 0110e86fdb31486c22dd381326d99de9
  • 32. http://gravatar.com/avatar/0110e86...
  • 33. $ dig SRV _avatars._tcp.fmarier.org ; <<>> DiG 9.9.5-4-Debian <<>> SRV _avatars._tcp.fmarier.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48289 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;_avatars._tcp.fmarier.org. IN SRV ;; ANSWER SECTION: _avatars._tcp.fmarier.org. 3600 IN SRV 1 0 80 fmarier.org. ;; Query time: 137 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Sat Aug 16 14:45:04 EDT 2014 ;; MSG SIZE rcvd: 85
  • 34. http://fmarier.org/avatar/0110e86...
  • 35. http://cdn.libravatar.org/avatar/ https://seccdn.libravatar.org/avatar/
  • 36. a pretty simple web application
  • 37. guidelines
  • 38. guidelines 1. only use Python libraries that are packaged for Debian
  • 39. guidelines 1. 2. only use Python libraries that are packaged for Debian only use the version from the latest Debian release
  • 40. libravatar*.deb
  • 41. “upstream” makefile build:
  • 42. “upstream” makefile build: $(MINIFY) $(COMPRESS) mofiles
  • 43. “upstream” makefile build: $(MINIFY) $(COMPRESS) mofiles ... test:
  • 44. “upstream” makefile build: $(MINIFY) $(COMPRESS) mofiles ... test: pep8 pyflakes pylint unittests ...
  • 45. libravatar.deb libravatar-www.deb libravatar-cdn.deb libravatar-seccdn.deb libravatar-cdn-common.deb libravatar-common.deb ...
  • 46. reprepro
  • 47. fabric
  • 48. keeping mirrors up to date apt-get update apt-get upgrade
  • 49. How did it go?
  • 50. limited choice of libraries
  • 51. python-gearman.libgearman python-gearman
  • 52. $ apt-cache search ^python- | grep ^python | wc -l 2248 $ apt-cache search ^python3- | grep ^python | wc -l 656
  • 53. cannot use the latest features
  • 54. Libravatar is a very low-maintainance service
  • 55. Problems I ran into
  • 56. optimizing for sysadmins instead of developers
  • 57. non-minified jQuery
  • 58. cannot easily use unattended-upgrades
  • 59. apticron report [Sat, 23 Aug 2014 10:11:08 +0000] ================================================= apticron has detected that some packages need upgrading on: husavik [ 162.x.x.x 10.x.x.x 2001::37f0 ] [ 162.x.x.x 2001::37f0 ] The following packages are currently pending an upgrade: python-django 1.4.5-1+deb7u8 =================================================
  • 60. security updates not always timely in Debian
  • 61. if you notice...
  • 62. if you notice... you can help out with backporting or testing!
  • 63. if you don't notice...
  • 64. if you don't notice... better late than never!
  • 65. www
  • 66. Is it realistic?
  • 67. django system libraries deb packaging
  • 68. What would be a good fit?
  • 69. not your full-time job
  • 70. not your full-time job uses a mature framework
  • 71. e.g. side project
  • 72. e.g. consulting company
  • 73. browserid@1.0.0-b2 ├── async@0.2.9 ├─┬ awsbox@0.7.1 │ ├─┬ awssum@1.1.0 │ │ ├── underscore@1.4.4 │ │ └─┬ xml2js@0.2.8 │ │ └── sax@0.5.8 │ ├─┬ awssum-amazon@1.1.0 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-ec2@1.5.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ └── underscore@1.4.4 │ ├─┬ awssum-amazon-route53@1.2.0 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├── colors@0.6.2 │ ├─┬ nice-route53@0.3.4 │ │ └─┬ awssum-amazon-route53@1.0.3 │ │ ├── data2xml@0.8.1 │ │ ├── dateformat@1.0.4-1.2.3 │ │ ├── fmt@0.4.0 │ │ └── underscore@1.4.4 │ ├─┬ optimist@0.3.1 │ │ └── wordwrap@0.0.2 │ ├─┬ read-package-json@1.1.9 │ │ ├─┬ glob@3.2.11 │ │ │ ├── inherits@2.0.1 │ │ │ └─┬ minimatch@0.3.0 │ │ │ └── sigmund@1.0.0 │ │ ├── graceful-fs@2.0.3 │ │ ├── lru-cache@2.5.0 │ │ └─┬ normalize-package-data@0.2.13 │ │ ├── github-url-from-git@1.1.1 │ │ └── github-url-from-...@0.1.0 │ ├── relative-date@1.1.1 │ ├── temp@0.4.0 │ └─┬ xml2js@0.1.13 │ └── sax@0.6.0 ├─┬ bcrypt@0.7.7 │ └── bindings@1.0.0 ├─┬ cef@0.3.3 │ └── dateformat@1.0.2-1.2.3 ├── cjson@0.2.1 ├─┬ client-sessions@0.6.0 │ │ ├── esprima@1.0.3 │ │ ├── estraverse@1.1.2-1 │ │ ├─┬ jade@0.30.0 │ │ │ ├── character-parser@1.0.2 │ │ │ ├─┬ commander@1.1.1 │ │ │ │ └── keypress@0.1.0 │ │ │ ├─┬ monocle@0.1.50 │ │ │ │ └─┬ readdirp@0.2.5 │ │ │ │ └─┬ minimatch@1.0.0 │ │ │ │ ├── lru-cache@2.5.0 │ │ │ │ └── sigmund@1.0.0 │ │ │ └─┬ transformers@2.0.1 │ │ │ ├─┬ css@1.0.8 │ │ │ │ ├── css-parse@1.0.4 │ │ │ │ └── css-stringify@1.0.5 │ │ │ ├─┬ promise@2.0.0 │ │ │ │ └── is-promise@1.0.1 │ │ │ └─┬ uglify-js@2.2.5 │ │ │ ├─┬ optimist@0.3.7 │ │ │ │ └── wordwrap@0.0.2 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0 │ │ └─┬ nomnom@1.5.2 │ │ ├── colors@0.5.1 │ │ └── underscore@1.1.7 │ ├─┬ optimist@0.3.4 │ │ └── wordwrap@0.0.2 │ └─┬ plist@0.4.3 │ ├── xmlbuilder@0.4.3 │ └── xmldom@0.1.19 ├── irc@0.3.6 ├─┬ jshint@2.1.11 │ ├─┬ cli@0.4.5 │ │ └─┬ glob@4.0.5 │ │ ├── graceful-fs@3.0.2 │ │ ├── inherits@2.0.1 │ │ ├─┬ minimatch@1.0.0 │ │ │ ├── lru-cache@2.5.0 │ │ │ └── sigmund@1.0.0 │ │ └── once@1.3.0 │ ├── console-browserify@0.1.6 │ ├─┬ minimatch@0.4.0 │ │ ├── lru-cache@2.5.0 │ │ └── sigmund@1.0.0 │ ├── shelljs @0.1.4 ├─┬ nodemailer@0.5.3 │ ├─┬ mailcomposer@0.2.12 │ │ ├─┬ dkim-signer@0.1.2 │ │ │ └── punycode@1.2.4 │ │ ├── follow-redirects@│ │ ├── he@0.3.6 │ │ ├── mime@1.2.11 │ │ └─┬ mimelib@0.2.17 │ │ ├── addressparser@0.2.1 │ │ └─┬ encoding@0.1.8 │ │ └── iconv-lite@0.4.4 │ └─┬ simplesmtp@0.3.32 │ ├── rai@0.1.11 │ └── xoauth2@0.1.8 ├─┬ optimist@0.6.0 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.2 ├── postprocess@0.2.4 ├─┬ rimraf@2.2.2 │ └── graceful-fs@2.0.3 ├── semver@2.1.0 ├─┬ temp@0.6.0 │ ├── osenv@0.0.3 │ └─┬ rimraf@2.1.4 │ └── graceful-fs@1.2.3 ├─┬ toobusy@0.2.4 │ └── bindings@1.1.0 ├── uglify-js@1.0.6 ├── uglifycss@0.0.5 ├── underscore@1.5.2 ├── urlparse@0.0.1 ├─┬ useragent@2.0.7 │ └── lru-cache@2.2.4 ├── validator@1.5.1 ├─┬ vows@0.7.0 │ ├── diff@1.0.8 │ ├── eyes@0.1.8 │ └─┬ glob@3.1.21 │ ├── graceful-fs@1.2.3 │ ├── inherits@1.0.0 │ └─┬ minimatch@0.2.14 │ ├── lru-cache@2.5.0 │ └── sigmund@1.0.0 ├── which@1.0.5 └─┬ winston@0.7.2 ├── colors@0.6.2 ├── cycle@1.0.3 ├── eyes@0.1.8 ├── pkginfo@0.3.0 ├─┬ request@2.16.6 │ ├── aws-sign@0.2.0 │ └── cookies@0.3.8 ├─┬ compute-cluster@0.0.6 │ └─┬ vows@0.6.0 │ └── eyes@0.1.8 ├─┬ connect@1.7.2 │ ├── mime@1.2.11 │ └── qs@1.2.2 ├── connect-cachify@0.0.15 ├─┬ connect-fonts@0.0.11 │ ├── filed@0.1.0 │ ├── mime@1.2.9 │ ├─┬ node-font-face-...@0.1.1 │ │ └─┬ ua-parser@0.2.4 │ │ └── yamlparser@0.0.2 │ ├─┬ oppressor@0.0.1 │ │ ├── negotiator@0.2.8 │ │ ├── response-stream@0.0.0 │ │ └── through@0.1.4 │ └── tmp@0.0.16 ├── connect-fonts-feurasans@0.0.3 ├── connect-fonts-opensans@0.0.5 ├── connect-logger-statsd@0.0.1 ├─┬ convict@0.4.1 │ ├── moment@1.7.2 │ ├─┬ optimist@0.5.0 │ │ └── wordwrap@0.0.2 │ └── validator@0.4.24 ├─┬ cover@0.2.9 │ ├─┬ cli-table@0.0.2 │ │ └── colors@0.3.0 │ ├── underscore@1.2.4 │ └── underscore.string@2.0.0 ├── ejs@0.8.4 ├── etagify@0.0.2 ├─┬ express@2.5.0 │ ├── mime@1.2.11 │ ├── mkdirp@0.0.7 │ └── qs@1.2.2 ├── gobbledygook@0.0.3 ├── hood@0.2.1 ├── htmlparser@1.7.6 ├─┬ i18n-abide@0.0.14 │ ├── async@0.1.22 │ ├─┬ jsxgettext@0.1.7 │ │ ├─┬ escodegen@0.0.23 │ │ │ ├── estraverse@0.0.4 │ │ │ └─┬ source-map@0.1.38 │ │ │ └── amdefine@0.1.0
  • 74. Questions? © 2014 François Marier <francois@debian.org> This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 License.