maintenance/talks/fundthecode-2019/talk.html

11 KiB

<html lang="en"> <head> </head>

GNU Guix

Clément Lassieur & Mathieu Othacehe

Created: 2019-03-19 mar. 17:32

1 Gestion de paquets sous GNU/Linux

1.1 Un écosystème complexe

  • Les distributions historiques sont en perte de vitesse
  • Chaque language implémente son propre "package manager" : pip, Cargo, Cabal, npm
  • D'autres types d'outils apparaissent
  • Pour les développeurs : VirtualEnv, Spack, EasyBuild
  • Pour les administrateurs : Ansible, Puppet, Propellor
  • Pour tous : Flatpak, snap, Docker, Vagrant

1.2 Qui ne répond pas à tous les problèmes

  • Tout conteneuriser ?

    “Debian and other distributions
    are going to be that thing you
    run docker on, little more.”
          Jos Poortvliet, développeur ownCloud
    
  • Qualité des paquets
  • Opacité, manque de flexibilité
  • Manque d'outils de développement

1.3 Sommes-nous fichus ?

1.4 Non !

2 Guix

  • Peut être vu comme un package manager
  • Ensemble d'outils pour faire du déploiement de logiciels et de systèmes

2.1 Paquets

  • Pas besoin d'être root

    guix package -i gcc-toolchain openmpi hwloc
    
  • Transactionnel

    guix package --roll-back
    
  • Permet d'expérimenter

    guix package --profile=./experiment -i gcc-toolchain@5.5 hwloc@1
    
  • Gestion des paquets (version control)

    guix package --manifest=my-packages.scm
    
    (specifications->manifest
     '("gcc-toolchain"
       "emacs"
       "guile"
       "emacs-geiser"))
    

2.2 Environnement

2.2.1 Reproduction

  • Je me fais mon environnement de travail

    bob@laptop$ guix package --manifest=my-packages.scm
    
  • Quelle version de Guix j'utilise ?

    bob@laptop$ guix describe
      guix cabba9e
      repository URL: https://git.sv.gnu.org/git/guix.git
      commit: cabba9e15900d20927c1f69c6c87d7d2a62040fe
    
  • Alice peut le reproduire exactement

    alice@laptop$ guix pull --commit=cabba9e
    alice@laptop$ guix package --manifest=my-packages.scm
    

2.2.2 Facile de hacker GNU hello

  • On le télécharge

    guix build -S hello
    /gnu/store/...-hello-2.10.tar.gz
    
  • 'guix environment' donne tous les outils nécessaires pour le compiler (gcc, make…)

    ~/hello-2.10$ guix environment hello
    
  • On compile

    ~/hello-2.10$ ./configure && make
    

2.2.3 Tester un paquet Python sans rien installer

  • On se met dans le bon environnement

    ~$ guix environment --ad-hoc python python-numpy
    
  • Et on fait notre test

    ~$ python3
    >>> import numpy
    

2.3 Système

  • On déclare tout ce qu'on veut avoir dans notre système

    (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)))
    
  • Et on instancie, un peu à la Ansible

    guix system build config.scm
    guix system vm config.scm
    guix system container config.scm
    guix system reconfigure config.scm
    
  • On peut déployer ça n'importe où

2.4 Liberté, Sécurité

  • Builds reproductibles
    • On veut que le binaire corresponde à sa source
    • On veut pouvoir recompiler le logiciel
    • Guix fournit des outils comme 'guix challenge'
  • Bootstrappable builds
    • On évite de dépendre de gros binaires opaques

3 L'avenir de GNU Guix

  • Version 1.0
  • De nouveaux paquets, importeurs, updaters
  • Un installateur graphique
  • Un installateur vraiment graphique
  • Une interface utilisateur améliorée
  • La modification de paquets depuis l'interface en ligne de commande
  • Une ferme de compilation plus robuste
  • Un meilleur support d'ARM et d'autres architectures

4 Facilité de contribuer

5 Le financement de GNU Guix

  • Dons via la FSF
  • Hébergement, maintenance et amélioration de la ferme de compilation
</html>