Nix 関連のメモ
CodeSandbox で nix を利用できるようになったのでと、DevBox が気になっていたのでメモなど。
Nix とは?(参考リンク)
NixOS のパッケージマネージャーらしい(OS から分離ではなく、パッケージマネージャーを使ってディストリビューションを作ったらしい?)。
面白いのはインスールした状態をロールバックできること(スナップショット的な感じ)。generation と呼ぶらしい。
パッケージ操作
検索
$ nix-env -qa <name>
インスール、アンインストール
$ nix-env --install <name>
$ nix-env --uninstall <name>
generation
パッケージ操作すると自動作成されるスナップショットみたいなもの?
一覧
$ nix-env --list-generations
ロールバック(1つ前に戻る)
$ nix-env --rollback
切り替え
$ nix-env --switch-generation <no>
エリアス的なものをつけられないかと思ったが見当たらなかった(そういうのは devboxかな)。
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
CodeSndbox 環境固有の内容
2022-01 時点での内容。
tasks.json
tasks.json
で作成したタスクは pitcher-host
ユーザーで実行される。よって、普通に nix-env -i acl
などを指定しても自分(Sandbox のユーザー)の環境は操作できない。
これを回避する方法は不明。
csb.nix
上記に対する直接の回避策ではないが、プロジェクトのルート直下(.codesandbox
の下ではない)に csb.nix
を作成しておくとブランチ開始後最初にターミナルを開くと実行される。
.nix
は Nix Laungae というものらしい、この辺はまだ理解できていない。
デフォルトブランチに配置しておくと、ブランチ作成時に実行される。が、ターミナルを開始するまでは実行されないもよう。その影響か、VSCode から接続した場合、インストールされたものはターミナルの中でしか実行できない(ように見える)。
下記のようなことになっている。
-
podman-compose
をインストールし Dev Container で使おうとするとエラー(podman-compose
は Dev Container 対応版をインストールしている) -
nixpkgs-fmt
をインストールしても Nix IDE 拡張機能から利用できない
いずれの場合も、ターミナルから手動でインストールすると利用できる。
ブランチ(サンドボックス)のリスタート
ブランチ(サンドボックス)をリスタートしても generation は保持されている。
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 という値はあってると思う)。
調べたら実際に減ってる。
結果が表示されまでに結構時間かかるなとは思っていたけど、-qa
って結構リソース消費する?それても何かの不具合?
個人利用な channel の作成
長くなりそうだったので個別にスクラップを作った。