Nixos

如何將頻道回滾到上一代 Nixos?

  • January 5, 2022
$ sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
...
600   2020-01-25 21:01:11   
601   2020-02-03 13:44:19   
602   2020-02-09 14:06:20   
603   2020-02-09 14:11:11   
604   2020-02-11 00:02:43   
605   2020-02-13 12:26:22   
606   2020-02-16 16:40:02   (current)

我怎樣才能獲得 Nixos 一代的送出/頻道生成(這是一件事嗎?) - 並可能將頻道回滾到它?

或者換句話說,我怎樣才能將我的“通道狀態”回滾到第 605 代時的狀態?


為什麼我想知道是因為我做了一個sudo nix-channel --update,sudo nixos-rebuild switch幾天前 - 無論發生什麼包更新 - 導致系統不穩定。

所以為了緩解這種情況,我啟動並繼續使用老一代(605)。

我現在想更新我的 Nixos 系統配置中的特定包,並將更改基於605而不是最新的606.


我確實找到了https://stackoverflow.com/questions/39090387/how-to-undo-nix-channel-update ( nix-channel --rollback..) 但是我可能已經更新了幾次頻道 - 所以“最後一個”頻道狀態可能不是什麼我需要。

我確實注意到您可以指定通道代號作為此命令的參數 - 但我不確定它與 nixos 代之間的關係是什麼?它似乎與我嘗試605的結果不同:

sudo nix-channel --rollback 605
error: generation 605 does not exist
error: program '/nix/store/cs47wjxwiqgyl1nkjnksyf3s2rb93piq-nix-2.3.2/bin/nix-env' failed with exit code 1

我假設你想要sudo nix-channel --rollback?例如,您也可以手動檢查/nix/var/nix/profiles/per-user/root/channels-*/manifest.nix——那些包含名稱、送出雜湊等。

TLDR;

**配置文件生成和頻道生成是不同的東西。通道生成跟踪可用 派生(包)列表的更改,配置文件生成跟踪已安裝的 派生及其版本。ls -g /nix/var/nix/profiles/per-user/my_user_name/將一目了然地告訴您有關目前一代的所有資訊。

/TLDR;

弗拉基米爾的回答是完全正確的,但由於可怕的長路很容易被駁回;)

更新頻道時:

nix-channel --update <my-channel-alias>

您將目前使用者的頻道生成提前一個。Onlymy-channel-alias受到影響,但這仍然會導致建構全新的一代,並且您的環境會引用它。

不幸的是,nix-channel沒有切換到列出頻道代。這就是長路徑的來源。您可以看到channels指向channels-4-linkuser 的連結my_user_name。因此,my_user_name的目前選擇的頻道世代為 4。

ls -g /nix/var/nix/profiles/per-user/my_user_name/
 channels -> channels-4-link                                                      
 channels-1-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment                                                      
 channels-2-link -> /nix/store/j5j5avwf07a2ajr3jszj9vv8l5ybgycm-user-environment                                                      
 channels-3-link -> /nix/store/xb0accm8k1zsll5wrxck7gj0xbdv8zk7-user-environment                                                      
 channels-4-link -> /nix/store/dlh9wlpx59lifgni06q0vwgymshn9jja-user-environment                                                      
 channels-5-link -> /nix/store/8wymqxsdy3m7gmh6f21m49hl98gy75aa-user-environment                                                      
 channels-6-link -> /nix/store/3sf1c989bbfrrxrpr235xqjqvd89apsi-user-environment                                                      
 profile -> profile-1-link                                                      
 profile-10-link -> /nix/store/kwlgbfbpwjhgb42bp7c899l8a1cyjdcl-user-environment                                                      
 profile-1-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment                                                      
 profile-2-link -> /nix/store/c614r1kmrg9nsx2qvd944k5afj49qim7-user-environment                                                      
 profile-3-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment                                                      
 profile-4-link -> /nix/store/2blnby22dvc92i9ahprwkl504ngj75ad-user-environment                                                      
 profile-5-link -> /nix/store/ahd9dzfkgvyfqdkdw8cw8w8dyqak66b4-user-environment                                                      
 profile-6-link -> /nix/store/gbjmn5rcjl4iscfvgms9hk26vhpr6pv2-user-environment                                                      
 profile-7-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment                                                      
 profile-8-link -> /nix/store/k50s7rb4gz3pibd0r8136y628al74www-user-environment                                                      
 profile-9-link -> /nix/store/57904rflsfh46y7fxi62rzc7sidc9vmq-user-environment

相比之下,配置文件(使用者環境)生成通過以下nix-env操作進行了改進:

--install
--update
--uninstall

如 nix-env 的手冊頁中所述。

man nix-env | grep "new user environment"

並且可以通過以下方式輕鬆查詢目前使用者的不同配置文件生成:

nix-env --list-generations

引用自:https://unix.stackexchange.com/questions/568770