SlideShare a Scribd company logo
1 of 31
Download to read offline
Using NixOS for declarative deployment and
testing
Sander van der Burg Eelco Dolstra
Delft University of Technology, EEMCS,
Department of Software Technology
February 5, 2010
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Linux distributions
There are a wide range of Linux distributions available, each
having diļ¬€erent properties and goals.
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Software deployment
Software deployment
All of the activities that make a software system available for use
Carzaninga et al.
Activities
Install a Linux distribution with some desired packages
Adapt/tweak conļ¬guration ļ¬les
Install custom pieces of software
Upgrade a system
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Deployment scenario
Single installation
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Deployment scenario
Multiple installations
Machines are connected and dependent on each other
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Deployment scenario
Virtual machines
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Challenges
Deploying a single machine is hard
Takes some eļ¬€ort
Upgrading may break the system
Deploying a distributed environment is even harder
Machines may be dependent on each other, e.g. web
application using a database
While upgrading, downtimes may occur
Deploying (a network of) virtual machines is also hard
Takes quite some eļ¬€ort to perform system integration tests
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
NixOS
A GNU/Linux distribution using the Nix package manager
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Nix store
Main idea: store all packages
in isolation from each other:
/nix/store/rpdqxnilb0cg...
-firefox-3.5.4
Paths contain a 160-bit
cryptographic hash of all
inputs used to build the
package:
Sources
Libraries
Compilers
Build scripts
. . .
/nix/store
l9w6773m1msy...-openssh-4.6p1
bin
ssh
sbin
sshd
smkabrbibqv7...-openssl-0.9.8e
lib
libssl.so.0.9.8
c6jbqm2mc0a7...-zlib-1.2.3
lib
libz.so.1.2.3
im276akmsrhv...-glibc-2.5
lib
libc.so.6
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Nix expressions
openssh.nix
{ stdenv, fetchurl, openssl, zlib }:
stdenv.mkDerivation {
name = "openssh-4.6p1";
src = fetchurl {
url = http://.../openssh-4.6p1.tar.gz;
sha256 = "0fpjlr3bfind0y94bk442x2p...";
};
buildCommand = ā€™ā€™
tar xjf $src
./configure --prefix=$out --with-openssl=${openssl}
make; make install
ā€™ā€™;
}
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Nix expressions
all-packages.nix
openssh = import ../tools/networking/openssh {
inherit fetchurl stdenv openssl zlib;
};
openssl = import ../development/libraries/openssl {
inherit fetchurl stdenv perl;
};
stdenv = ...;
openssl = ...;
zlib = ...;
perl = ...;
nix-env -f all-packages.nix -iA openssh
Produces a /nix/store/l9w6773m1msy...-openssh-4.6p1
package in the Nix store.
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
NixOS
In NixOS, all packages including the Linux kernel and
conļ¬guration ļ¬les are managed by Nix.
NixOS does not have directories such as: /lib and /usr
NixOS has a minimal /bin and /etc
But NixOS is more then just a distribution managed by Nix
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
NixOS conļ¬guration
/etc/nixos/configuration.nix
{pkgs, ...}:
{
boot.loader.grub.device = "/dev/sda";
fileSystems = [ { mountPoint = "/"; device = "/dev/sda2"; } ];
swapDevices = [ { device = "/dev/sda1"; } ];
services = {
openssh.enable = true;
xserver = {
enable = true;
desktopManager.kde4.enable = true;
};
};
environment.systemPackages = [ pkgs.mc pkgs.firefox ];
}
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
NixOS conļ¬guration
nixos-rebuild switch
Nix package manager builds a complete system conļ¬guration
Includes all packages and generates all conļ¬guration ļ¬les, e.g.
OpenSSH conļ¬guration
Upgrades are (almost) atomic
Components are stored safely next to each other, due to hashes
No ļ¬les are automatically removed or overwritten
Users can switch to older generations of system conļ¬gurations
not garbage collected yet
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
NixOS bootloader
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Distributed deployment
NixOS has good properties for deployment of a single system
Can we extend these properties to distributed systems?
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Motivating example: Trac
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Motivating example: Trac
Trac can be deployed in a distributed environment:
Subversion server
Database server
Web server
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Distributed NixOS conļ¬guration
network.nix
{ storage = {pkgs, ...}:
{
services.nfsKernel.server.enable = true; ...
};
postgresql = {pkgs, ...}:
{
services.postgresql.enable = true; ...
};
webserver = {pkgs, ...}:
{
fileSystems = [
{ mountPoint = "/repos"; device = "storage:/repos"; } ];
services.httpd.enable = true;
services.httpd.extraSubservices = [ { serviceType = "trac"; } ]; ...
};
...
}
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Distributed deployment
nixos-deploy-network network.nix
Build system conļ¬gurations by the Nix package manager
Transfer complete system and all dependencies to target
machines in the network
Eļ¬ƒcient: only missing store paths must be transferred
Safe: Existing conļ¬guration is not aļ¬€ected, because no ļ¬les
are overwritten or removed
Activate new system conļ¬guration
In case of a failure, roll back all conļ¬gurations
Relatively cheap operation, because old conļ¬guration is stored
next to new conļ¬guration
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Virtualization
nixos-build-vms network.nix; ./result/bin/nixos-run-vms
Builds a network of QEMU-KVM virtual machines closely
resembling the network of NixOS conļ¬gurations
We donā€™t create disk images
The VM mounts the Nix store of the host system using
SMB/CIFS
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Virtualization
nixos-build-vms network.nix; ./result/bin/nixos-run-vms
Possible because complete conļ¬guration is in the Nix store
This is eļ¬ƒcient and safe due to the nature of the Nix store
Components with same hash codes are shared between VMs
The hash part of the name isolates components from each
other
Diļ¬ƒcult to do for imperative Linux distributions, which have
/etc, /usr, /lib directories.
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Virtualization
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Testing
trac.nix
testScript = ā€™ā€™
$postgresqlā†’waitForJob("postgresql");
$postgresqlā†’mustSucceed("createdb trac");
$webserverā†’mustSucceed("mkdir -p /repos/trac");
$webserverā†’mustSucceed("svnadmin create /repos/trac");
$webserverā†’waitForFile("/var/trac");
$webserverā†’mustSucceed("mkdir -p /var/trac/projects/test");
$webserverā†’mustSucceed("trac-admin /var/trac/projects/test initenv ".
"Test postgres://root@postgresql/trac svn /repos/trac");
$clientā†’waitForX;
$clientā†’execute("konqueror http://webserver/projects/test &");
$clientā†’waitForWindow(qr/Test.*Konqueror/);
$clientā†’screenshot("screen");
ā€™ā€™;
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Testing
nix-build tests.nix -A trac
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Experience
Distributed deployment of a Hydra build environment
Continuous integration and testing of NixOS
NixOS installer
OpenSSH
Trac
NFS server
Continuous integration and testing of various GNU projects
Install NixOS system with bleeding edge glibc
Other free software projects
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Related work
Examples:
Cfengine
Stork
Related work uses convergent models
NixOS models are congruent
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Conclusion
NixOS. A GNU/Linux distribution used to reliably deploy a
complete system from a declarative speciļ¬cation
nixos-deploy-network. Eļ¬ƒciently/Reliably deploy a
network of NixOS machines
nixos-build-vms. Eļ¬ƒciently generate a network of cheap
NixOS virtual machines instances
NixOS test driver. Perform distributed test cases in a network
of NixOS virtual machines
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
References
NixOS website: http://nixos.org
Nix. A purely functional package manager
Nixpkgs. Nix packages collection
NixOS. Nix based GNU/Linux distribution
Hydra. Nix based continuous build and integration server
Disnix. Nix based distributed service deployment
Software available under free and open-source licenses
(LGPL/X11)
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
References
Nix package manager can be used on any Linux system,
FreeBSD, OpenSolaris, Darwin and Cygwin
Virtualization features can be used on any Linux system
running the Nix package manager and KVM.
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
Questions
Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing

More Related Content

What's hot

What's hot (20)

nix-processmgmt: An experimental Nix-based process manager-agnostic framework
nix-processmgmt: An experimental Nix-based process manager-agnostic frameworknix-processmgmt: An experimental Nix-based process manager-agnostic framework
nix-processmgmt: An experimental Nix-based process manager-agnostic framework
Ā 
DockerVC Hackathon Presentation
DockerVC Hackathon PresentationDockerVC Hackathon Presentation
DockerVC Hackathon Presentation
Ā 
Hydra: Continuous Integration and Testing for Demanding People: The Basics
Hydra: Continuous Integration and Testing for Demanding People: The BasicsHydra: Continuous Integration and Testing for Demanding People: The Basics
Hydra: Continuous Integration and Testing for Demanding People: The Basics
Ā 
"Containers do not contain"
"Containers do not contain""Containers do not contain"
"Containers do not contain"
Ā 
Docker Security: Are Your Containers Tightly Secured to the Ship?
Docker Security: Are Your Containers Tightly Secured to the Ship?Docker Security: Are Your Containers Tightly Secured to the Ship?
Docker Security: Are Your Containers Tightly Secured to the Ship?
Ā 
Docker: the road ahead
Docker: the road aheadDocker: the road ahead
Docker: the road ahead
Ā 
Ryan Koop's Docker Chicago Meetup Demo March 12 2014
Ryan Koop's Docker Chicago Meetup Demo March 12 2014Ryan Koop's Docker Chicago Meetup Demo March 12 2014
Ryan Koop's Docker Chicago Meetup Demo March 12 2014
Ā 
Raspberry pi x kubernetes x tensorflow
Raspberry pi x kubernetes x tensorflowRaspberry pi x kubernetes x tensorflow
Raspberry pi x kubernetes x tensorflow
Ā 
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQIntroduction to Docker and all things containers, Docker Meetup at RelateIQ
Introduction to Docker and all things containers, Docker Meetup at RelateIQ
Ā 
The State of Rootless Containers
The State of Rootless ContainersThe State of Rootless Containers
The State of Rootless Containers
Ā 
PaaSTA: Running applications at Yelp
PaaSTA: Running applications at YelpPaaSTA: Running applications at Yelp
PaaSTA: Running applications at Yelp
Ā 
Security in a containerized world - Jessie Frazelle
Security in a containerized world - Jessie FrazelleSecurity in a containerized world - Jessie Frazelle
Security in a containerized world - Jessie Frazelle
Ā 
Rootless Containers & Unresolved issues
Rootless Containers & Unresolved issuesRootless Containers & Unresolved issues
Rootless Containers & Unresolved issues
Ā 
[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020
Ā 
Find the Hacker
Find the HackerFind the Hacker
Find the Hacker
Ā 
Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...
Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...
Containers, Docker, and Security: State Of The Union (LinuxCon and ContainerC...
Ā 
A Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersA Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things Containers
Ā 
Why Docker? Dayton PHP, April 2017
Why Docker? Dayton PHP, April 2017Why Docker? Dayton PHP, April 2017
Why Docker? Dayton PHP, April 2017
Ā 
Docker Networking in OpenStack: What you need to know now
Docker Networking in OpenStack: What you need to know nowDocker Networking in OpenStack: What you need to know now
Docker Networking in OpenStack: What you need to know now
Ā 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
Ā 

Similar to Using NixOS for declarative deployment and testing

OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...
OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...
OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...
OpenNebula Project
Ā 
final proposal-Xen based Hypervisor in a Box
final proposal-Xen based Hypervisor in a Boxfinal proposal-Xen based Hypervisor in a Box
final proposal-Xen based Hypervisor in a Box
Paramkusham Shruthi
Ā 

Similar to Using NixOS for declarative deployment and testing (20)

Deploying .NET applications with the Nix package manager
Deploying .NET applications with the Nix package managerDeploying .NET applications with the Nix package manager
Deploying .NET applications with the Nix package manager
Ā 
A Reference Architecture for Distributed Software Deployment
A Reference Architecture for Distributed Software DeploymentA Reference Architecture for Distributed Software Deployment
A Reference Architecture for Distributed Software Deployment
Ā 
Techniques and lessons for improvement of deployment processes
Techniques and lessons for improvement of deployment processesTechniques and lessons for improvement of deployment processes
Techniques and lessons for improvement of deployment processes
Ā 
Automating Mendix application deployments with Nix
Automating Mendix application deployments with NixAutomating Mendix application deployments with Nix
Automating Mendix application deployments with Nix
Ā 
Docker dDessi november 2015
Docker dDessi november 2015Docker dDessi november 2015
Docker dDessi november 2015
Ā 
OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...
OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...
OpenNebulaConf 2016 - The Lightweight Approach to Build Cloud CyberSecurity E...
Ā 
The Future of Security and Productivity in Our Newly Remote World
The Future of Security and Productivity in Our Newly Remote WorldThe Future of Security and Productivity in Our Newly Remote World
The Future of Security and Productivity in Our Newly Remote World
Ā 
final proposal-Xen based Hypervisor in a Box
final proposal-Xen based Hypervisor in a Boxfinal proposal-Xen based Hypervisor in a Box
final proposal-Xen based Hypervisor in a Box
Ā 
NCS: NEtwork Control System Hands-on Labs
NCS:  NEtwork Control System Hands-on Labs NCS:  NEtwork Control System Hands-on Labs
NCS: NEtwork Control System Hands-on Labs
Ā 
Why everyone is excited about Docker (and you should too...) - Carlo Bonamic...
Why everyone is excited about Docker (and you should too...) -  Carlo Bonamic...Why everyone is excited about Docker (and you should too...) -  Carlo Bonamic...
Why everyone is excited about Docker (and you should too...) - Carlo Bonamic...
Ā 
codemotion-docker-2014
codemotion-docker-2014codemotion-docker-2014
codemotion-docker-2014
Ā 
2015 DockerCon Using Docker in production at bity.com
2015 DockerCon Using Docker in production at bity.com2015 DockerCon Using Docker in production at bity.com
2015 DockerCon Using Docker in production at bity.com
Ā 
DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline  DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline
Ā 
Webinar: Development Swarm Cluster with Docker Compose V3
Webinar: Development Swarm Cluster with Docker Compose V3Webinar: Development Swarm Cluster with Docker Compose V3
Webinar: Development Swarm Cluster with Docker Compose V3
Ā 
Docker on Mesos With OpenVNet (eng)
Docker on Mesos With OpenVNet (eng)Docker on Mesos With OpenVNet (eng)
Docker on Mesos With OpenVNet (eng)
Ā 
Introducing docker
Introducing dockerIntroducing docker
Introducing docker
Ā 
Development Swarm Cluster
Development Swarm ClusterDevelopment Swarm Cluster
Development Swarm Cluster
Ā 
Dysnomia: complementing Nix deployments with state deployment
Dysnomia: complementing Nix deployments with state deploymentDysnomia: complementing Nix deployments with state deployment
Dysnomia: complementing Nix deployments with state deployment
Ā 
Docker intro
Docker introDocker intro
Docker intro
Ā 
Docker Ecosystem on Azure
Docker Ecosystem on AzureDocker Ecosystem on Azure
Docker Ecosystem on Azure
Ā 

More from Sander van der Burg

More from Sander van der Burg (14)

The Monitoring Playground
The Monitoring PlaygroundThe Monitoring Playground
The Monitoring Playground
Ā 
A Reference Architecture for Distributed Software Deployment
A Reference Architecture for Distributed Software DeploymentA Reference Architecture for Distributed Software Deployment
A Reference Architecture for Distributed Software Deployment
Ā 
A Generic Approach for Deploying and Upgrading Mutable Software Components
A Generic Approach for Deploying and Upgrading Mutable Software ComponentsA Generic Approach for Deploying and Upgrading Mutable Software Components
A Generic Approach for Deploying and Upgrading Mutable Software Components
Ā 
Deploying .NET services with Disnix
Deploying .NET services with DisnixDeploying .NET services with Disnix
Deploying .NET services with Disnix
Ā 
A Self-Adaptive Deployment Framework for Service-Oriented Systems
A Self-Adaptive Deployment Framework for Service-Oriented SystemsA Self-Adaptive Deployment Framework for Service-Oriented Systems
A Self-Adaptive Deployment Framework for Service-Oriented Systems
Ā 
Pull Deployment of Services
Pull Deployment of ServicesPull Deployment of Services
Pull Deployment of Services
Ā 
Disnix: A toolset for distributed deployment
Disnix: A toolset for distributed deploymentDisnix: A toolset for distributed deployment
Disnix: A toolset for distributed deployment
Ā 
Automated Deployment of Hetergeneous Service-Oriented System
Automated Deployment of Hetergeneous Service-Oriented SystemAutomated Deployment of Hetergeneous Service-Oriented System
Automated Deployment of Hetergeneous Service-Oriented System
Ā 
Pull Deployment of Services: Introduction, Progress and Challenges
Pull Deployment of Services: Introduction, Progress and ChallengesPull Deployment of Services: Introduction, Progress and Challenges
Pull Deployment of Services: Introduction, Progress and Challenges
Ā 
Software Deployment in a Dynamic Cloud
Software Deployment in a Dynamic CloudSoftware Deployment in a Dynamic Cloud
Software Deployment in a Dynamic Cloud
Ā 
Atomic Upgrading of Distributed Systems
Atomic Upgrading of Distributed SystemsAtomic Upgrading of Distributed Systems
Atomic Upgrading of Distributed Systems
Ā 
Model-driven Distributed Software Deployment
Model-driven Distributed Software DeploymentModel-driven Distributed Software Deployment
Model-driven Distributed Software Deployment
Ā 
Model-driven Distributed Software Deployment
Model-driven Distributed Software DeploymentModel-driven Distributed Software Deployment
Model-driven Distributed Software Deployment
Ā 
Model-driven Distributed Software Deployment laymen's talk
Model-driven Distributed Software Deployment laymen's talkModel-driven Distributed Software Deployment laymen's talk
Model-driven Distributed Software Deployment laymen's talk
Ā 

Recently uploaded

Formation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disksFormation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disks
SĆ©rgio Sacani
Ā 
Pests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdfPests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdf
PirithiRaju
Ā 
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune WaterworldsBiogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
SĆ©rgio Sacani
Ā 
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdfPests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
PirithiRaju
Ā 
Pests of mustard_Identification_Management_Dr.UPR.pdf
Pests of mustard_Identification_Management_Dr.UPR.pdfPests of mustard_Identification_Management_Dr.UPR.pdf
Pests of mustard_Identification_Management_Dr.UPR.pdf
PirithiRaju
Ā 

Recently uploaded (20)

STS-UNIT 4 CLIMATE CHANGE POWERPOINT PRESENTATION
STS-UNIT 4 CLIMATE CHANGE POWERPOINT PRESENTATIONSTS-UNIT 4 CLIMATE CHANGE POWERPOINT PRESENTATION
STS-UNIT 4 CLIMATE CHANGE POWERPOINT PRESENTATION
Ā 
High Profile šŸ” 8250077686 šŸ“ž Call Girls Service in GTB NagaršŸ‘
High Profile šŸ” 8250077686 šŸ“ž Call Girls Service in GTB NagaršŸ‘High Profile šŸ” 8250077686 šŸ“ž Call Girls Service in GTB NagaršŸ‘
High Profile šŸ” 8250077686 šŸ“ž Call Girls Service in GTB NagaršŸ‘
Ā 
Feature-aligned N-BEATS with Sinkhorn divergence (ICLR '24)
Feature-aligned N-BEATS with Sinkhorn divergence (ICLR '24)Feature-aligned N-BEATS with Sinkhorn divergence (ICLR '24)
Feature-aligned N-BEATS with Sinkhorn divergence (ICLR '24)
Ā 
Formation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disksFormation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disks
Ā 
GBSN - Microbiology (Unit 3)
GBSN - Microbiology (Unit 3)GBSN - Microbiology (Unit 3)
GBSN - Microbiology (Unit 3)
Ā 
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts ServiceJustdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
Ā 
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
Ā 
Forensic Biology & Its biological significance.pdf
Forensic Biology & Its biological significance.pdfForensic Biology & Its biological significance.pdf
Forensic Biology & Its biological significance.pdf
Ā 
Connaught Place, Delhi Call girls :8448380779 Model Escorts | 100% verified
Connaught Place, Delhi Call girls :8448380779 Model Escorts | 100% verifiedConnaught Place, Delhi Call girls :8448380779 Model Escorts | 100% verified
Connaught Place, Delhi Call girls :8448380779 Model Escorts | 100% verified
Ā 
Pests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdfPests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdf
Ā 
9999266834 Call Girls In Noida Sector 22 (Delhi) Call Girl Service
9999266834 Call Girls In Noida Sector 22 (Delhi) Call Girl Service9999266834 Call Girls In Noida Sector 22 (Delhi) Call Girl Service
9999266834 Call Girls In Noida Sector 22 (Delhi) Call Girl Service
Ā 
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune WaterworldsBiogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Ā 
Zoology 5th semester notes( Sumit_yadav).pdf
Zoology 5th semester notes( Sumit_yadav).pdfZoology 5th semester notes( Sumit_yadav).pdf
Zoology 5th semester notes( Sumit_yadav).pdf
Ā 
COMPUTING ANTI-DERIVATIVES (Integration by SUBSTITUTION)
COMPUTING ANTI-DERIVATIVES(Integration by SUBSTITUTION)COMPUTING ANTI-DERIVATIVES(Integration by SUBSTITUTION)
COMPUTING ANTI-DERIVATIVES (Integration by SUBSTITUTION)
Ā 
Pulmonary drug delivery system M.pharm -2nd sem P'ceutics
Pulmonary drug delivery system M.pharm -2nd sem P'ceuticsPulmonary drug delivery system M.pharm -2nd sem P'ceutics
Pulmonary drug delivery system M.pharm -2nd sem P'ceutics
Ā 
SAMASTIPUR CALL GIRL 7857803690 LOW PRICE ESCORT SERVICE
SAMASTIPUR CALL GIRL 7857803690  LOW PRICE  ESCORT SERVICESAMASTIPUR CALL GIRL 7857803690  LOW PRICE  ESCORT SERVICE
SAMASTIPUR CALL GIRL 7857803690 LOW PRICE ESCORT SERVICE
Ā 
GBSN - Biochemistry (Unit 1)
GBSN - Biochemistry (Unit 1)GBSN - Biochemistry (Unit 1)
GBSN - Biochemistry (Unit 1)
Ā 
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdfPests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Ā 
Kochi ā¤CALL GIRL 84099*07087 ā¤CALL GIRLS IN Kochi ESCORT SERVICEā¤CALL GIRL
Kochi ā¤CALL GIRL 84099*07087 ā¤CALL GIRLS IN Kochi ESCORT SERVICEā¤CALL GIRLKochi ā¤CALL GIRL 84099*07087 ā¤CALL GIRLS IN Kochi ESCORT SERVICEā¤CALL GIRL
Kochi ā¤CALL GIRL 84099*07087 ā¤CALL GIRLS IN Kochi ESCORT SERVICEā¤CALL GIRL
Ā 
Pests of mustard_Identification_Management_Dr.UPR.pdf
Pests of mustard_Identification_Management_Dr.UPR.pdfPests of mustard_Identification_Management_Dr.UPR.pdf
Pests of mustard_Identification_Management_Dr.UPR.pdf
Ā 

Using NixOS for declarative deployment and testing

  • 1. Using NixOS for declarative deployment and testing Sander van der Burg Eelco Dolstra Delft University of Technology, EEMCS, Department of Software Technology February 5, 2010 Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 2. Linux distributions There are a wide range of Linux distributions available, each having diļ¬€erent properties and goals. Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 3. Software deployment Software deployment All of the activities that make a software system available for use Carzaninga et al. Activities Install a Linux distribution with some desired packages Adapt/tweak conļ¬guration ļ¬les Install custom pieces of software Upgrade a system Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 4. Deployment scenario Single installation Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 5. Deployment scenario Multiple installations Machines are connected and dependent on each other Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 6. Deployment scenario Virtual machines Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 7. Challenges Deploying a single machine is hard Takes some eļ¬€ort Upgrading may break the system Deploying a distributed environment is even harder Machines may be dependent on each other, e.g. web application using a database While upgrading, downtimes may occur Deploying (a network of) virtual machines is also hard Takes quite some eļ¬€ort to perform system integration tests Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 8. NixOS A GNU/Linux distribution using the Nix package manager Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 9. Nix store Main idea: store all packages in isolation from each other: /nix/store/rpdqxnilb0cg... -firefox-3.5.4 Paths contain a 160-bit cryptographic hash of all inputs used to build the package: Sources Libraries Compilers Build scripts . . . /nix/store l9w6773m1msy...-openssh-4.6p1 bin ssh sbin sshd smkabrbibqv7...-openssl-0.9.8e lib libssl.so.0.9.8 c6jbqm2mc0a7...-zlib-1.2.3 lib libz.so.1.2.3 im276akmsrhv...-glibc-2.5 lib libc.so.6 Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 10. Nix expressions openssh.nix { stdenv, fetchurl, openssl, zlib }: stdenv.mkDerivation { name = "openssh-4.6p1"; src = fetchurl { url = http://.../openssh-4.6p1.tar.gz; sha256 = "0fpjlr3bfind0y94bk442x2p..."; }; buildCommand = ā€™ā€™ tar xjf $src ./configure --prefix=$out --with-openssl=${openssl} make; make install ā€™ā€™; } Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 11. Nix expressions all-packages.nix openssh = import ../tools/networking/openssh { inherit fetchurl stdenv openssl zlib; }; openssl = import ../development/libraries/openssl { inherit fetchurl stdenv perl; }; stdenv = ...; openssl = ...; zlib = ...; perl = ...; nix-env -f all-packages.nix -iA openssh Produces a /nix/store/l9w6773m1msy...-openssh-4.6p1 package in the Nix store. Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 12. NixOS In NixOS, all packages including the Linux kernel and conļ¬guration ļ¬les are managed by Nix. NixOS does not have directories such as: /lib and /usr NixOS has a minimal /bin and /etc But NixOS is more then just a distribution managed by Nix Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 13. NixOS conļ¬guration /etc/nixos/configuration.nix {pkgs, ...}: { boot.loader.grub.device = "/dev/sda"; fileSystems = [ { mountPoint = "/"; device = "/dev/sda2"; } ]; swapDevices = [ { device = "/dev/sda1"; } ]; services = { openssh.enable = true; xserver = { enable = true; desktopManager.kde4.enable = true; }; }; environment.systemPackages = [ pkgs.mc pkgs.firefox ]; } Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 14. NixOS conļ¬guration nixos-rebuild switch Nix package manager builds a complete system conļ¬guration Includes all packages and generates all conļ¬guration ļ¬les, e.g. OpenSSH conļ¬guration Upgrades are (almost) atomic Components are stored safely next to each other, due to hashes No ļ¬les are automatically removed or overwritten Users can switch to older generations of system conļ¬gurations not garbage collected yet Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 15. NixOS bootloader Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 16. Distributed deployment NixOS has good properties for deployment of a single system Can we extend these properties to distributed systems? Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 17. Motivating example: Trac Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 18. Motivating example: Trac Trac can be deployed in a distributed environment: Subversion server Database server Web server Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 19. Distributed NixOS conļ¬guration network.nix { storage = {pkgs, ...}: { services.nfsKernel.server.enable = true; ... }; postgresql = {pkgs, ...}: { services.postgresql.enable = true; ... }; webserver = {pkgs, ...}: { fileSystems = [ { mountPoint = "/repos"; device = "storage:/repos"; } ]; services.httpd.enable = true; services.httpd.extraSubservices = [ { serviceType = "trac"; } ]; ... }; ... } Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 20. Distributed deployment nixos-deploy-network network.nix Build system conļ¬gurations by the Nix package manager Transfer complete system and all dependencies to target machines in the network Eļ¬ƒcient: only missing store paths must be transferred Safe: Existing conļ¬guration is not aļ¬€ected, because no ļ¬les are overwritten or removed Activate new system conļ¬guration In case of a failure, roll back all conļ¬gurations Relatively cheap operation, because old conļ¬guration is stored next to new conļ¬guration Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 21. Virtualization nixos-build-vms network.nix; ./result/bin/nixos-run-vms Builds a network of QEMU-KVM virtual machines closely resembling the network of NixOS conļ¬gurations We donā€™t create disk images The VM mounts the Nix store of the host system using SMB/CIFS Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 22. Virtualization nixos-build-vms network.nix; ./result/bin/nixos-run-vms Possible because complete conļ¬guration is in the Nix store This is eļ¬ƒcient and safe due to the nature of the Nix store Components with same hash codes are shared between VMs The hash part of the name isolates components from each other Diļ¬ƒcult to do for imperative Linux distributions, which have /etc, /usr, /lib directories. Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 23. Virtualization Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 24. Testing trac.nix testScript = ā€™ā€™ $postgresqlā†’waitForJob("postgresql"); $postgresqlā†’mustSucceed("createdb trac"); $webserverā†’mustSucceed("mkdir -p /repos/trac"); $webserverā†’mustSucceed("svnadmin create /repos/trac"); $webserverā†’waitForFile("/var/trac"); $webserverā†’mustSucceed("mkdir -p /var/trac/projects/test"); $webserverā†’mustSucceed("trac-admin /var/trac/projects/test initenv ". "Test postgres://root@postgresql/trac svn /repos/trac"); $clientā†’waitForX; $clientā†’execute("konqueror http://webserver/projects/test &"); $clientā†’waitForWindow(qr/Test.*Konqueror/); $clientā†’screenshot("screen"); ā€™ā€™; Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 25. Testing nix-build tests.nix -A trac Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 26. Experience Distributed deployment of a Hydra build environment Continuous integration and testing of NixOS NixOS installer OpenSSH Trac NFS server Continuous integration and testing of various GNU projects Install NixOS system with bleeding edge glibc Other free software projects Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 27. Related work Examples: Cfengine Stork Related work uses convergent models NixOS models are congruent Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 28. Conclusion NixOS. A GNU/Linux distribution used to reliably deploy a complete system from a declarative speciļ¬cation nixos-deploy-network. Eļ¬ƒciently/Reliably deploy a network of NixOS machines nixos-build-vms. Eļ¬ƒciently generate a network of cheap NixOS virtual machines instances NixOS test driver. Perform distributed test cases in a network of NixOS virtual machines Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 29. References NixOS website: http://nixos.org Nix. A purely functional package manager Nixpkgs. Nix packages collection NixOS. Nix based GNU/Linux distribution Hydra. Nix based continuous build and integration server Disnix. Nix based distributed service deployment Software available under free and open-source licenses (LGPL/X11) Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 30. References Nix package manager can be used on any Linux system, FreeBSD, OpenSolaris, Darwin and Cygwin Virtualization features can be used on any Linux system running the Nix package manager and KVM. Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing
  • 31. Questions Sander van der Burg, Eelco Dolstra Using NixOS for declarative deployment and testing