Nix i NixOS

Lluís Batlle i Rossell, <viriBLAketo@gmail.com> sense BLA

Mèrits

Estructura

Problemes al instal·lar components

Problemes de gestors imperatius (1)

Problemes de gestors imperatius (2)

Solucions de Nix

Exemples

$ nix-env -i firefox # Instal·lació
$ nix-env -u firefox # Actualització
$ nix-env -e firefox # Desinstal·lació
$ nix-env --rollback # Desfer
$ firefox # Execució

El llenguatge nix

Derivacions i el seu magatzem

Expressió nix

let
    peer = "Albert";
    sayhello = who : derivation {
        system = "i686-linux";
        name = "hello-to-${who}.txt";
        builder = /bin/sh;
        args = [ "-c" "echo Hello ${who} says $system > $out" ];
    };
    showprogram = fromfile : derivation {
        system = "i686-linux";
        name = "show-program.sh";
        builder = /bin/sh;
        args = [ "-c" "echo cat ${fromfile} > $out" ];
    };
in
rec {
    alberthello = sayhello peer;
    showhello = showprogram alberthello;
}

Nixpkgs

Nixpkgs: el constructor estàndard

Exemple facilet: screen

{stdenv, fetchurl, ncurses}:

stdenv.mkDerivation {
  name = "screen-4.0.2";
  src = fetchurl {
    url = mirror://gnu/screen/screen-4.0.2.tar.gz;
    md5 = "ed68ea9b43d9fba0972cb017a24940a1";
  };

  buildInputs = [ncurses];
}

Perfils

Aspecte dels perfils

$ ls -l /nix/var/nix/profiles/
... default -> default-3-link
... default-1-link -> /nix/store/mib0crll5jdhbcfip2lpdbh5ikgga8nj-user-environment
... default-2-link -> /nix/store/nhyrbhk6jmd6sbmfr9d6sbsxg3gz98qi-user-environment
... default-3-link -> /nix/store/kdnxnj41v2gg36yy9ngc42brypcv2mch-user-environment
$ ls /nix/var/nix/profiles/default
bin  demo  etc                include  jre  libexec  manifest  sample  share  var
db   doc   i686-pc-linux-gnu  info     lib  man      opt       sbin    src
$ echo $PATH
/nix/var/nix/profiles/default/bin:....
$ ls -l ~/.nix-profile
/nix/var/nix/profiles/default

Maneig dels perfils

$ ls /nix/var/nix/profiles
default     default-1-link    default-2-link     default-3-link
$ nix-env -i firefox # Actualització: nova generació 4
...
$ ls /nix/var/nix/profiles
default           default-2-link     default-4-link
default-1-link    default-3-link
$ nix-env -e firefox # Desinstal·lació: nova generació 5
...
$ ls /nix/var/nix/profiles
default           default-2-link     default-4-link
default-1-link    default-3-link     default-5-link
$ nix-env --rollback # Desfer
...
$ ls -l /nix/var/nix/profiles/default
... default -> default-4-link

Personalització de components

Eines de nix

Hydra: la granja de nixpkgs

Fi de l'explicació del nix

NixOS

Avantatges de NixOS

Exemple facilet de NixOS

{
  boot = {
        grubDevice = "/dev/sda";
  };
  fileSystems = [
    { mountPoint = "/";
      device = "/dev/sda1";
      options = "noatime";
      }
  ];
  networking = {
    hostName = "mandarina";
    domain = "local";
  };
  services = {
    xserver = { enable = true; };
    sshd = { enable = true; };
  };
}

Nix i NixOS