Open9

Nix 関連のメモ

hankei6kmhankei6km

CodeSandbox で nix を利用できるようになったのでと、DevBox が気になっていたのでメモなど。

Nix とは?(参考リンク)

NixOS のパッケージマネージャーらしい(OS から分離ではなく、パッケージマネージャーを使ってディストリビューションを作ったらしい?)。

https://nixos.org/
https://qiita.com/hnakano863/items/8cab4d7bd7778850b549
https://qiita.com/junjihashimoto@github/items/54f8e25071b2800ee2ee
https://tech.dely.jp/entry/2018/12/03/110227

面白いのはインスールした状態をロールバックできること(スナップショット的な感じ)。generation と呼ぶらしい。

hankei6kmhankei6km

パッケージ操作

検索

$ nix-env -qa <name>

インスール、アンインストール

$ nix-env --install <name>
$ nix-env --uninstall <name>
hankei6kmhankei6km

generation

パッケージ操作すると自動作成されるスナップショットみたいなもの?

一覧

$ nix-env --list-generations

ロールバック(1つ前に戻る)

$ nix-env --rollback

切り替え

$ nix-env --switch-generation <no>

エリアス的なものをつけられないかと思ったが見当たらなかった(そういうのは devboxかな)。

hankei6kmhankei6km

GC

pacman-Sc みたいな感じこと。

$ nis-store --gc

これを実行してもどこかの generation で使っているものは消えないもよう。

➜  ~ nix-env --install acl

➜  ~ command -v setfacl
/project/home/hankei6km/.nix-profile/bin/setfacl

➜  ~ nix-env --uninstall acl
uninstalling 'acl-2.3.1'
building '/nix/store/xsk9wjy0dpp7w7d3r3bkzxzaklqdzq6q-user-environment.drv'...

➜  ~ command -v setfacl

➜  ~ nix-env --list-generations
1   2023-01-17 07:45:20   
2   2023-01-17 07:46:37   (current)

➜  ~ nix-env --rollback
switching profile from version 2 to 1

➜  ~ command -v setfacl
/project/home/hankei6km/.nix-profile/bin/setfacl

➜  ~ nix-env --switch-generation 2
switching profile from version 1 to 2

➜  ~ command -v setfacl

➜  ~ nix-store --gc
<snip...>
deleting unused links...
note: currently hard linking saves -0.00 MiB
2975 store paths deleted, 10.75 MiB freed

➜  ~ nix-env --rollback           
switching profile from version 2 to 1
➜  ~ command -v setfacl
/project/home/hankei6km/.nix-profile/bin/setfacl

generation を削除すると消える。

➜  ~ nix-env --switch-generation 2
switching profile from version 1 to 2

➜  ~ nix-env --delete-generations 1
removing profile version 1

➜  ~ nix-store --gc
<snip...>
deleting unused links...
note: currently hard linking saves -0.00 MiB
212 store paths deleted, 31.73 MiB freed

hankei6kmhankei6km

CodeSndbox 環境固有の内容

2022-01 時点での内容。

tasks.json

tasks.json で作成したタスクは pitcher-host ユーザーで実行される。よって、普通に nix-env -i acl などを指定しても自分(Sandbox のユーザー)の環境は操作できない。

これを回避する方法は不明。

hankei6kmhankei6km

csb.nix

上記に対する直接の回避策ではないが、プロジェクトのルート直下(.codesandbox の下ではない)に csb.nix を作成しておくとブランチ開始後最初にターミナルを開くと実行される。

.nix は Nix Laungae というものらしい、この辺はまだ理解できていない。

https://codesandbox.io/docs/tutorial/install-system-packages

デフォルトブランチに配置しておくと、ブランチ作成時に実行される。が、ターミナルを開始するまでは実行されないもよう。その影響か、VSCode から接続した場合、インストールされたものはターミナルの中でしか実行できない(ように見える)。

下記のようなことになっている。

  • podman-compose をインストールし Dev Container で使おうとするとエラー(podman-compose は Dev Container 対応版をインストールしている)
  • nixpkgs-fmt をインストールしても Nix IDE 拡張機能から利用できない

いずれの場合も、ターミナルから手動でインストールすると利用できる。

hankei6kmhankei6km

ブランチ(サンドボックス)のリスタート

ブランチ(サンドボックス)をリスタートしても generation は保持されている。

hankei6kmhankei6km

nix-env -qa が kill されるようになった(2023-02-08)

Personal Free プランの場合。

途中で kill される。他の要因もあるかもしれなが、メモリーが足りなくなったもよう。

とくに何もしてないサンドボックスだと現在(2023-02-08)では下記の通り。

$ free -h
               total        used        free      shared  buff/cache   available
Mem:           2.6Gi       492Mi       2.1Gi       0.0Ki        96Mi       2.0Gi
Swap:             0B          0B          0B

メモは残してなかったが、実行できていたときの total は 3.x G の前半ではあったはず(「4 じゃなくて 3 なんだ、バルーニング?」と思った記憶があるので 3 という値はあってると思う)。

調べたら実際に減ってる。

https://github.com/codesandbox/docs/commit/c7d59c5835ec063830d498d146b369e474808746

結果が表示されまでに結構時間かかるなとは思っていたけど、-qa って結構リソース消費する?それても何かの不具合?