talk: Add talk at Sage Days 77.

* talks/sage-days-77-2016: New directory.
This commit is contained in:
Andreas Enge 2016-04-05 15:15:01 +02:00
parent 984166211e
commit 570352a739
13 changed files with 697 additions and 0 deletions

View File

@ -0,0 +1,35 @@
% Copyright 2011, 2016 by Andreas Enge
% adapted from whale
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/licenses/LICENSE for more details.
\mode<presentation>
\definecolor{guixorange1}{RGB}{243,154,38}
\setbeamercolor*{structure}{fg=guixorange1}
\setbeamercolor*{palette primary}{use=structure,fg=white,bg=structure.fg}
\setbeamercolor*{palette secondary}{use=structure,fg=white,bg=structure.fg!75!black}
\setbeamercolor*{palette tertiary}{use=structure,fg=white,bg=structure.fg!50!black}
\setbeamercolor*{palette quaternary}{fg=white,bg=black}
\setbeamercolor*{sidebar}{use=structure,bg=structure.fg}
\setbeamercolor*{palette sidebar primary}{use=structure,fg=structure.fg!10}
\setbeamercolor*{palette sidebar secondary}{fg=white}
\setbeamercolor*{palette sidebar tertiary}{use=structure,fg=structure.fg!50}
\setbeamercolor*{palette sidebar quaternary}{fg=white}
\setbeamercolor {block body}{use=structure,bg=structure.fg!5}
\setbeamercolor*{titlelike}{parent=palette primary}
\setbeamercolor*{separation line}{}
\setbeamercolor*{fine separation line}{}
\mode
<all>

View File

@ -0,0 +1,50 @@
;; This is an operating system configuration template
;; for a "bare bones" setup, with no X11 display server.
(use-modules (gnu) (gnu system nss))
(use-service-modules desktop ssh)
(use-package-modules certs)
(operating-system
(host-name "bugis")
(timezone "Europe/Berlin")
(locale "de_DE.utf8")
;; Assuming /dev/sdX is the target hard disk, and "root" is
;; the label of the target root file system.
(bootloader (grub-configuration (device "/dev/sda")))
(mapped-devices (list (mapped-device
(source "/dev/sda2")
(target "home")
(type luks-device-mapping))))
(file-systems (cons* (file-system
(device "guixsd")
(title 'label)
(mount-point "/")
(type "ext4"))
(file-system
(device "/dev/mapper/home")
(title 'device)
(mount-point "/home")
(type "ext4"))
%base-file-systems))
;; This is where user accounts are specified. The "root"
;; account is implicit, and is initially created with the
;; empty password.
(users (cons* (user-account
(name "enge")
(comment "Enge")
(group "users")
(supplementary-groups '("audio" "video" "netdev"))
(home-directory "/home/enge"))
%base-user-accounts))
;; Globally-installed packages.
(packages (cons* nss-certs %base-packages))
(services (cons* (xfce-desktop-service)
%desktop-services))
(name-service-switch %mdns-host-lookup-nss))

View File

@ -0,0 +1,57 @@
;; This is an operating system configuration template
;; for a "bare bones" setup, with no X11 display server.
(use-modules (gnu) (gnu system nss))
(use-service-modules desktop ssh xorg)
(use-package-modules algebra xfce certs)
(operating-system
(host-name "bugis")
(timezone "Europe/Berlin")
(locale "en_US.utf8")
;; Assuming /dev/sdX is the target hard disk, and "root" is
;; the label of the target root file system.
(bootloader (grub-configuration (device "/dev/sda")))
(mapped-devices (list (mapped-device
(source "/dev/sda2")
(target "home")
(type luks-device-mapping))))
(file-systems (cons* (file-system
(device "guixsd")
(title 'label)
(mount-point "/")
(type "ext4"))
(file-system
(device "/dev/mapper/home")
(title 'device)
(mount-point "/home")
(type "ext4"))
%base-file-systems))
;; This is where user accounts are specified. The "root"
;; account is implicit, and is initially created with the
;; empty password.
(users (cons* (user-account
(name "enge")
(comment "Enge")
(group "users")
(supplementary-groups '("audio" "video" "netdev"))
(home-directory "/home/enge"))
%base-user-accounts))
;; Globally-installed packages.
(packages (cons* pari-gp nss-certs %base-packages))
(services
(cons* (xfce-desktop-service)
(modify-services %desktop-services
(slim-service-type config =>
(slim-configuration
(inherit config)
(auto-login? #t)
(default-user "enge")
(auto-login-session #~(string-append #$xfce4-session "/bin/startxfce4")))))))
(name-service-switch %mdns-host-lookup-nss))

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

View File

@ -0,0 +1,555 @@
\documentclass [t]{beamer}
\usepackage [T1]{fontenc}
\usepackage {ae,aecompl}
\usepackage [utf8]{inputenc}
\usepackage {graphicx}
\usepackage {url}
\usepackage {amsmath, amsfonts, amssymb}
\usepackage {booktabs}
\usepackage {tikz}
\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
\usepackage {color}
\definecolor {rot}{RGB}{226,0,38}
\definecolor {blau}{RGB}{10,50,80}
\definecolor {gruen}{RGB}{157,193,7}
\definecolor {orange}{RGB}{243,154,38}
\definecolor {gelb}{RGB}{254,205,27}
\usetheme {Boadilla}
\usecolortheme {guix}
\usefonttheme [onlymath]{serif}
\setbeamertemplate {navigation symbols}{}
% zeige Gesamtseitenzahl nicht an; outhertheme-infolines entnommen und modifiziert
\setbeamertemplate{footline}
{
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor~~(\insertshortinstitute)
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\insertframenumber{}\hspace*{2ex}
% \insertframenumber{} / \inserttotalframenumber\hspace*{2ex}
\end{beamercolorbox}}%
\vskip0pt%
}
\AtBeginSection[]
{
\begin{frame}
\frametitle{\inserttitle}
\tableofcontents[currentsection]
\end{frame}
\addtocounter {framenumber}{-1}
}
\begin{document}
\title [GNU Guix]{Packaging and deploying with GNU Guix and GuixSD}
\author {Andreas Enge}
\institute[INRIA Bordeaux]{LFANT project-team \\
INRIA Bordeaux--Sud-Ouest \\
\url {andreas.enge@inria.fr} \\
\url {http://www.math.u-bordeaux.fr/~aenge}}
\date [Sage Days 2016]{\color {gruen}Sage Days 77,
Cernay, 5 April 2016
}
\begin {frame}{}
\maketitle
\end {frame}
\setcounter {framenumber}{0}
\section* {Introduction}
\begin {frame}{Upgrades are difficult}
\includegraphics [width=11cm]{images/debian-upgrade-instructions.png}
\vfill
\tiny
\hfill \url {https://www.debian.org/releases/squeeze/amd64/release-notes/ch-upgrading.en.html}
\end {frame}
\begin {frame}{Upgrades are dangerous}
\includegraphics [width=11cm]{images/debian-upgrade-warning.png}
\vfill
\tiny
\hfill \url {https://wiki.debian.org/DebianPackageManagement}
\end {frame}
\begin{frame}[fragile]{Stateful system management is unpredictable}
\begin{overlayarea}{\textwidth}{8cm}
\begin{tikzpicture}[stylish/.style = {
draw=orange, very thick,
fill=white, text=black, text width=3.2cm,
rounded corners=2mm, minimum height=1.4cm,
text centered
}]
\matrix[row sep=6mm, column sep=1.5cm] {
\node(inita)[stylish]{state 0};
& \node(initb)[stylish]{state 0};
\\
\node<2->(state1a)[stylish]{state $1_a$};
& \node<2->(state1b)[stylish]{state $1_b$};
\\
\node<3->(state2a)[stylish]{state $2_a$};
& \node<3->(state2b)[stylish]{state $2_b$};
\\
\node<3->(state3a)[stylish]{state $3_a$};
& \node<3->(state3b)[stylish]{state $3_b$};
\\
};
\path[->, very thick]<2->
(inita) edge node[right]{\texttt{apt-get update}} (state1a);
\path[->, very thick]<3->
(state1a) edge node[right]{\textcolor {gruen}{\texttt{apt-get install foo}}} (state2a);
\path[->, very thick]<3->
(state2a) edge node[right]{\textcolor {blau}{\texttt{apt-get remove bar}}} (state3a);
\path[->, very thick]<2->
(initb) edge node[right]{\texttt{apt-get update}} (state1b);
\path[->, very thick]<3->
(state1b) edge node[right]{\textcolor {blau}{\texttt{apt-get remove bar}}} (state2b);
\path[->, very thick]<3->
(state2b) edge node[right]{\textcolor {gruen}{\texttt{apt-get install foo}}} (state3b);
\end{tikzpicture}
\end{overlayarea}
\begin{tikzpicture}[overlay]
\node<4>[rounded corners=4, text centered,
fill=orange, text width=3cm,
inner sep=5mm, opacity=.75, text opacity=1,
drop shadow={opacity=0.5}] at (5, 4) {
\textbf{\Huge{= ?}}
};
\end{tikzpicture}
\end{frame}
\begin {frame}{Too many cooks spoil the broth}
\includegraphics [width=11cm]{images/package-managers.png}
\vfill
\tiny
\hfill \url
{https://en.wikipedia.org/wiki/List_of_software_package_management_systems}
\end {frame}
\begin {frame}{Fashionable solution: Give up}
\includegraphics [width=10cm]{images/docker-security.png}
\end {frame}
\begin{frame}[plain]
\begin{tikzpicture}[remember picture, overlay]
\node [at=(current page.center), inner sep=0pt]
{\includegraphics[height=\paperheight]{images/hope-hero}};
\end{tikzpicture}
\end{frame}
\section {GNU Guix: Principles and package management}
\begin {frame}{Functional package management}
\begin {eqnarray*}
\text {pari-gp} & = & f_1 (\text {pari-2.7.5.tar.gz}, \text {readline},
\text {gcc-5}, \text {make}) \\
\pause
\text {readline} & = & f_2 (\text {readline-6.3.tar.gz}, \text {ncurses},
\text {gcc-5}, \text {make}) \\
\text {ncurses} & = & f_3 (\text {ncurses-6.0.tar.gz},
\text {gcc-5}, \text {make}) \\
\pause
\text {gcc-5} & = & f_4 (\text {gcc-5.3.0.tar.gz},
\text {gcc-4.9}, \text {make})
\end {eqnarray*}
\pause
\vspace {1cm}
Full \textcolor {blau}{directed acyclic graph} of dependencies is captured, \\
with a few \textcolor {rot}{bootstrap binaries} at the root.
\end {frame}
\begin{frame}[fragile]{The store}
\begin{tikzpicture}[tools/.style = {
draw=orange, very thick,
text width=35mm, minimum height=4cm,
text centered,
rounded corners=2mm
},
tool/.style = {
text width=3cm,
text centered
},
daemon/.style = {
rectangle, text width=50mm, text centered,
rounded corners=2mm, minimum height=15mm,
top color=orange,
bottom color=gelb
},
builders/.style = {
draw=orange, very thick, dashed,
text width=5cm,
rounded corners=2mm,
},
builder/.style = {
draw=orange, thick, rectangle,
rotate=90
}]
\matrix[row sep=3mm, column sep=1cm] {
\node(builders)[builders, text height=5cm]{}
node at (0, 2) {\large{\textbf{build processes}}}
node at (0, 1.5) {chroot, separate UIDs}
node[builder] at (-1,-0.5) {Guile, make, etc.}
node[builder] at ( 0,-0.5) {Guile, make, etc.}
node[builder] at ( 1,-0.5) {Guile, make, etc.}; &
\node(tools)[tools]{}
node at (0, 1) {\large{\textbf{Guile Scheme}}}
node[tool] at (0, 0) {\texttt{(guix packages)}}
node(client)[tool] at (0, -1) {\texttt{(guix store)}};
\\
\node(daemon)[daemon]{\large{\textbf{build daemon}}}; &
&
\\
};
\path[very thick, draw=orange]
(tools.south) edge [out=-90, in=0, ->] node[below, sloped]{RPC} (daemon.east);
\path[->, very thick, draw=orange]
(daemon) edge (builders);
\end{tikzpicture}
\end{frame}
\begin{frame}[fragile]{Package recipes}
\vspace {-5mm}
\scriptsize
\begin{verbatim}
(define-public pari-gp
(package
(name "pari-gp")
(version "2.7.5")
(source (origin
(method url-fetch)
(uri "http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-2.7.5.tar.gz")
(sha256 (base32 "0c8l83a0gjq73r9hndsrzkypwxvnnm4pxkkzbg6jm95m80nzwh11"))))
(build-system gnu-build-system)
(inputs `(("gmp" ,gmp)
("libx11" ,libx11)
("perl" ,perl)
("readline" ,readline)))
(arguments
'(#:make-flags '("gp")
#:test-target "dobench"
#:phases (modify-phases %standard-phases
(replace 'configure
(lambda* (#:key outputs #:allow-other-keys)
(system* "./Configure"
(string-append "--prefix=" (assoc-ref outputs "out"))))))))
(license license:gpl2+)
(home-page "http://pari.math.u-bordeaux.fr/")))
\end{verbatim}
\end{frame}
\begin {frame}{\texttt {guix graph --type=packages pari-gp}}
\includegraphics [width=12cm]{images/graph-parigp-packages.pdf}
\vfill
And gcc, make and so on? Implicit inputs!
\end {frame}
\begin {frame}{\texttt {guix graph --type=bag-emerged pari-gp}}
\includegraphics [height=8cm,width=12cm]{images/graph-parigp-bag-emerged.pdf}
\end {frame}
\begin{frame}[fragile]{Demo: Packages and profiles}
\small
\begin {itemize}
\item
\texttt {guix build pari-gp}
\texttt {/gnu/store/\textcolor {orange}{qbb9f5s6xzbgac9f260g16b68j7w1wqb}-pari-gp-2.7.5}
Hash of all inputs!
\pause
\item
\texttt {guix gc -\,-references /gnu/store/-...-pari-gp-2.7.5}
\pause
\item
\texttt {guix package -i pari-gp}
Look at \texttt {\$HOME/.guix-profile}; run \texttt {gp}.
\pause
\item
\texttt {./pre-inst-env guix edit pari-gp}
\texttt {./pre-inst-env guix build pari-gp}
\texttt {guix gc -\,-references ...}
\texttt {./pre-inst-env guix package -u pari-gp}
\pause
\item
\texttt {guix package -l}
\pause
\item
\textcolor {gruen}{\texttt {guix package -\,-roll-back}}
\end {itemize}
\end{frame}
\begin {frame}{Features}
\begin {itemize}
\item
\textcolor {blau}{Hackable}
\begin {itemize}
\item
based on Guile Scheme
\end {itemize}
\item
\textcolor {blau}{Dependable}
\begin {itemize}
\item
immutable packages in store
\item
transactional upgrades \textcolor {gruen}{and downgrades}
\end {itemize}
\item
\textcolor {blau}{Liberating}
\begin {itemize}
\item
user centric: every user has an individual profile
\item
transparent (and reproducible?) binary and source deployments
\item
easy roll-back
\item
different versions can co-exist
\begin {itemize}
\item
in \textcolor {gruen}{one user profile} (?)
\item
for \textcolor {gruen}{different users}
\item
for one user in \textcolor {gruen}{different profiles}
\end {itemize}
\end {itemize}
\end {itemize}
\end {frame}
\section {GNU GuixSD: Declarative system deployments}
\begin {frame}{System layers}
\hspace {2cm}
\begin{tikzpicture}[entry/.style = {
draw=orange, very thick,
fill=white, text=black, text width=6cm,
rounded corners=2mm, minimum height=1cm,
text centered
},
guile/.style = {
fill=gelb, text=black, rotate=20,
rounded corners=4mm, text width=3cm,
opacity=.75, text opacity=1, text centered,
minimum height=1cm
}]
\matrix[row sep=6mm, column sep=1cm] {
\node(kernel)[entry]{\textbf{\large{Linux-libre}}};
\\
\node(initrd)[entry]{\textbf{\large{initial RAM disk}}};
\\
\node(shepherd)[entry]{\textbf{\large{PID 1: GNU Shepherd}}
\\ services};
\\
\node(user)[entry, dashed]{\textbf{\large{applications}}};
\\
};
\path[->, very thick, draw=orange]
(kernel) edge (initrd);
\path[->, very thick, draw=orange]
(initrd) edge (shepherd);
\path[->, very thick, draw=orange]
(shepherd) edge (user);
\node<2->(labelinitrd) [guile] at (initrd.east) {%
\Large{Guile}
};
\node<2->(labelinitrd) [guile] at (shepherd.east) {%
\Large{Guile}
};
\end{tikzpicture}
\end {frame}
\begin {frame}{Demo: Always change a running system!}
Have a look at
\texttt {/run}
\texttt {/run/current-system}
\texttt {/run/booted-system}
\texttt {/run/current-system/}
\end {frame}
\begin {frame}{Demo: Do as you please!}
\begin {itemize}
\item
Look at \texttt {config-desktop.scm}.
\pause
\item
Change!
\begin {itemize}
\item
change locales
\item
add pari-gp package to global list
\item
auto-login the user \texttt {enge}
\end {itemize}
\pause
\item
\texttt {guix system vm config-pari.scm}
\pause
\item
\texttt {guix system reconfigure config-pari.scm}
\end {itemize}
\end {frame}
\section {State of the nation}
\begin {frame}{Timeline}
\begin {itemize}
\item
2012-11: GNU project by Ludovic Courtès
\item
2013-01: release 0.1
\item
2014-07: \textcolor {blau}{installable operating system}
\item
2015-01: ARMv7 port
\item
2016-01: successful fundraiser for new build farm
\item
2016-02: creation of \textcolor {blau}{Guix Europe}, \\
non-profit organisation to support GNU Guix
\item
2016-03: release 0.10.0
\end {itemize}
\end {frame}
\begin {frame}{Status and activities}
\begin {itemize}
\item
3200 packages
\item
4 platforms
\begin {itemize}
\item
GuixSD: x86\_64, i686
\item
Guix as package manager: mips64el, armhf
\end {itemize}
\item
$\approx$ 25 contributors per month
\item
$\approx$ 400 commits per month
\item
lots of friendly people on the mailing list and on IRC
\end {itemize}
\pause
\vfill
\begin {center}
\color {rot}\framebox {\textcolor {orange}{Try it out!}}
\end {center}
\begin {itemize}
\item
\url {https://gnu.org/software/guix/}
\item
It is free
\begin {itemize}
\item
as in \textcolor {gruen}{libre}
\item
of \textcolor {orange}{cost}
\item
of \textcolor {rot}{risk}
\end {itemize}
\end {itemize}
\end {frame}
\begin {frame}
\centerline {\includegraphics[width=0.3\textwidth,angle=270]{images/guixsd.pdf}}
\vfill
\tiny{
Copyright \copyright{} 2016 Andreas Enge \texttt{andreas.enge@inria.fr}\\
Some slides are \copyright{} 2010, 2012--2016 Ludovic Courtès \texttt{ludo@gnu.org}\\[2mm]
GNU GuixSD logo \copyright{} 2015 Luis Felipe López Acevedo <felipe.lopez@opmbx.org>\\
CC-BY-SA 4.0, \url{http://gnu.org/s/guix/graphics}\\[2mm]
Copyright of other images included in this document is held by
their respective owners.
\\[2mm]
This work is licensed under the \alert{Creative Commons
Attribution-Share Alike 3.0} License. To view a copy of this
license, visit
\url{http://creativecommons.org/licenses/by-sa/3.0/} or send a
letter to Creative Commons, 171 Second Street, Suite 300, San
Francisco, California, 94105, USA.
\\[2.0mm]
At your option, you may instead copy, distribute and/or modify
this document under the terms of the \alert{GNU Free Documentation
License, Version 1.3 or any later version} published by the Free
Software Foundation; with no Invariant Sections, no Front-Cover
Texts, and no Back-Cover Texts. A copy of the license is
available at \url{http://www.gnu.org/licenses/gfdl.html}.
\\[2.0mm]
% Give a link to the 'Transparent Copy', as per Section 3 of the GFDL.
The source of this document is available from
\url{http://git.sv.gnu.org/cgit/guix/maintenance.git}.
}
\end {frame}
\end {document}