Skip to main content

Profiles

ProfilesLes isprofiles Nix'ssont way topour isolateisoler each user'sla configuration andde enablechaque easyutilisateur·ice rollback.et Eachpermettre de revenir en arrière à tout moment. Chaque profile (andet thuschaque eachgénération profile'sde generation)ce isprofile aest symlinkun inraccourcis thevers /nix/var/nix/profiles/.

EveryA timechaque achangement changedans isl'environement madede tol'utilisateur·ice the(avec user'snix-env environmentpar aexemple), newune generationnouvelle isgénération createdest fromcrée thedepuis lastla one.précédente.

ThePour illustrer tout ceci, voici ce qu'il se passe lorsque Carol installe Svn :

  1. La dérivation est installée dans le Nix store (soit en la compilant soit en la téléchargeant depuis le cache)
  2. Une nouvelle dérivation est crée depuis la génération précédente de Carol, dans cette nouvelle dérivation svn est lié dans un dossier bin (pour imiter la structure des fichiers de Linux)
  3. Cette nouvelle dérivation est liée dans le dossier /nix/var/nix/profiles comme une nouvelle dérivation de Carol (par exemple carol-24-link)
  4. Cette nouvelle dérivation est liée dans le profile de carol (carol)
  5. Enfin le profile de carol est liée dans son dossier ~/.nix-profile directory
  6. in
  7. Enfin eachtous homeles directoriesfichiers has its binaries added to the user's $PATH. This way stuff that are indans ~/.nix-profile/bin willsont beajouté à son $PATH pour être accessible asà commands.Carol. Carol peut maintenant utiliser Svn.

Maintenant lorsque Carol veut rollback vers sa génération précédente, il suffit simplement de remplacer le lien de carol vers carol-23-link à la place de carol-24-link.

AndAinsi asfaire seenun onrollback these picture,fait everyen userune hasseule aopération. .nix-profilePar directorycontre whichce actuallysystème isà ale symlinkdésavantage tode aprendre correspondingbeaucoup profilede inplace thecar Nixrien profile'sn'est directory. Each profile (default and carol in this case) is actually a symlink to the last generation (default-42-link and carol-23-link)supprimé. ThoseDans are themselves symlinks to special derivations in the Nix store (yes those are derivations as well), and those mimick Linux's file system hierarchy but use symlinks to point to each actual package.

That way when you rollback, the only thing that happens is that the symlink change to a different generation. When you install a new package with nix-env, it creates a new generation from the last one, create a new derivation and symlink the current environment to that new generation.

This allow to do atomic updates that can always be rolled back. As you can imagine, in this scenario nothing is ever deleted which allow easy, offline rollbacks in case anything goes wrong. However sometimes we just want to free some space. So in the nextla page we'llsuivante, talknous aboutallons howvoir thecomment le "garbage collectorcollector" works.fonctionne pour pouvoir faire de la place.