0% found this document useful (0 votes)
105 views43 pages

Autonomous App Delivery Rootconf

This document discusses autonomous application delivery using frameworks like Pkgsrc, OpenPkg, and Nix. These frameworks allow applications to be decoupled from the underlying operating system and its package dependencies. This provides benefits like allowing applications to upgrade independently of the OS, isolate from library vulnerabilities, and deploy across multiple platforms easily. The document recommends Pkgsrc as a good option, describing how it works and how easy it is to get started using it.
Copyright
© Attribution ShareAlike (BY-SA)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
105 views43 pages

Autonomous App Delivery Rootconf

This document discusses autonomous application delivery using frameworks like Pkgsrc, OpenPkg, and Nix. These frameworks allow applications to be decoupled from the underlying operating system and its package dependencies. This provides benefits like allowing applications to upgrade independently of the OS, isolate from library vulnerabilities, and deploy across multiple platforms easily. The document recommends Pkgsrc as a good option, describing how it works and how easy it is to get started using it.
Copyright
© Attribution ShareAlike (BY-SA)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 43

AUTONOMOUS APPLICATION DELIVERY

FASTER MORE RELIABLE


RELEASE MANAGEMENT
LETS CLARIFY

WHAT IS AUTONOMOUS APPLICATION DELIVERY?

Your OS provides a set of features

Libraries, System Calls, Packages, etc.

Your (internally developed) application requires a set of


features

Libraries, System Calls, Packages, etc.

Decouple your application from the OS for more flexibility


MAKE SENSE
NOW?
ABOUT ME

[email protected]
A BIT ABOUT ME [email protected]

G. CLIFFORD WILLIAMS
G. is for George, and I loathe that name. I go by Cliff

married: 0 kids, 2 dogs, 4 nieces, 3 nephews

Highly opinionated // practically agnostic

My day job:

putting things in the cloud

deploying software all day

building CI/CD pipelines

automating all the things


ENOUGH ABOUT
ME
UNDERSTANDING
THE PROBLEM
YOUR APPLICATION
OPERATING SYSTEM
YOUR APPLICATION
OPERATING SYSTEM
IF ONLY IT WERE
THAT SIMPLE
KERNEL
LIB C

KERNEL
USERLAND UTILITIES
LIB C

KERNEL
PACKAGES

USERLAND UTILITIES
LIB C

KERNEL
YOUR APPLICATION
PACKAGES

USERLAND UTILITIES
LIB C

KERNEL
YOUR APPLICATION
OPERATING SYSTEM
YOUR APPLICATION
OPERATING SYSTEM YOUR APPLICATION
OPERATING SYSTEM
WHAT HAPPENS
WHEN YOU UPGRADE?
WHAT HAPPENS WHEN YOU UPGRADE?

AFTER AN UPGRADE OF THE OS OR PACKAGES

Maybe your application breaks

rework your code

backtrack/downgrade

Maybe its fine


WHY WOULD MY APPLICATION BREAK AFTER AN UPGRADE?

Different versions of libraries

Security fix forcing an incompatible application or library


change

General Deprecations
WHAT HAPPENS WHEN YOU
NEED SOMETHING DIFFERENT,
NEWER, OR THAT CONFLICTS?
DIFFERENT OR NEWER

Maybe theres a private repository you can add/use

Maybe you can download and compile it yourself

Maybe you can reach out to the package maintainer and


get them to bump the version
SOMETHING THAT CONFLICTS

Chroot / Containers

Environment Manager: VirtualEnv (python), RVM (Ruby),


${JAVA_HOME}, ${LUA_PATH}, etc.

Wait
AND WHAT ABOUT HOW
YOURE DEPLOYING YOUR
CODE?
WAYS TO DEPLOY

Ship a tarball and extract it

Package your app natively as an RPM, .DEB, .Pac, etc

Package your app as a runtime package: Ruby Gem, Lua


Rock, Python Egg, etc.

Use a Makefile, Maven, Ant, etc.

Use Puppet, Chef, Ansible, SaltStak, Tivoli, Bladelogic


THE PROBLEM STATEMENT

When you build your application on top of the facilities


provided by your Operating System you could be locking
yourself into an echo system that doesnt meet the needs
of your application and/or customers.
THE SOLUTION

Build your applications to be independent of the


underlying OS and its packages
KERNEL
LIB C

KERNEL
USERLAND UTILITIES
LIB C

KERNEL
SYSTEM PACKAGES APPLICATION DEPENDENCIES

USERLAND UTILITIES
LIB C

KERNEL
YOUR APPLICATION
SYSTEM PACKAGES APPLICATION DEPENDENCIES

USERLAND UTILITIES
LIB C

KERNEL
YOUR YOUR OTHER
APPLICATION APPLICATION
APPLICATION OTHER APPLICATION
SYSTEM PACKAGES DEPENDENCIES DEPENDENCIES
USERLAND UTILITIES
LIB C

KERNEL
HOW DOES THIS
HELP?
BENEFITS OF THIS APPROACH
Application Autonomy meaning you can upgrade your OS and Packages
without worrying about breaking dependencies for your application

You can create multiple application silos that contain conflicting libraries,
tools, etc.

Deployments can be standardized across multiple Operating Systems


making it easy to migrate from platform to platform

You can isolate exposure to security flaws in underlying libraries

The features of your application can develop at your pace not the pace of
your OSs package maintainers

You still have access to all of your system packages


SOUNDS GREAT! HOW
DO I GET STARTED?
HOW TO GET STARTED

FRAMEWORKS THAT ALLOW AUTONOMOUS APPLICATION DELIVERY

PkgSrc - https://www.pkgsrc.org

OpenPkg - https://www.openpkg.org

Nix - https://nixos.org/nix/
PKGSRC

WHY I PREFER PKGSRC


1700+ Packages

Your choice of binary or source builds or a mix of the two

Its easy to get setup

multiple PREFIXs allow for easy peer installations

Simple straightforward process to package your application

Easy to fork the repository and add the dependencies you need

Unprivileged operation
PKGSRC

PORTABILITY
FreeBSD MirOS
Darwin/MacOS Haiku
NetBSD
AIX
OpenBSD
QNX
DragonFlyBSD
HP-UX
Illumos / Nexenta /
SmartOS Linux

Minix Cygwin
OK SO WHATS IT
LOOK LIKE?
WHATS IT LOOK LIKE
#installing/bootstrapping pkgsrc

git clone https://github.com/jsonn/pkgsrc.git

cd pkgsrc/bootstrap

./bootstrap

#building a package

cd pkgsrc/devel/memcached

make install clean


QUESTIONS???

You might also like