diff --git a/.gitignore b/.gitignore index a3b5a55..824224e 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,11 @@ /talks/inria-bordeaux-2016/talk.snm /talks/inria-bordeaux-2016/talk.toc /talks/inria-bordeaux-2016/talk.vrb +/talks/fosdem-2017/hpc/talk.aux +/talks/fosdem-2017/hpc/talk.log +/talks/fosdem-2017/hpc/talk.nav +/talks/fosdem-2017/hpc/talk.out +/talks/fosdem-2017/hpc/talk.pdf +/talks/fosdem-2017/hpc/talk.snm +/talks/fosdem-2017/hpc/talk.toc +/talks/fosdem-2017/hpc/talk.vrb diff --git a/talks/fosdem-2017/hpc/images/Guix-horizontal-print.pdf b/talks/fosdem-2017/hpc/images/Guix-horizontal-print.pdf new file mode 100644 index 0000000..05b1a3b Binary files /dev/null and b/talks/fosdem-2017/hpc/images/Guix-horizontal-print.pdf differ diff --git a/talks/fosdem-2017/hpc/images/GuixSD.pdf b/talks/fosdem-2017/hpc/images/GuixSD.pdf new file mode 120000 index 0000000..688296d --- /dev/null +++ b/talks/fosdem-2017/hpc/images/GuixSD.pdf @@ -0,0 +1 @@ +../../../fosdem-2016/distributions/images/GuixSD.pdf \ No newline at end of file diff --git a/talks/fosdem-2017/hpc/images/cake.jpg b/talks/fosdem-2017/hpc/images/cake.jpg new file mode 100644 index 0000000..3806080 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/cake.jpg differ diff --git a/talks/fosdem-2017/hpc/images/docker-image-layers-cropped.png b/talks/fosdem-2017/hpc/images/docker-image-layers-cropped.png new file mode 120000 index 0000000..829451a --- /dev/null +++ b/talks/fosdem-2017/hpc/images/docker-image-layers-cropped.png @@ -0,0 +1 @@ +../../../fosdem-2016/distributions/images/docker-image-layers-cropped.png \ No newline at end of file diff --git a/talks/fosdem-2017/hpc/images/easybuild-bug.png b/talks/fosdem-2017/hpc/images/easybuild-bug.png new file mode 100644 index 0000000..70613b0 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/easybuild-bug.png differ diff --git a/talks/fosdem-2017/hpc/images/easybuild.png b/talks/fosdem-2017/hpc/images/easybuild.png new file mode 100644 index 0000000..a535446 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/easybuild.png differ diff --git a/talks/fosdem-2017/hpc/images/environment-modules.png b/talks/fosdem-2017/hpc/images/environment-modules.png new file mode 100644 index 0000000..e47dd54 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/environment-modules.png differ diff --git a/talks/fosdem-2017/hpc/images/frozen-pizza.jpg b/talks/fosdem-2017/hpc/images/frozen-pizza.jpg new file mode 120000 index 0000000..20306e2 --- /dev/null +++ b/talks/fosdem-2017/hpc/images/frozen-pizza.jpg @@ -0,0 +1 @@ +../../../fosdem-2016/distributions/images/frozen-pizza.jpg \ No newline at end of file diff --git a/talks/fosdem-2017/hpc/images/openhub-activity.png b/talks/fosdem-2017/hpc/images/openhub-activity.png new file mode 100644 index 0000000..f737e21 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/openhub-activity.png differ diff --git a/talks/fosdem-2017/hpc/images/openhub-contributors.png b/talks/fosdem-2017/hpc/images/openhub-contributors.png new file mode 100644 index 0000000..9e87963 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/openhub-contributors.png differ diff --git a/talks/fosdem-2017/hpc/images/package-managers-cropped.png b/talks/fosdem-2017/hpc/images/package-managers-cropped.png new file mode 120000 index 0000000..d5f7b16 --- /dev/null +++ b/talks/fosdem-2017/hpc/images/package-managers-cropped.png @@ -0,0 +1 @@ +../../../inria-bordeaux-2016/images/package-managers-cropped.png \ No newline at end of file diff --git a/talks/fosdem-2017/hpc/images/reppar-front-page.png b/talks/fosdem-2017/hpc/images/reppar-front-page.png new file mode 100644 index 0000000..889538a Binary files /dev/null and b/talks/fosdem-2017/hpc/images/reppar-front-page.png differ diff --git a/talks/fosdem-2017/hpc/images/singularity-hpc-wire.png b/talks/fosdem-2017/hpc/images/singularity-hpc-wire.png new file mode 100644 index 0000000..0952bc0 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/singularity-hpc-wire.png differ diff --git a/talks/fosdem-2017/hpc/images/spack-bug.png b/talks/fosdem-2017/hpc/images/spack-bug.png new file mode 100644 index 0000000..41de59e Binary files /dev/null and b/talks/fosdem-2017/hpc/images/spack-bug.png differ diff --git a/talks/fosdem-2017/hpc/images/spack.png b/talks/fosdem-2017/hpc/images/spack.png new file mode 100644 index 0000000..8dad4c5 Binary files /dev/null and b/talks/fosdem-2017/hpc/images/spack.png differ diff --git a/talks/fosdem-2017/hpc/images/universal_install_script.png b/talks/fosdem-2017/hpc/images/universal_install_script.png new file mode 120000 index 0000000..e21c111 --- /dev/null +++ b/talks/fosdem-2017/hpc/images/universal_install_script.png @@ -0,0 +1 @@ +../../../inria-bordeaux-2016/images/universal_install_script.png \ No newline at end of file diff --git a/talks/fosdem-2017/hpc/outline.org b/talks/fosdem-2017/hpc/outline.org new file mode 100644 index 0000000..374cbc4 --- /dev/null +++ b/talks/fosdem-2017/hpc/outline.org @@ -0,0 +1,32 @@ +#+TITLE: Optimized & Reproducible HPC Software Deployment + +* current HPC software environments are broken +** distros are old and inflexible, not upgraded +** thus, sysadmins write their own modules +** hand-maintained modules break, still inflexible +** modules may be removed behind your feet +** thus, users hand-build software in $HOME +** possibly using language-specific package managers +** => it's a mess +* fixing this chaos +** first approach: easybuild & spack +*** layered on top of the existing distro +*** good: packaging work is shared among HPC users, some QA +*** bad: everyone builds in $HOME -> waste of resources +*** bad: uses host tools -> not reproducible [screenshots] +** second approach: app bundles +*** we have the bits, not the source +*** 100% reproducibility, but prevents experimentation +** third approach: can we have our cake and eat it too? +* Guix +** what it is +** example commands +** isolated builds: 100% reproducible +** reproducible *yet* customizable [RepPar paper] +** package variants, personal packages +* HPC & non-root usage (switch to Pjotr here?) +** the problem: guix-daemon runs as root because that's the only way to get repro build envs +** solutions: +*** running guix-daemon as non-root: doesn't work +*** user namespaces: unfortunately not widely available +*** relocation: yay! diff --git a/talks/fosdem-2017/hpc/rules.ini b/talks/fosdem-2017/hpc/rules.ini new file mode 100644 index 0000000..5a74423 --- /dev/null +++ b/talks/fosdem-2017/hpc/rules.ini @@ -0,0 +1,9 @@ +;; Rules for Rubber. + +[dot-pdf] +target = (.*)\.pdf +source = \1.dot +rule = shell +cost = 0 +command = dot -Tpdf -Gratio=.78 -o $target $source +message = rendering $source into $target diff --git a/talks/fosdem-2017/hpc/talk.tex b/talks/fosdem-2017/hpc/talk.tex new file mode 100644 index 0000000..d91e010 --- /dev/null +++ b/talks/fosdem-2017/hpc/talk.tex @@ -0,0 +1,605 @@ +% The comment below tells Rubber to compile the .dot files. +% +% rubber: module graphics +% rubber: rules rules.ini + +\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{fancyvrb} % for '\Verb' +\usepackage{xifthen} % for '\isempty' + +% 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{guixred3}{RGB}{115,34,27} % dark red +\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{guixdarkgrey}{RGB}{46,47,55} % guixdarkgrey 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} +\setbeamerfont{normal text}{size=\Large} + +% White-on-black color theme. +\setbeamercolor{structure}{fg=guixorange1,bg=black} +\setbeamercolor{title}{fg=white,bg=black} +\setbeamercolor{date}{fg=guixorange1,bg=black} +\setbeamercolor{frametitle}{fg=white,bg=black} +\setbeamercolor{titlelike}{fg=white,bg=black} +\setbeamercolor{normal text}{fg=white,bg=black} +\setbeamercolor{alerted text}{fg=guixyellow,bg=black} +\setbeamercolor{section in toc}{fg=white,bg=black} +\setbeamercolor{section in toc shaded}{fg=white,bg=black} +\setbeamercolor{subsection in toc}{fg=guixorange1,bg=black} +\setbeamercolor{subsection in toc shaded}{fg=white,bg=black} +\setbeamercolor{subsubsection in toc}{fg=guixorange1,bg=black} +\setbeamercolor{subsubsection in toc shaded}{fg=white,bg=black} +\setbeamercolor{frametitle in toc}{fg=white,bg=black} +\setbeamercolor{local structure}{fg=guixorange1,bg=black} + +\newcommand{\highlight}[1]{\alert{\textbf{#1}}} + +\title{Optimized \& Reproducible HPC Software Deployment} +\subtitle{... with GNU~Guix and free software} + +\author{Pjotr Prins\footnote{UMC Utrecht, UTHSC GeneNetwork.org} \& Ludovic Courtès\footnote{Inria}} +\date{\small{FOSDEM, February 2017}} + +\setbeamertemplate{navigation symbols}{} % remove the navigation bar + +\AtBeginSection[]{ + \begin{frame} + \frametitle{} + \tableofcontents[currentsection] + \end{frame} +} + + +\newcommand{\screenshot}[2][width=\paperwidth]{ + \begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[{#1}]{#2}}; + \end{tikzpicture} + \end{frame} +} + + +\begin{document} + +\maketitle + +\setbeamercolor{normal text}{bg=guixblue2} +\begin{frame} + \Huge{\textbf{Recipe for a contemporary HPC cluster environment.}} +\end{frame} +\setbeamercolor{normal text}{fg=white,bg=black} + +% https://www.plafrim.fr/en/the-platform/software-documentation/ +\begin{frame}[plain] + \Huge{\#1. Start with an old \& inflexible distro.} +\end{frame} + +\begin{frame}[plain] + \Huge{\#2. Add a layer of home-made ``modules''.} +\end{frame} + +\setbeamercolor{normal text}{fg=black,bg=white} +\screenshot{images/environment-modules} +\setbeamercolor{normal text}{fg=white,bg=black} + +\begin{frame}[plain] + \LARGE{\#2b. Tweak the modules. + \uncover<2->{\\\#2c. Oh, run-time linker error!} + \uncover<3->{\\\#2d. Tweak build flags for user A.} + \uncover<4->{\\\#2e. New versions are out, rebuild!} + \uncover<5->{\\\#2f. User B unhappy cuz we upgraded. Ignore?} + \uncover<6->{\\...}} +\end{frame} + +\begin{frame}[plain] + \Huge{\#3. Spice up with user-built software!} +\end{frame} + + +\setbeamercolor{normal text}{bg=white} +\screenshot[width=0.8\paperwidth]{images/package-managers-cropped} + +\begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[height=\paperheight]{images/universal_install_script}}; + \node [at=(current page.north east), anchor=south east, rotate=90, + text=black, text opacity=1, fill=white, opacity=.6]{ + \url{http://xkcd.com/1654/} + }; + \end{tikzpicture} +\end{frame} + +\setbeamercolor{normal text}{bg=guixblue2} +\begin{frame} + \Huge{\textbf{Fixing HPC cluster environments.}} +\end{frame} + +\setbeamercolor{normal text}{bg=white} +\begin{frame}[plain] + \begin{tikzpicture}[overlay] + \node [at=(current page.center), anchor=south, + fill=white, text width=\paperwidth, text centered, + text height=0.5\paperheight] + {\includegraphics[width=0.5\paperwidth]{images/easybuild}}; + + % https://github.com/LLNL/spack/blob/develop/share/spack/logo/spack-logo-text-64.png + % https://github.com/LLNL/spack/blob/develop/share/spack/logo/spack-logo-white-text-48.png + \node [at=(current page.center), anchor=north, + fill=white, text width=\paperwidth, text centered, + inner sep=0.2\paperheight] + {\includegraphics[width=0.4\paperwidth]{images/spack}}; + \end{tikzpicture} +\end{frame} + +\screenshot[width=\paperwidth]{images/easybuild-bug} +\screenshot[width=\paperwidth]{images/spack-bug} + +\setbeamercolor{normal text}{bg=guixdarkgrey} +\begin{frame}[plain] + \Huge{\textbf{Give up on packaging?}} + \\[1.0cm] + \uncover<2->{\Large{$\rightarrow$ ``app bundles'' (Docker images \& co.)}} +\end{frame} +\setbeamercolor{normal text}{bg=black} + +%% \setbeamercolor{normal text}{bg=guixred3,fg=white} +%% \begin{frame}[plain] +%% \begin{quotation} +%% \noindent +%% \LARGE{``Debian and other distributions are going to be \textbf{that +%% thing you run docker on}, little more.''} +%% \end{quotation} +%% \hfill{--- Jos Poortvliet, ownCloud developer} + +%% \begin{tikzpicture}[overlay] +%% \node [at=(current page.south east), anchor=south east]{ +%% \url{http://lwn.net/Articles/670566/} +%% }; +%% \end{tikzpicture} +%% \end{frame} + +%% \setbeamercolor{normal text}{bg=white} +%% \begin{frame}[plain] +%% \begin{tikzpicture}[remember picture, overlay] +%% \node [at=(current page.center), inner sep=0pt] +%% {\includegraphics[height=\paperheight]{images/dockerfile-owncloud-cropped}}; + +%% \node [at=(current page.center), anchor=south west, overlay, +%% text=black, text opacity=1, fill=white, opacity=.7, text width=5cm] +%% {\LARGE{It's also that thing you run \emph{inside} Docker!}}; +%% \end{tikzpicture} +%% \end{frame} + + +\setbeamercolor{normal text}{bg=white} +\begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[width=\paperwidth]{images/docker-image-layers-cropped}}; + \node [at=(current page.north east), anchor=north east, + text=black, text opacity=1, fill=white, opacity=.6]{ + \url{https://imagelayers.io/} + }; + \end{tikzpicture} +\end{frame} + +%% \screenshot{images/frozen-pizza} +%% \begin{frame}[plain] +%% \begin{tikzpicture}[remember picture, overlay] +%% \node [at=(current page.center), inner sep=0pt] +%% {\includegraphics[height=\paperheight]{images/docker-security}}; +%% \node [at=(current page.south east), anchor=south east, +%% text=black, text opacity=1, fill=white]{ +%% \small{\url{https://www.banyanops.com/blog/analyzing-docker-hub/}} +%% }; +%% \node [at=(current page.south west), anchor=south west, +%% text=black, text opacity=1, fill=white]{ +%% \small{May 2015} +%% }; +%% \end{tikzpicture} +%% \end{frame} + +\begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[width=0.95\paperwidth]{images/singularity-hpc-wire}}; + \node [at=(current page.south east), anchor=south east, + text=black, text opacity=1, fill=white]{ + \tiny{\url{https://www.hpcwire.com/2016/10/20/singularity-containers-easing-scientific-computing}} + }; + \end{tikzpicture} +\end{frame} + +\setbeamercolor{normal text}{bg=black} +\begin{frame}[plain]{``app bundles'' are headed wrong} + \Large{ + \begin{itemize} + \item difficulty to \highlight{compose} software packages + \item wrong \highlight{abstraction level}: image vs. package + \item \highlight{hardly reproducible}: we have the bits, not the + source + \item makes it hard to \highlight{customize \& experiment} + \end{itemize} + } +\end{frame} + +\setbeamercolor{normal text}{bg=white} +\begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[height=\paperheight]{images/cake}}; + \node [at=(current page.center), anchor=north, text=black, + fill=white, opacity=0., text opacity=1., + rounded corners=2mm, inner sep=1cm]{ + \Huge{\textbf{Can we eat it too?}} + }; + \end{tikzpicture} +\end{frame} +\setbeamercolor{normal text}{bg=black} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\setbeamercolor{normal text}{bg=white} +\begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[width=0.7\paperwidth]{images/Guix-horizontal-print}}; + \end{tikzpicture} +\end{frame} +\setbeamercolor{normal text}{fg=white,bg=black} + +\begin{frame} + \LARGE{ + \begin{enumerate} + \item transactional package manager + \item software environment manager + \item APIs \& tools to customize environments + \item packaging tools + \end{enumerate} + } +\end{frame} + +\begin{frame}[fragile] + + \begin{semiverbatim} +\$ guix package -i gcc-toolchain openmpi hwloc +\textrm{...} + +\$ eval `guix package --search-paths` +\textrm{...} + +\$ guix package --manifest=my-software.scm +\textrm{...} + \end{semiverbatim} + + %% \begin{tikzpicture}[overlay] + %% \node[rounded corners=4, text centered, + %% fill=guixorange1, text width=3cm, + %% inner sep=3mm, rotate=5, opacity=.75, text opacity=1, + %% drop shadow={opacity=0.5}] at (5, 4) { + %% \textbf{\large{demo}} + %% }; + %% \end{tikzpicture} +\end{frame} + +%% \setbeamercolor{normal text}{bg=guixdarkgrey,fg=guixred3} +%% \begin{frame}[fragile] +%% \Huge{Want to get started hacking on hwloc?} +%% \\[2cm] +%% \uncover<2->{\Large{A simple matter of installing the deps, right?}} +%% \end{frame} + +%% \setbeamercolor{normal text}{bg=white} +%% \begin{frame}[plain] +%% \begin{tikzpicture}[remember picture, overlay] +%% \node [at=(current page.center), inner sep=0pt] +%% {\includegraphics[height=\paperheight]{images/hwloc-graph}}; +%% \end{tikzpicture} +%% \end{frame} +%% \setbeamercolor{normal text}{fg=white,bg=black} + + +\begin{frame}[fragile] + %% \frametitle{Bit-Reproducible Builds$^*$} + %% \framesubtitle{$^*$ almost!} + + \begin{semiverbatim} +\$ guix build hello +\uncover<2->{/gnu/store/\tikz[baseline]{\node[anchor=base](nixhash){\alert<2>{h2g4sf72\textrm{...}}};}-hwloc-1.11.2} + +\uncover<3->{\$ \alert<3>{guix gc --references /gnu/store/\textrm{...}-hwloc-1.11.2} +/gnu/store/\textrm{...}-glibc-2.24 +/gnu/store/\textrm{...}-gcc-4.9.3-lib +/gnu/store/\textrm{...}-hwloc-1.11.2 +} + \end{semiverbatim} + + \begin{tikzpicture}[overlay] + \node<1>(labelnixhash) [fill=white, text=black, inner sep=0.5cm, + rounded corners] at (current page.center) {% + \Large{\textbf{isolated build}: chroot, separate name spaces, etc.} + }; + + \node<2>(labelnixhash) [fill=white, text=black] at (4cm, 2cm) {% + hash of \textbf{all} the dependencies}; + \path[->]<2>(labelnixhash.north) edge [bend left, in=180, out=-45] (nixhash.south); + + \draw<4-> (-10pt, 105pt) [very thick, color=guixorange2, rounded corners=8pt] + arc (10:-50:-50pt and 110pt); + \node<4->[fill=white, text=black, text opacity=1, opacity=.7, + rounded corners=2mm, inner sep=5mm] + at (7, 2) {\textbf{\Large{(nearly) bit-identical for everyone}}}; + \end{tikzpicture} + +\end{frame} + +\setbeamercolor{normal text}{bg=white} +\begin{frame}[plain] + \begin{tikzpicture}[remember picture, overlay] + \node [at=(current page.center), inner sep=0pt] + {\includegraphics[height=0.8\paperheight]{images/reppar-front-page}}; + \node [at=(current page.south east), anchor=south east, + text=black, text opacity=1, fill=white, opacity=.6]{ + \url{https://hal.inria.fr/hal-01161771/en} + }; + \end{tikzpicture} +\end{frame} +\setbeamercolor{normal text}{fg=white,bg=black} + +\begin{frame}[plain] + \Huge{Creating package variants at the command line} +\end{frame} + +\begin{frame}[fragile] + \begin{semiverbatim} +\$ guix build hwloc \\ + \alert<1>{--with-source}=./hwloc-42.0rc1.tar.gz +\textrm{...} + +\pause +\$ guix package -i mumps \\ + \alert<2>{--with-input}=scotch=pt-scotch +\textrm{...} + + \end{semiverbatim} +\end{frame} + +\begin{frame}[plain] + \Huge{Your personal packages or variants in + \texttt{GUIX\_PACKAGE\_PATH}!} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\setbeamercolor{normal text}{bg=guixblue2} +\begin{frame} + \Huge{\textbf{HPC \& non-root usage.}} +\end{frame} +\setbeamercolor{normal text}{fg=white,bg=black} + +\begin{frame}[fragile]{} + \begin{tikzpicture}[tools/.style = { + text width=35mm, minimum height=4cm, + text centered, + rounded corners=2mm, + fill=white, text=black + }, + tool/.style = { + fill=white, text=black, 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=black, text=white, text width=5cm, + rounded corners=2mm, + }, + builder/.style = { + draw=guixred2, thick, rectangle, + fill=black, text=white, + rotate=90 + }] + \matrix[row sep=3mm, column sep=1cm] { + \node(builders)[builders, text height=5cm]{} + node[fill=black, text=white] at (0, 2) {\large{\textbf{build processes}}} + node[fill=black, text=white] 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[fill=white, text=black] 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}}}; & + & + \\ + }; + \end{tikzpicture} + + \begin{tikzpicture}[overlay] + \path[very thick, draw=guixorange1] + (client.south) edge [out=-90, in=0, ->] node[below, sloped]{RPCs} (daemon.east); + \path[->, very thick, draw=guixorange1] + (daemon) edge (builders); + \end{tikzpicture} +\end{frame} + +\begin{frame}{Allowing for non-root usage} + + \Large{ + \begin{enumerate} + \setcounter{enumi}{-1} + \item {run build daemon \highlight{as non-root} + \begin{itemize} + \item<2-> not reproducible + \item<2-> prevents use of pre-built binaries + \end{itemize}} + \item {rely on Linux ``\highlight{user namespaces}'' + \begin{itemize} + \item<3-> awesome! + \item<3-> ... but support is missing on some systems + \end{itemize}} + \item make binaries \highlight{relocatable} + \end{enumerate} + } +\end{frame} + +\setbeamercolor{normal text}{bg=guixblue2} +\begin{frame} + \Huge{\textbf{Relocatable binaries (Pjotr).}} +\end{frame} +\setbeamercolor{normal text}{fg=white,bg=black} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\setbeamercolor{normal text}{bg=guixblue2} +\begin{frame}[plain] + \Huge{\textbf{Status.}} +\end{frame} +\setbeamercolor{normal text}{fg=white,bg=black} + +\begin{frame} + \Large{ + \begin{itemize} + \item started in 2012 + \item \highlight{4,800+ packages}, all free software + \item \highlight{4 architectures}:\\ + x86\_64, i686, ARMv7, mips64el + \item binaries at \url{https://hydra.gnu.org} + \item 0.12.0 released in December 2016 + \end{itemize} + } +\end{frame} + +\begin{frame}{cluster deployments} + \Large{ + \begin{itemize} + % http://zvfak.blogspot.ch/2015/07/gnu-guix-for-easily-managing.html + \item \highlight{Max Delbrück Center} (DE): 250-node cluster + + workstations + % https://ubc.uu.nl/infrastructure/ + % https://wiki.bioinformatics.umcutrecht.nl/pub/HPC/WebHome/HPC_Flyer.png + \item \highlight{Utrecht Bioinformatics Center} (NL): 68-node + cluster (1,000+ cores) + % https://www.qriscloud.org.au/support/qriscloud-documentation/75-euramoo-datasheet + % https://www.qriscloud.org.au/support/qriscloud-documentation/76-flashlite-datasheet + \item \highlight{University of Queensland} (AU): 20-node cluster + (900 cores) + \item<2-> \emph{more to come!} + \end{itemize} + } +\end{frame} + +\setbeamercolor{normal text}{bg=white} +\screenshot[width=.9\paperwidth]{images/openhub-activity} +\screenshot[width=.9\paperwidth]{images/openhub-contributors} +\setbeamercolor{normal text}{bg=black} + +\setbeamercolor{normal text}{bg=guixblue2} +\begin{frame}[plain] + \Huge{\textbf{Wrap-up.}} +\end{frame} +\setbeamercolor{normal text}{fg=white,bg=black} + +\begin{frame}{Summary} + \Large{ + \begin{itemize} + \item Guix supports \highlight{reproducible software environments} + \item ... allows for \highlight{experimentation} through customization + \item relocation allows unprivileged Guix usage in HPC + \end{itemize} + } +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[plain] + +\vfill{ + \vspace{2.5cm} + \center{\includegraphics[width=0.2\textwidth]{images/GuixSD}}\\[1.0cm] + \texttt{ludo@gnu.org}\hfill{\alert{\url{https://gnu.org/software/guix/}}} +} + +\end{frame} + +\begin{frame}{} + + \begin{textblock}{12}(2, 8) + \tiny{ + Copyright \copyright{} 2010, 2012--2017 Ludovic Courtès \texttt{ludo@gnu.org}.\\[3.0mm] + GNU GuixSD logo, CC-BY-SA 4.0, \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: "rubber --pdf talk.tex" +% End: + +%% LocalWords: Reproducibility