Open8
スパコンでNixしたい
はじめに
背景として共同利用スパコンにおける制約を簡単に説明します.
- root権限がない
基本的にuser権限でやる必要があります.したがってsudo apt
とかはできませんのでsudoが前提のpackage managerは使えません.linuxbrewはワンチャンありそうですが,あんまり上手く行ってないです. - 利用できる計算資源やinternet環境に強い制限がある
- login nodeで重い処理を行ってはいけない
基本的にuserのshellが走っているのはlogin nodeとか言われる場所で多数のuserのprocessが単一node上で走っている[1]ことが多いです.つまるところ重いbuild processがずっと流れたり,たくさん流れたりすると他のuserの邪魔になるので,login nodeで負荷が高い処理を行うことは非推奨になっているのが普通です. - 計算nodeからinternetに接続できない
スパコンで重いbuildを実行するにはどうするかというと,実際のsimulation等用に供される計算nodeとか言われるnodeを用いて重いbuildを実行するということが多いと思います. 計算nodeには普通はinternet接続がありません(少なくとも接続できるスパコンを見たことないです).したがってtarball落としてきてinstallして...という通常のpackageのinstallの流れを計算nodeで実行することはできません.
- login nodeで重い処理を行ってはいけない
まとめるとスパコンではそれ自身がsudoなしでinstall可能で,package installにもsudoを要求せず,source/binaryのdownloadとbuildを分離して実行できるpackage managerが必要です.
natsukiumさんに1から10まで教えてもらった内容のメモになっています.頭が上がらねぇ...
-
負荷分散のためlogin nodeが複数あるということもありますが ↩︎
スパコンで各userに割り当てられているdisc容量にも強い制約があるので,nixを使うとbinaryサイズが肥大しがちなのは注意が必要かも.
gc関連のメモを後で作成するかもしれない.
non-rootでnixを入れる
そこでnix!となればいいですが,nixの入れ方でよく出てくるDeterminate Nix installerを使うとsudoを要求してきます[1].
大体ここに書いてあります.
あとでこの中の内容を展開するかも.
やらないといけないこととしては
- defaultだとuser権限で作成できない
/nix
を作成しようとするのでそれをuser書き込み可能領域に変更 - その下にあるbinaryとかの置き場所の
/path/to/nix/store
のpathを--store
optionでnix
実行時に渡す必要がある
という感じです.
-
Single-User installとかMulti-User installとかありますがどちらにせよsudo必要です ↩︎
nix
に-j0
あるいは--max-jobs 0
optionを追加してbuild実行を抑制できる
nix
には--offline
optionがありfetchとbuildを分離可能(っぽい)