Nixのderivation
頻繁に使われる用語だが、実は割と指しているものが曖昧mrsekut.icon
ただし、Nixのdocsとかを読んでも分かる通り、packageとderivationという単語は明確にわけて用いられている 以下のもの(の、どれか)を指す
そもそも曖昧なので、技術的な厳密な話をしたい時は「derivation」という単語の使用を避けたほうが良いと思うmrsekut.icon
こういうことらしい
What is the difference between a “derivation” and a “store derivation”?
“Store derivation” refers to a .drv file, “derivation” is a fuzzy word that could mean any of like three different things.ref .drvの拡張子のもの
「Nixのderivation」はfuzzy word
3つってなんだ?
https://gyazo.com/fbb90b5bb61bac3c9671ed8e6448a3f3 https://stackoverflow.com/a/58243537
これの3つの丸か?
fuzzy wordのくせに跋扈しすぎだろmrsekut.icon
マジでfuzzy wordなのであればmrsekut-pからリンクを消したいなmrsekut.icon
あるいは一番右側の丸を指すということにするか
buildの出力
A derivation (see example) is a computer-friendly representation of the build recipes used for building (realize) packages. They are files with the extension .drv which are listed in the store directory, usually /nix/store. ref あるいは「以下のものの内どれかを指す」として、それらをリンクしておくか
fuzzy wordだけど、実際その辺のものをふわっと指すために便利な気もする
ざっくり言うと、
Nix言語で記述されたbuild方法を記述した.nixのことを指す Nixが利用するpackageはderivationの形式で提供、共有される
用語が揺れるのは困るが、公式に明確な用語の定義が見られないので、Nix Pillsのノリに則って、今のところはこのスクボリンクのまま運用するmrsekut.icon
新しくderivationを定義する
3つの必須項目を指定しさえすればderivationを作れる
code:nix-repl
nix-repl> d = derivation { name = "myname"; builder = "mybuilder"; system = "mysystem"; }
nix-repl> d
«derivation /nix/store/z3hhlxbckx4g3n9sw91nnvlkjvyw754p-myname.drv»
具体例
derivationのattributes
code:nix-repl
nix-repl> d = builtins.derivation {..}
nix-repl> builtins.attrNames d
name
builder
system
all
drvAttrs
builder, name, systemの基本事項
drvPath
.drvfileのpath
/nix/store/<hash-name>.drv
out
自分自身
d == d.out
outPath
nix store上のbuild path
/nix/store/<hash-name>
outputName
type
type = "derivation"というNix内で特別扱いされるfieldになっている
このsetsがderivationであることを表す
参考