mirror of
git://git.savannah.gnu.org/guix/maintenance.git
synced 2024-12-29 11:38:32 +01:00
talks: Add OpenTechSummit 2015 talk.
This commit is contained in:
parent
853499c95b
commit
028164d344
14 changed files with 1983 additions and 0 deletions
11
talks/ots-2015/demo-home/.bashrc
Normal file
11
talks/ots-2015/demo-home/.bashrc
Normal 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'
|
16
talks/ots-2015/demo-home/start.sh
Executable file
16
talks/ots-2015/demo-home/start.sh
Executable 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
|
BIN
talks/ots-2015/images/function.pdf
Normal file
BIN
talks/ots-2015/images/function.pdf
Normal file
Binary file not shown.
259
talks/ots-2015/images/function.svg
Normal file
259
talks/ots-2015/images/function.svg
Normal 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 |
BIN
talks/ots-2015/images/functional-package.pdf
Normal file
BIN
talks/ots-2015/images/functional-package.pdf
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
BIN
talks/ots-2015/images/gnuhead.pdf
Normal file
BIN
talks/ots-2015/images/gnuhead.pdf
Normal file
Binary file not shown.
BIN
talks/ots-2015/images/guix-logo.pdf
Normal file
BIN
talks/ots-2015/images/guix-logo.pdf
Normal file
Binary file not shown.
BIN
talks/ots-2015/images/guixsd-logo.pdf
Normal file
BIN
talks/ots-2015/images/guixsd-logo.pdf
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
BIN
talks/ots-2015/images/profile-1.pdf
Normal file
BIN
talks/ots-2015/images/profile-1.pdf
Normal file
Binary file not shown.
After Width: | Height: | Size: 126 KiB |
BIN
talks/ots-2015/images/profile-2.pdf
Normal file
BIN
talks/ots-2015/images/profile-2.pdf
Normal file
Binary file not shown.
After Width: | Height: | Size: 169 KiB |
1239
talks/ots-2015/images/profiles.svg
Normal file
1239
talks/ots-2015/images/profiles.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 55 KiB |
144
talks/ots-2015/outline.org
Normal file
144
talks/ots-2015/outline.org
Normal 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
BIN
talks/ots-2015/talk.pdf
Normal file
Binary file not shown.
314
talks/ots-2015/talk.tex
Normal file
314
talks/ots-2015/talk.tex
Normal 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:
|
Loading…
Reference in a new issue