Nix

如何在 nixos 中執行 bash 腳本

  • January 12, 2017

我正在嘗試創建一個安裝 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 頻道也更有幫助。

希望有幫助!

引用自:https://serverfault.com/questions/825235