Nix
如何在 nixos 中執行 bash 腳本
我正在嘗試創建一個安裝 nvm 的 .nix 文件
首先,我嘗試在 configuration.nix 中添加:
system.activationScripts = { dotfiles = pkgs.lib.stringAfters [ "users" ] '' curl NVM_URL | bash '' } }
但它抱怨 bash 和 curl 沒有定義….
所以我嘗試創建一個小的 .nix 包,
{ stdenv, fileurl }; stdenv.mkDerivation { name="nvm-0.33.0" builder = ./install.sh; fileurl{ url: NVM_GIT_MASTER.zip; }; }
但隨後它抱怨`不能自動呼叫一個沒有預設值的參數的函式{‘stdenv’}
執行 nix-build –dry-run ./text,nix 後
這是怎麼回事?我正在閱讀 nix 頁,並將頭撞在牆上。
我應該認為錯誤是因為在建構派生時
not defined
既不存在 curl 也不存在 bash 。的手冊條目說:PATH``system``system.activationScripts
啟動 NixOS 系統配置時執行的一組 shell 腳本片段。範例包括更新 /etc、創建帳戶等。由於每次啟動系統或執行 nixos-rebuild 時都會執行這些操作,因此它們是冪等且快速的,這一點很重要。
system.activationScripts
所以我想出於這個原因,無論如何你都應該擁有最少的程式碼。該
cannot autocall
錯誤表明您編寫的包在沒有提供參數的情況下被呼叫。解決這個問題的正常方法是使用集合中的 callPackage 函式pkgs.lib
。您可以在整個 nixpkgs 中找到它的使用範例。我認為您沒有使用 nix 正確的方法來解決您的目標。如果您可以找到使用節點包的現有 config.nix 來了解它是如何完成的,那可能值得一看。此外,我注意到nix 中已經支持 nodePackages,所以也許這可能會對您有所幫助。IRC 上的 nixos 頻道也更有幫助。
希望有幫助!