Outsourcing your webapp maintenance to Debian

594 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 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
594
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Outsourcing your webapp maintenance to Debian

  1. 1. #!/bin/sh ##### Outsourcing your webapp maintenance to Debian # by Francois Marier <francois@debian.org> # apt-get update apt-get -y upgrade
  2. 2. dependencies in webapps
  3. 3. dependencies in webapps case study
  4. 4. dependencies in webapps case study approach
  5. 5. dependencies in webapps case study approach results
  6. 6. dependencies in webapps case study discussion approach results
  7. 7. external depencies in web applications
  8. 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. 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. 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. 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. 12. not a new problem
  13. 13. c/c++ dynamic linking
  14. 14. shared library instead of bundling
  15. 15. fix libbroken once
  16. 16. fix libbroken once maintainer uploads the new upstream version
  17. 17. fix libbroken once maintainer uploads the new upstream version security team patches the stable package
  18. 18. How to leverage this work in our webapps?
  19. 19. libravatar.org
  20. 20. libravatar.org
  21. 21. delivering (federated) avatars to third-party websites
  22. 22. www
  23. 23. www cdn1 cdn2 cdn4 cdn5
  24. 24. www cdn1 cdn2 cdn4 cdn5
  25. 25. www cdn1 cdn2 cdn4 cdn5
  26. 26. www cdn1 cdn2 cdn4 cdn5
  27. 27. www cdn1 cdn2 cdn4 cdn5
  28. 28. www cdn1 cdn2 yours? cdn4 cdn5
  29. 29. Francois@FMARIER.ORG
  30. 30. francois@fmarier.org
  31. 31. 0110e86fdb31486c22dd381326d99de9
  32. 32. http://gravatar.com/avatar/0110e86...
  33. 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. 34. http://fmarier.org/avatar/0110e86...
  35. 35. http://cdn.libravatar.org/avatar/ https://seccdn.libravatar.org/avatar/
  36. 36. a pretty simple web application
  37. 37. guidelines
  38. 38. guidelines 1. only use Python libraries that are packaged for Debian
  39. 39. guidelines 1. 2. only use Python libraries that are packaged for Debian only use the version from the latest Debian release
  40. 40. libravatar*.deb
  41. 41. “upstream” makefile build:
  42. 42. “upstream” makefile build: $(MINIFY) $(COMPRESS) mofiles
  43. 43. “upstream” makefile build: $(MINIFY) $(COMPRESS) mofiles ... test:
  44. 44. “upstream” makefile build: $(MINIFY) $(COMPRESS) mofiles ... test: pep8 pyflakes pylint unittests ...
  45. 45. libravatar.deb libravatar-www.deb libravatar-cdn.deb libravatar-seccdn.deb libravatar-cdn-common.deb libravatar-common.deb ...
  46. 46. reprepro
  47. 47. fabric
  48. 48. keeping mirrors up to date apt-get update apt-get upgrade
  49. 49. How did it go?
  50. 50. limited choice of libraries
  51. 51. python-gearman.libgearman python-gearman
  52. 52. $ apt-cache search ^python- | grep ^python | wc -l 2248 $ apt-cache search ^python3- | grep ^python | wc -l 656
  53. 53. cannot use the latest features
  54. 54. Libravatar is a very low-maintainance service
  55. 55. Problems I ran into
  56. 56. optimizing for sysadmins instead of developers
  57. 57. non-minified jQuery
  58. 58. cannot easily use unattended-upgrades
  59. 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. 60. security updates not always timely in Debian
  61. 61. if you notice...
  62. 62. if you notice... you can help out with backporting or testing!
  63. 63. if you don't notice...
  64. 64. if you don't notice... better late than never!
  65. 65. www
  66. 66. Is it realistic?
  67. 67. django system libraries deb packaging
  68. 68. What would be a good fit?
  69. 69. not your full-time job
  70. 70. not your full-time job uses a mature framework
  71. 71. e.g. side project
  72. 72. e.g. consulting company
  73. 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. 74. Questions? © 2014 François Marier <francois@debian.org> This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 License.

×