Open8

スパコンでNixしたい

ultimatileultimatile

はじめに

背景として共同利用スパコンにおける制約を簡単に説明します.

  • 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で実行することはできません.

まとめるとスパコンではそれ自身がsudoなしでinstall可能で,package installにもsudoを要求せず,source/binaryのdownloadとbuildを分離して実行できるpackage managerが必要です.


natsukiumさんに1から10まで教えてもらった内容のメモになっています.頭が上がらねぇ...

脚注
  1. 負荷分散のためlogin nodeが複数あるということもありますが ↩︎

ultimatileultimatile

スパコンで各userに割り当てられているdisc容量にも強い制約があるので,nixを使うとbinaryサイズが肥大しがちなのは注意が必要かも.
gc関連のメモを後で作成するかもしれない.

ultimatileultimatile

non-rootでnixを入れる

そこでnix!となればいいですが,nixの入れ方でよく出てくるDeterminate Nix installerを使うとsudoを要求してきます[1]

https://wiki.nixos.org/wiki/Nix_Installation_Guide#Installing_without_root_permissions

大体ここに書いてあります.
あとでこの中の内容を展開するかも.

やらないといけないこととしては

  • defaultだとuser権限で作成できない/nixを作成しようとするのでそれをuser書き込み可能領域に変更
  • その下にあるbinaryとかの置き場所の/path/to/nix/storeのpathを--store optionでnix実行時に渡す必要がある
    という感じです.
脚注
  1. Single-User installとかMulti-User installとかありますがどちらにせよsudo必要です ↩︎