Profiles
ProfilesLes isprofiles Nix'ssont waylà 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 :
- La dérivation est installée dans le Nix store (soit en la compilant soit en la téléchargeant depuis le cache)
- 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 dossierbin
(pour imiter la structure des fichiers de Linux) - Cette nouvelle dérivation est liée dans le dossier
/nix/var/nix/profiles
comme une nouvelle dérivation de Carol (par exemplecarol-24-link
) - Cette nouvelle dérivation est liée dans le profile de carol (
carol
) - Enfin le profile de carol est liée dans son dossier
~/.nix-profile
directory - Enfin
eachtoushomelesdirectoriesfichiershas its binaries added to the user's$PATH. This way stuff that are indans~/.nix-profile/bin
willsontbeajouté à son$PATH
pour être accessibleasà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.
Par .nix-profiledirectorycontre 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.