2
0
Fork 0
mirror of git://git.savannah.gnu.org/guix/maintenance.git synced 2023-12-14 03:33:04 +01:00

talks: Add OpenTechSummit 2015 talk.

This commit is contained in:
Ricardo Wurmus 2015-05-24 17:32:25 +02:00 committed by rekado
parent 853499c95b
commit 028164d344
14 changed files with 1983 additions and 0 deletions

View file

@ -0,0 +1,11 @@
# .bashrc
# User specific aliases and functions
export USER=demo
export HOME=/home/rekado/demo-home
export PATH=~/.guix-profile/bin:~/.guix-profile/sbin:$PATH
export LOCPATH="$HOME/.guix-profile/lib/locale/:$LOCPATH"
PS1='demo@guix \w\$ '
alias ls='ls -p --color'
alias ll='ls -l'

View file

@ -0,0 +1,16 @@
#!/bin/sh
set -e
export USER=demo
export HOME=/home/rekado/demo-home
cd
unset GUILE_LOAD_PATH
unset GUILE_LOAD_COMPILED_PATH
export PATH=$HOME/.guix-profile/bin:/run/current-system/profile/bin:$HOME/local/bin:/run/setuid-programs
rm -f /var/guix/profiles/per-user/demo/guix-profile*
rm -f ~/.guix-profile
rm -f old-times*
rm -rf ~/hello*
unset LANGUAGE
exec bash

Binary file not shown.

View file

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="297mm"
height="210mm"
viewBox="0 0 1052.3622 744.09448"
id="svg3386"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="function.svg">
<defs
id="defs3388" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="672.69935"
inkscape:cy="514.34439"
inkscape:document-units="px"
inkscape:current-layer="g5089"
showgrid="true"
inkscape:window-width="1280"
inkscape:window-height="740"
inkscape:window-x="0"
inkscape:window-y="31"
inkscape:window-maximized="1">
<inkscape:grid
type="xygrid"
id="grid4200" />
</sodipodi:namedview>
<metadata
id="metadata3391">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-308.26772)">
<g
id="g5111">
<text
sodipodi:linespacing="125%"
id="text4196"
y="572.65308"
x="56.987644"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0074d8;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:90px;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif';fill:#0074d8;fill-opacity:1"
y="572.65308"
x="56.987644"
id="tspan4198"
sodipodi:role="line">g:<tspan
id="tspan4210"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif Bold';fill:#d83e00;fill-opacity:1">n <tspan
id="tspan4256"
style="fill:#439b00;fill-opacity:1">u</tspan></tspan></tspan></text>
<path
sodipodi:nodetypes="cccccccccccccccc"
inkscape:connector-curvature="0"
id="path4204"
d="m 132.4162,391.36736 -20,39.99999 0,40 250,0 0,160 -40,0 0,40 20,40 m -90.71429,0 20,-40 0,-40 -249.285707,0 0,-160 40,0 0,-40 -20,-39.99999"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="25"
cy="367.08163"
cx="88.130486"
id="path4228"
style="fill:#d83e00;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4234"
d="m 82.416203,401.36735 10,0 0,20 9.999997,0 -14.999997,20 -15,-20 10,0 z"
style="fill:#7b665d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4234-9"
d="m 292.4162,654.51022 10,0 0,20 10,0 -15,20 -15,-20 10,0 z"
style="fill:#7b665d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path4234-5"
d="m 220.27334,553.51021 0,-10 20,0 0,-10 20,15 -20,15 0,-10 z"
style="fill:#7b665d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:transform-center-y="1.5626758"
inkscape:transform-center-x="-1.720021"
d="m 312.19729,709.18458 -0.11702,22.5476 18.50784,12.87897 -21.4802,6.8563 -6.5294,21.58182 -13.15848,-18.31017 -22.54322,0.45932 13.34781,-18.17261 -7.40308,-21.29794 21.40788,7.07888 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="false"
sodipodi:arg2="-0.47883019"
sodipodi:arg1="-1.1071487"
sodipodi:r2="16.977167"
sodipodi:r1="33.954334"
sodipodi:cy="739.55429"
sodipodi:cx="297.01246"
sodipodi:sides="5"
id="path4300"
style="fill:#439b00;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
</g>
<g
id="g5089">
<text
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
sodipodi:linespacing="125%"
id="text4196-19"
y="742.3064"
x="590.00159"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0074d8;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif';fill:#0074d8;fill-opacity:1"
y="742.3064"
x="590.00159"
id="tspan4198-3"
sodipodi:role="line"><tspan
id="tspan4210-7"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif';fill:#d83e00;fill-opacity:1">in </tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif';fill:#439b00;fill-opacity:1"
id="tspan4409">out</tspan></tspan></text>
<ellipse
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
ry="113.6878"
rx="135"
cy="395.04706"
cx="610.43018"
id="path4383"
style="fill:#d83e00;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
sodipodi:linespacing="125%"
id="text4196-1"
y="673.44922"
x="582.00159"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0074d8;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif';fill:#0074d8;fill-opacity:1"
y="673.44922"
x="582.00159"
id="tspan4198-0"
sodipodi:role="line">recipe:</tspan></text>
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
sodipodi:nodetypes="cccccccccccccccc"
inkscape:connector-curvature="0"
id="path4204-8"
d="m 656.8587,524.44921 -20,39.99999 0,40 249.99997,0 0,160 -40,0 0,40 20,40 m -90.7143,0 20,-40 0,-40 -249.28567,0 0,-160 40,0 0,-40 -20,-39.99999"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:connector-curvature="0"
id="path4234-3"
d="m 606.8587,534.4492 10,0 0,20 10,0 -15,20 -15,-20 10,0 z"
style="fill:#7b665d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:connector-curvature="0"
id="path4234-9-7"
d="m 816.85867,787.59207 10,0 0,20 10,0 -15,20 -15,-20 10,0 z"
style="fill:#7b665d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:connector-curvature="0"
id="path4234-5-7"
d="m 678.14441,728.02063 0,-10 20,0 0,-10 20,15 -20,15 0,-10 z"
style="fill:#7b665d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
sodipodi:linespacing="125%"
id="text4363"
y="341.87772"
x="613.59839"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4367"
y="341.87772"
x="613.59839"
sodipodi:role="line">headers</tspan><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
y="391.87772"
x="613.59839"
sodipodi:role="line"
id="tspan3374">sources</tspan><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
y="441.87772"
x="613.59839"
sodipodi:role="line"
id="tspan3376">build tools</tspan><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4377"
y="491.87772"
x="613.59839"
sodipodi:role="line">libs</tspan><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4379"
y="541.87769"
x="613.59839"
sodipodi:role="line" /></text>
<ellipse
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
ry="47.522808"
rx="135"
cy="905.97205"
cx="824.71588"
id="path4383-9"
style="fill:#439b00;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
sodipodi:linespacing="125%"
id="text4363-7"
y="915.59204"
x="827.88409"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4377-1"
y="915.59204"
x="827.88409"
sodipodi:role="line">package</tspan><tspan
style="text-align:center;text-anchor:middle;fill:#ffffff"
id="tspan4379-4"
y="965.59204"
x="827.88409"
sodipodi:role="line" /></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 55 KiB

144
talks/ots-2015/outline.org Normal file
View file

@ -0,0 +1,144 @@
* Outline
** Package management is a good idea
*** easy to install, upgrade, remove software
*** dependency resolution
*** centrally maintained
so no need to scour the Internet for installers or sources
** Problems
But with traditional means there are still annoyances probably many of
us have run into:
*** outdated packages
The application you want to use is too old in the official
repositories.
*** version conflicts
You can't have two versions of an application installed at the same
time. Most package systems won't accomodate this need for arbitrary
versions.
*** changes affect all users
On a shared system a package upgrade affects everyone on the system.
It happened often that I would accidentally break the system for other
users on the same machine after an upgrade even though everything
worked fine for me. It would have been nice if I could have only
updated the applications I was using. These problems get a lot worse
in big shared environments like clusters.
*** potentially dangerous
When a package is installed, system files are overwritten one by one.
When this process is aborted you end up with a system in an
inconsistent state.
There is also another potential danger: binary packages are
inscrutable blobs. Reproducible builds are near-impossible with
binary maintainer uploads. How can we really trust?
** Partial solutions
*** third-party repositories
They may solve the problem of outdated packages, but sufficiently
large repositories such as EPEL may aggravate version conflicts. They
all share the problem of trust.
*** manual compilation
You say you don't want to trust other people's binary packages so you
compile software manually. This is not very practical as we lose all
the benefits of package management: no more easy upgrades, no easy
removal, no dependency tracking.
*** language-specific package systems
This just dilutes the problem and makes it all the more challenging to
properly *manage* software. These package systems often don't even
have feature parity with established system package managers as they
aren't made for general package management.
*** build your own system package
This is rather hard for users because of arcane description languages
and package formats, special build tools and directory structures,
etc. It is uncomfortable even when you are trained to do this and do
it somewhat regularly.
*** meta-package managers
The frustration with traditional packaging procedures has resulted in
the rise of meta-package managers that generate low-quality but
installable RPMs, debs or gems. Using them may simplify getting
software installed and tracked by the system package manager, but it
does not solve any of the other problems and is actually equal to
admitting that packaging is hard.
*** giving up
You could also just shrug and deploy software by downloading an
"appliance" or by using disk snapshots. There are very popular
variations on this theme now but they all have in common that they are
rather blunt and undisciplined. They ignore the problem and abstract
it away with another level of binary indirection.
** Guix
Another approach is functional package management, and GNU Guix is my
functional package manager of choice. What *is* functional package
management?
** Functional?
Well, what is a function? This slide shows a pure function g that
takes red discs and outputs green stars. That's *all* it can do. It
cannot turn off the lights or eat all your candy. This means it has
no side-effects.
It performs its task no matter the environment in which it operates.
It does not depend on anything except the red disc, its input.
Given a certain input it always returns the same output; the result is
immutable.
** Functional packages
Mapping this to package management, we want the output of a package
recipe to be solely determined by its inputs, i.e. its bag of
dependencies. These inputs may be development headers, compilers and
other build tools, and libraries, and their dependencies as well. The
output is an immutable package.
** Functional package management
We want a package definition to behave like a pure function; nothing
in the environment (no other installed libraries, applications or
headers) should affect it. It should only depend on declared and
inherited inputs.
This leads to reproducible results, so we can cache results and even
offload the build process to other machines.
The output should be immutable. It may not be changed by any other
package evaluation. Any package built must be side-effect free.
** Build process
In the case of Guix these properties are achieved by isolating each
build. An unprivileged user communicates with the build daemon to
make it build software. Each build is performed by one of the
unprivileged build users in a chroot in which only the declared inputs
are available. The results of each build are placed in their own,
separate, unique directory in a cache called the store.
* Demos
** preparation
cd ./demo-home
./start.sh
** installing a package
which hello # does not exist
guix package -i hello
guix package --list-installed # shows hello in store
which hello # shows hello in PATH
switch to other user, show that "hello" only exists
** profiles
guix package -i guile
guile --version
guix package -i python -r guile
guix package --list-generations
guix package --roll-back
guix package -p old-times -i guile-1.8.8
./old-times/bin/guile --version
** reusing recipes for testing pre-releases or custom modifications
tar xf $(guix build -S hello) && \
sed -i -e 's/Welt/Open Tech Summit/' hello-2.10/po/de.gmo && \
tar czf hello-3.tar.gz hello-2.10 && \
guix build --with-source=$HOME/hello-3.tar.gz hello

BIN
talks/ots-2015/talk.pdf Normal file

Binary file not shown.

314
talks/ots-2015/talk.tex Normal file
View file

@ -0,0 +1,314 @@
\documentclass{beamer}
\usetheme{default}
\usefonttheme{structurebold}
\usepackage{helvet}
\usecolortheme{seagull} % white on black
\usepackage[utf8]{inputenc}
\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref,xspace,multicol}
\usepackage[absolute,overlay]{textpos}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,trees,shadows,positioning}
%% \usepackage{tree}
\usepackage{fancyvrb} % for \Verb
\usepackage{ulem} % for \sout
% Remember the position of every picture.
\tikzstyle{every picture}+=[remember picture]
\tikzset{onslide/.code args={<#1>#2}{%
\only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path
}}
% Colors.
\definecolor{guixred1}{RGB}{226,0,38} % red P
\definecolor{guixorange1}{RGB}{243,154,38} % guixorange P
\definecolor{guixyellow}{RGB}{254,205,27} % guixyellow P
\definecolor{guixred2}{RGB}{230,68,57} % red S
\definecolor{guixorange2}{RGB}{236,117,40} % guixorange S
\definecolor{guixtaupe}{RGB}{134,113,127} % guixtaupe S
\definecolor{guixgrey}{RGB}{91,94,111} % guixgrey S
\definecolor{guixblue1}{RGB}{38,109,131} % guixblue S
\definecolor{guixblue2}{RGB}{10,50,80} % guixblue S
\definecolor{guixgreen1}{RGB}{133,146,66} % guixgreen S
\definecolor{guixgreen2}{RGB}{157,193,7} % guixgreen S
\setbeamerfont{title}{size=\huge}
\setbeamerfont{frametitle}{size=\huge}
% Black-on-white color theme.
\setbeamercolor{structure}{fg=guixblue2}
\setbeamercolor{title}{fg=guixblue2}
\setbeamercolor{frametitle}{fg=guixblue2}
\setbeamercolor{date}{fg=darkgray}
\setbeamercolor{author}{fg=darkgray}
\setbeamercolor{alerted text}{fg=guixgreen2,bg=black}
\title{Functional Package Management with GNU Guix}
%%\subtitle{How GNU Guix Seeks to Empower Users}
\author{Ricardo Wurmus\\\texttt{rekado@elephly.net}}
\date{\small{OpenTechSummit\\14 May 2015}}
\setbeamertemplate{navigation symbols}{} % remove the navigation bar
\AtBeginSection[]{
\begin{frame}
\frametitle{}
\tableofcontents[currentsection, hideothersections]
\end{frame}
}
\AtBeginSubsection[]{
\begin{frame}
\frametitle{}
\tableofcontents[currentsection, currentsubsection]
\end{frame}
}
\begin{document}
\maketitle
\begin{frame}{Good idea}
\Large{
\begin{itemize}
\item easy to install, upgrade, remove software
\item dependency resolution
\item centrally maintained repositories
\end{itemize}
}
\end{frame}
\begin{frame}{Common problems}
\Large{
\begin{itemize}
\item outdated packages
\item version conflicts
\item changes affect all users
\item potentially dangerous
\item trust
\end{itemize}
}
\end{frame}
\begin{frame}{Partial solutions}
\setbeamercovered{transparent=35}
\Large{
\begin{itemize}[<+>]
\item \alert{third-party repositories}\\
EPEL, PPAs, ...
\item \alert{manual compilation}\\
install to custom prefix, static linking
\item \alert{language-specific package systems}\\
gem, cabal, pip, cpan, npm ...
\item \alert{build your own system package}\\
RPM, deb, PKGBUILD, ...
\item \alert{meta package managers}\\
e.g. fpm generating RPM, deb, gem
\item \alert{giving up}\\
virtual machines, ``app images'', snapshots
\end{itemize}
}
\end{frame}
\begin{frame}[plain]
\includegraphics[width=\textwidth]{images/guix-logo}
\end{frame}
\begin{frame}[plain]
\begin{center}
\includegraphics[height=0.6\textheight]{images/function}
\end{center}
\end{frame}
\begin{frame}[plain]
\begin{center}
\includegraphics[height=0.8\textheight]{images/functional-package}
\end{center}
\end{frame}
\begin{frame}{Functional package management}
\Large{
\begin{itemize}
\item no \alert{global} values:\\
/bin, /usr/include, /usr/lib, ...
\item \alert{purity}:\\
only declared inputs are visible at build time
\item \alert{reproducible} results:\\
build outputs can be cached and substituted;\\
automatic deduplication!
\item \alert{immutable results} without \alert{side effects}:\\
nothing outside of the cache and internal state is modified
\end{itemize}
}
\end{frame}
\begin{frame}[fragile]{}
\begin{tikzpicture}[tools/.style = {
text width=35mm, minimum height=4cm,
text centered,
rounded corners=2mm,
fill=black, text=white
},
tool/.style = {
fill=black, text=white, text width=3cm,
text centered
},
daemon/.style = {
rectangle, text width=50mm, text centered,
rounded corners=2mm, minimum height=15mm,
top color=guixorange1,
bottom color=guixyellow,
text=black
},
builders/.style = {
draw=guixorange1, very thick, dashed,
fill=white, text=black, text width=5cm,
rounded corners=2mm,
},
builder/.style = {
draw=guixred2, thick, rectangle,
fill=white, text=black,
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) {\alert{Guile}, make, etc.}
node[builder] at ( 0,-0.5) {\alert{Guile}, make, etc.}
node[builder] at ( 1,-0.5) {\alert{Guile}, make, etc.}; &
\node[tools]{}
node[text=white] at (0, 1) {\large{\textbf{Guix client}}}
node[tool] at (0, 0) {\texttt{(guix packages)}}
node(client)[tool] at (0, -1) {\texttt{(guix store)}};
\\
\node(daemon)[daemon]{\large{\textbf{build daemon}}}; &
&
\\
};
\end{tikzpicture}
\begin{tikzpicture}[overlay]
\path[very thick, draw=guixblue2]
(client.south) edge [out=-90, in=0, ->] node[below, sloped]{RPCs} (daemon.east);
\path[->, very thick, draw=guixblue2]
(daemon) edge (builders);
\end{tikzpicture}
\end{frame}
\begin{frame}[plain]
\begin{center}
\includegraphics[height=\textheight]{images/profile-1}
\end{center}
\end{frame}
\begin{frame}[plain]
\begin{center}
\includegraphics[height=\textheight]{images/profile-2}
\end{center}
\end{frame}
\begin{frame}[fragile]
\begin{semiverbatim}
(define hello
(\alert{package}
(name "hello")
(version "2.8")
(source (\alert{origin}
(method url-fetch)
(uri (string-append
"mirror://gnu/\textrm{...}/hello-" version
".tar.gz"))
(sha256 (base32 "0wqd\textrm{...}dz6"))))
(\alert{build-system} gnu-build-system)
(synopsis "Hello, GNU world: An example GNU package")
(description "Produce a friendly greeting.")
(home-page "http://www.gnu.org/software/hello/")
(license gpl3+)))
\end{semiverbatim}
\end{frame}
\begin{frame}[plain]
\vspace{0.7cm}
\Large{
\begin{itemize}
\item version 0.8.2 is \textbf{out now}
\item quickly growing collection of package recipes (1800+)
\item \textbf{install the distribution}
\item \textbf{use it}, report bugs, add packages
\item share your \textbf{ideas}!
\end{itemize}
}
\begin{textblock}{5}(7,8)
\tikz
\node[overlay, rounded corners=4, text centered,
minimum size=10mm, fill=guixorange1, text width=5cm,
inner sep=3mm, rotate=-7, opacity=.75, text opacity=1,
drop shadow={opacity=0.5}] at (3, 3) {
\textbf{your help needed!}
};
\end{textblock}
\end{frame}
\begin{frame}{}
\hfill{
\includegraphics[width=0.5\textwidth]{images/gnuhead}
\includegraphics[width=0.5\textwidth]{images/guixsd-logo}}
\vfill{
\hfill{\includegraphics[width=0.3\textwidth]{images/guix-logo}}\\[0.2cm]
\texttt{rekado@elephly.net} \hfill{\alert{\url{http://gnu.org/software/guix/}}}
}
\end{frame}
\begin{frame}{}
\begin{textblock}{12}(2, 8)
\tiny{
Copyright \copyright{} 2015 Ricardo Wurmus \texttt{rekado@elephly.net}.\\
Copyright \copyright{} 2010, 2012, 2013, 2014 Ludovic Courtès \texttt{ludo@gnu.org}.
\\[3.0mm]
A GNU head, GFDL, \url{http://gnu.org/graphics/agnuhead.html}\\
GNU Guix logo, GFDL, \url{http://gnu.org/s/guix/graphics}
Copyright of other images included in this document is held by
their respective owners.
\\[3.0mm]
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{textblock}
\end{frame}
\end{document}
% Local Variables:
% coding: utf-8
% comment-start: "%"
% comment-end: ""
% ispell-local-dictionary: "american"
% compile-command: "pdflatex talk.tex"
% End: