373 lines
11 KiB
HTML
373 lines
11 KiB
HTML
|
<!DOCTYPE html>
|
|||
|
<html lang="en">
|
|||
|
<head>
|
|||
|
<meta charset="utf-8"/>
|
|||
|
<title>GNU Guix</title>
|
|||
|
<meta name="author" content="Clément Lassieur & Mathieu Othacehe"/>
|
|||
|
<style type="text/css">
|
|||
|
.underline { text-decoration: underline; }
|
|||
|
</style>
|
|||
|
<link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/reveal.css"/>
|
|||
|
|
|||
|
<link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/theme/night.css" id="theme"/>
|
|||
|
|
|||
|
<link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/css/zenburn.css"/>
|
|||
|
<!-- If the query includes 'print-pdf', include the PDF print sheet -->
|
|||
|
<script>
|
|||
|
if( window.location.search.match( /print-pdf/gi ) ) {
|
|||
|
var link = document.createElement( 'link' );
|
|||
|
link.rel = 'stylesheet';
|
|||
|
link.type = 'text/css';
|
|||
|
link.href = 'http://cdn.jsdelivr.net/reveal.js/3.0.0/css/print/pdf.css';
|
|||
|
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
|||
|
}
|
|||
|
</script>
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<div class="reveal">
|
|||
|
<div class="slides">
|
|||
|
<section id="sec-title-slide">
|
|||
|
<h1 class="title">GNU Guix</h1><h2 class="author">Clément Lassieur & Mathieu Othacehe</h2><p class="date">Created: 2019-03-19 mar. 17:32</p>
|
|||
|
</section>
|
|||
|
|
|||
|
<section>
|
|||
|
<section id="slide-org9120439">
|
|||
|
<h2 id="org9120439"><span class="section-number-2">1</span> Gestion de paquets sous GNU/Linux</h2>
|
|||
|
<div class="outline-text-2" id="text-1">
|
|||
|
</div>
|
|||
|
</section>
|
|||
|
<section id="slide-orge64bef8">
|
|||
|
<h3 id="orge64bef8"><span class="section-number-3">1.1</span> Un écosystème complexe</h3>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear">Les distributions historiques sont en perte de vitesse</li>
|
|||
|
<li class="fragment appear">Chaque language implémente son propre "package manager" : pip,
|
|||
|
Cargo, Cabal, npm</li>
|
|||
|
<li class="fragment appear">D'autres types d'outils apparaissent</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear">Pour les développeurs : VirtualEnv, Spack, EasyBuild</li>
|
|||
|
<li class="fragment appear">Pour les administrateurs : Ansible, Puppet, Propellor</li>
|
|||
|
<li class="fragment appear">Pour tous : Flatpak, snap, Docker, Vagrant</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
<section id="slide-org8ab3449">
|
|||
|
<h3 id="org8ab3449"><span class="section-number-3">1.2</span> Qui ne répond pas à tous les problèmes</h3>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Tout conteneuriser ?
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >“Debian and other distributions
|
|||
|
are going to be that thing you
|
|||
|
run docker on, little more.”
|
|||
|
Jos Poortvliet, développeur ownCloud
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear">Qualité des paquets</li>
|
|||
|
<li class="fragment appear">Opacité, manque de flexibilité</li>
|
|||
|
<li class="fragment appear">Manque d'outils de développement</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</section>
|
|||
|
<section id="slide-orgef08ac1">
|
|||
|
<h3 id="orgef08ac1"><span class="section-number-3">1.3</span> Sommes-nous fichus ?</h3>
|
|||
|
</section>
|
|||
|
<section id="slide-org7192e6c" data-background="./images/Guix_logo.svg.png" data-background-size="800px">
|
|||
|
<h3 id="org7192e6c"><span class="section-number-3">1.4</span> Non !</h3>
|
|||
|
|
|||
|
</section>
|
|||
|
</section>
|
|||
|
<section>
|
|||
|
<section id="slide-orga21ab7d">
|
|||
|
<h2 id="orga21ab7d"><span class="section-number-2">2</span> Guix</h2>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear">Peut être vu comme un package manager</li>
|
|||
|
<li class="fragment appear">Ensemble d'outils pour faire du déploiement de logiciels et de systèmes</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
<section id="slide-orgb9ea19f">
|
|||
|
<h3 id="orgb9ea19f"><span class="section-number-3">2.1</span> Paquets</h3>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Pas besoin d'être root
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >guix package -i gcc-toolchain openmpi hwloc
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Transactionnel
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >guix package --roll-back
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Permet d'expérimenter
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >guix package --profile=./experiment -i gcc-toolchain@5.5 hwloc@1
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Gestion des paquets (version control)
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >guix package --manifest=my-packages.scm
|
|||
|
</code></pre>
|
|||
|
</div>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" scheme >(specifications->manifest
|
|||
|
'("gcc-toolchain"
|
|||
|
"emacs"
|
|||
|
"guile"
|
|||
|
"emacs-geiser"))
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
<section id="slide-org6c5d276">
|
|||
|
<h3 id="org6c5d276"><span class="section-number-3">2.2</span> Environnement</h3>
|
|||
|
<div class="outline-text-3" id="text-2-2">
|
|||
|
</div>
|
|||
|
</section>
|
|||
|
<section id="slide-org09eca3b">
|
|||
|
<h4 id="org09eca3b"><span class="section-number-4">2.2.1</span> Reproduction</h4>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Je me fais mon environnement de travail
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >bob@laptop$ guix package --manifest=my-packages.scm
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Quelle version de Guix j'utilise ?
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >bob@laptop$ guix describe
|
|||
|
guix cabba9e
|
|||
|
repository URL: https://git.sv.gnu.org/git/guix.git
|
|||
|
commit: cabba9e15900d20927c1f69c6c87d7d2a62040fe
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Alice peut le reproduire exactement
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >alice@laptop$ guix pull --commit=cabba9e
|
|||
|
alice@laptop$ guix package --manifest=my-packages.scm
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
<section id="slide-orga134cfc">
|
|||
|
<h4 id="orga134cfc"><span class="section-number-4">2.2.2</span> Facile de hacker GNU hello</h4>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
On le télécharge
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >guix build -S hello
|
|||
|
/gnu/store/...-hello-2.10.tar.gz
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
'guix environment' donne tous les outils nécessaires pour le compiler (gcc, make…)
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >~/hello-2.10$ guix environment hello
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
On compile
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >~/hello-2.10$ ./configure && make
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
<section id="slide-org58b15d5">
|
|||
|
<h4 id="org58b15d5"><span class="section-number-4">2.2.3</span> Tester un paquet Python sans rien installer</h4>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
On se met dans le bon environnement
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >~$ guix environment --ad-hoc python python-numpy
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Et on fait notre test
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >~$ python3
|
|||
|
>>> import numpy
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
<section id="slide-orgc892f10">
|
|||
|
<h3 id="orgc892f10"><span class="section-number-3">2.3</span> Système</h3>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
On déclare tout ce qu'on veut avoir dans notre système
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" scheme >(operating-system
|
|||
|
(host-name "schememachine")
|
|||
|
(timezone "Europe/Paris")
|
|||
|
(locale "fr_FR.utf8")
|
|||
|
(bootloader (\alert{bootloader-configuration}
|
|||
|
(bootloader grub-efi-bootloader)
|
|||
|
(target "/boot/efi")))
|
|||
|
(file-systems (cons (\alert{file-system}
|
|||
|
(device (file-system-label "my-root"))
|
|||
|
(mount-point "/")
|
|||
|
(type "ext4"))
|
|||
|
%base-file-systems))
|
|||
|
(users (cons (\alert{user-account}
|
|||
|
(name "charlie")
|
|||
|
(group "users")
|
|||
|
(home-directory "/home/charlie"))
|
|||
|
%base-user-accounts))
|
|||
|
(services (cons* (\alert{service} dhcp-client-service-type)
|
|||
|
(\alert{service} openssh-service-type)
|
|||
|
%base-services)))
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear"><p>
|
|||
|
Et on instancie, un peu à la Ansible
|
|||
|
</p>
|
|||
|
<div class="org-src-container">
|
|||
|
|
|||
|
<pre><code class="" bash >guix system build config.scm
|
|||
|
guix system vm config.scm
|
|||
|
guix system container config.scm
|
|||
|
guix system reconfigure config.scm
|
|||
|
</code></pre>
|
|||
|
</div></li>
|
|||
|
<li class="fragment appear">On peut déployer ça n'importe où</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
<section id="slide-org324e2ce">
|
|||
|
<h3 id="org324e2ce"><span class="section-number-3">2.4</span> Liberté, Sécurité</h3>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear">Builds reproductibles
|
|||
|
<ul>
|
|||
|
<li>On veut que le binaire corresponde à sa source</li>
|
|||
|
<li>On veut pouvoir recompiler le logiciel</li>
|
|||
|
<li>Guix fournit des outils comme 'guix challenge'</li>
|
|||
|
|
|||
|
</ul></li>
|
|||
|
<li class="fragment appear">Bootstrappable builds
|
|||
|
<ul>
|
|||
|
<li>On évite de dépendre de gros binaires opaques</li>
|
|||
|
|
|||
|
</ul></li>
|
|||
|
|
|||
|
</ul>
|
|||
|
|
|||
|
</section>
|
|||
|
</section>
|
|||
|
<section>
|
|||
|
<section id="slide-org0a616b0">
|
|||
|
<h2 id="org0a616b0"><span class="section-number-2">3</span> L'avenir de GNU Guix</h2>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear">Version 1.0</li>
|
|||
|
<li class="fragment appear">De nouveaux paquets, importeurs, updaters</li>
|
|||
|
<li class="fragment appear">Un installateur graphique</li>
|
|||
|
<li class="fragment appear">Un installateur vraiment graphique</li>
|
|||
|
<li class="fragment appear">Une interface utilisateur améliorée</li>
|
|||
|
<li class="fragment appear">La modification de paquets depuis l'interface en ligne de commande</li>
|
|||
|
<li class="fragment appear">Une ferme de compilation plus robuste</li>
|
|||
|
<li class="fragment appear">Un meilleur support d'ARM et d'autres architectures</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</section>
|
|||
|
</section>
|
|||
|
<section>
|
|||
|
<section id="slide-org3883b61">
|
|||
|
<h2 id="org3883b61"><span class="section-number-2">4</span> Facilité de contribuer</h2>
|
|||
|
</section>
|
|||
|
</section>
|
|||
|
<section>
|
|||
|
<section id="slide-orgaed687f">
|
|||
|
<h2 id="orgaed687f"><span class="section-number-2">5</span> Le financement de GNU Guix</h2>
|
|||
|
<ul>
|
|||
|
<li class="fragment appear">Dons via la FSF</li>
|
|||
|
<li class="fragment appear">Hébergement, maintenance et amélioration de la ferme de compilation</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</section>
|
|||
|
</section>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/head.min.js"></script>
|
|||
|
<script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/js/reveal.js"></script>
|
|||
|
<script>
|
|||
|
// Full list of configuration options available here:
|
|||
|
// https://github.com/hakimel/reveal.js#configuration
|
|||
|
Reveal.initialize({
|
|||
|
|
|||
|
controls: true,
|
|||
|
progress: true,
|
|||
|
history: false,
|
|||
|
center: true,
|
|||
|
slideNumber: 'c',
|
|||
|
rollingLinks: false,
|
|||
|
keyboard: true,
|
|||
|
mouseWheel: false,
|
|||
|
fragmentInURL: false,
|
|||
|
pdfSeparateFragments: true,
|
|||
|
|
|||
|
overview: true,
|
|||
|
|
|||
|
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
|
|||
|
transition: Reveal.getQueryHash().transition || 'page', // default/cube/page/concave/zoom/linear/fade/none
|
|||
|
transitionSpeed: 'default',
|
|||
|
multiplex: {
|
|||
|
secret: '', // null if client
|
|||
|
id: '', // id, obtained from socket.io server
|
|||
|
url: '' // Location of socket.io server
|
|||
|
},
|
|||
|
|
|||
|
// Optional libraries used to extend on reveal.js
|
|||
|
dependencies: [
|
|||
|
{ src: 'http://cdn.jsdelivr.net/reveal.js/3.0.0/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }]
|
|||
|
});
|
|||
|
</script>
|
|||
|
</body>
|
|||
|
</html>
|