2017-08-08 42 views
2

[披露:我之前在NixOS頻道問過這個問題,但30分鐘後沒有得到答案,這是一個繁忙的頻道。如果我得到一個,我會在這裏複製]如何將文本追加到NixOS中的/ etc/...配置文件中?

我想添加一些行到NixOS的配置文件(例如/etc/pam.d/sudo)。在pam.nix中可用的配置選項不包括我要添加的行(在本例中爲account requisite pam_time.so),並且它也不包括extraConfig選項。

我知道我可以創建一個使用environement.etc.filename.text所以我說去新的配置文件,但sudo nixos-rebuild switch則抱怨說,它有兩個來源爲配置文件,該負責人之一,礦(mismatched duplicate entry /nix/… <-> /nix/…):

environment.etc."pam.d/sudo".text = ''blah''; 

在NixOS中是否有一種通用的方法來追加到/ etc/configuration文件(或者修補它)?

或者是修改系統.nix文件的唯一方法(例如修改pam.nix,我不願意這麼做,因爲它會與未來的更新相沖突)?

+0

此網站是有關編程的問題。你的問題不是寫程序。請爲您的問題尋找合適的場所。並且請顯示一些耐心等待您的***免費***幫助。 –

+1

@DaleWilson https:// stackoverflow。com/q/41007258是一個關於NixOS配置(相關但不重複)的問題,它在本網站上,但你說得對,最好轉移到SuperUser。至於耐心,我想你是指我以前在IRC頻道上詢問的,這是一個非常繁忙的頻道,並且消息很快就會移動到日誌中,所以我從經驗中知道,在該頻道上它是快速答案或者沒有答案。這個問題很普遍,可以幫助其他人(我沒有具體詢問PAM),因此無論如何都值得在永久性網站上分享答案。 –

+0

不是超級用戶。 [Unix/Linux SE](https://unix.stackexchange.com)是一個更合適的地方,並且有許多與NixOS相關的問題。 –

回答

0

對於/etc/pam.d/sudo和其他文件在同一目錄中的文件,一個簡單的解決方案是使用security.pam.services.sudo.text,但我目前的最佳嘗試需要硬編碼該文件的原始內容。

security.pam.services.sudo.text = '' 
existing contents of /etc/pam.d/sudo … 
extra lines … 
''; 

希望其他的答案會拿出改變的配置文件(並保持其原始內容)的更通用的方式。

0

您可以使用mkOverride或快捷鍵mkDefault將行添加到默認值security.pam.services.sudo.text,以使您的值具有與默認值相同的優先級。您可以使用mkOrder或快捷方式mkBeforemkAfter來控制訂單。所以要追加,你可以這樣做:

security.pam.services.sudo.text = pkgs.lib.mkDefault(pkgs.lib.mkAfter "# hi"); 

當一個選項有多個值時,只保留具有最低優先級的值。如果仍有多個值,則會對它們進行排序和合並。 mkOverridemkOrder創建特殊值,modules.nix中的代碼可以識別何時執行此操作。普通值具有默認優先級(100)和排序順序(1000)。 pam.nix使用mkDefault作爲它爲text選項創建的值,這會使優先級爲1000,因此普通值將替換它而不是合併。

NixOS manual section on Modularity解釋了一點。

我不認爲你可以通過environment.etc這樣做,因爲目標文件不必與屬性名稱匹配,並且pam.nix特別沒有命名爲environment.etc中的任何條目。它更像是按順序處理的指令列表。請參閱etc.nixmake-etc.sh

相關問題