NixのProfile
大まかに2つの機能
rollbackを実現する
user管理する
↑これ粒度が微妙に異なるため、誤解しそう
Nixではuserを分けて管理することができる
個々のuserに対してprofiledirが与えられる
code:aa
/nix/var/nix/profiles/per-user
├── mrsekut
│ ├── profile -> profile-97-link
│ ..
│ └── profile-97-link -> /nix/store/g80m1j...-user-environment
└── root
├── channels -> channels-2-link
├── channels-1-link -> /nix/store/gp6qhb...-user-environment
└── channels-2-link -> /nix/store/57904r...-user-environment
この個々のuserのprofile内に複数のprofile-n-linkがあるのでそれのおかげでrollbackができる
だから
「Profileのおかげで複数userを管理できる」と
「Profileのおかげでrollbackを実現できる」
と言った時にProfileの指すものが微妙に異なる
そのへんを踏まえて簡潔に説明すべきmrsekut.icon
書き直そう
複数の世代で構成されている
profileを変更すると、新しい世代が作られる
Profiles are used to compose components that are spread among multiple paths under a new unified path.
The process of "installing" the derivation in the profile basically reproduces the hierarchy of the nix-2.1.3 store derivation in the profile by means of symbolic links.
/nix/var/nix/profiles/per-user/で複数のuserを管理している
mrsekut.iconの環境ではmrsekutとrootしかない
ここに例えばtarouを追加できる
例
code:bash
λ readlink ~/.nix-profile
/nix/var/nix/profiles/per-user/mrsekut/profile
λ readlink /nix/var/nix/profiles/per-user/mrsekut/profile
profile-97-link
λ readlink /nix/var/nix/profiles/per-user/mrsekut/profile-97-link
/nix/store/g80m1j4yr6if8bn8kdsal2s6s3id0gfx-user-environment
こんな感じで.nix-profileから3つのsym linkを経て、最終的にstore上の1つを見ている
g80m1..-user-environment/binの中に現在使える外部コマンドが全て入っている
https://gyazo.com/9c7ae125ea6f15aa74ba394e3d66e6d4 https://nixos.org/manual/nix/stable/#sec-profiles
この図がわかりやすいmrsekut.icon*2
左
/.nix-profile配下に3名のuserが存在する
中央
これらのuserの中にも.nix-profileがあり、これは/nix/var/nix/profilesの世代を表すもののどれかを見ている
右
この世代は最終的にstore配下の1つを指している
例えば右上の0c1p..-user-envのbinの中にはsvnがあり、これはstoreの別のderivationであるsunversion-1.1.2を見ている
この図で、
同じpackageの異なるversionのものはstoreに並列に置かれている
個々のuserが見ている環境もstoreに並列に置かれている
ということがひと目で分かるmrsekut.icon
~/.nix-profile/
これは/nix/var/nix/profiles/defaultのsym link
$ ls /nix/var/nix/profiles
をやると、いくつかの世代が管理されていることがわかる
$ ls /nix/var/nix/profiles/per-user/mrsekut
ユーザーごとの世代を見れる
home-managerで管理されているものもここにある
こういうイメージだろうか
Nix Storeは、localに存在するNixが管理する全てのpackageが並列に置かれている 「今」は使わないものも全て含まれている
nix profileは、そこから「今」必要なものだけを全部とってくる
その手段としてsym linkを使っている
storeに本物が置いてあって、profileはsym linkで取ってきているだけ
みたいな
$ ls ~/.nix-defexpr/channels