存在するLHCbソフトウェアのパッケージングと展開にNixを使用する、著者は次のように書いた。
この使用を容易にするには、ソフトウェアは長期的にサポートされているオペレーティングシステムよりもはるかに長い間安定している必要があります。さらに、ソフトウェアは最終結果の正確性を保証するために元のバージョンに存在するすべてのバグを再現する必要があります。パッチを慎重に導入できるように、ビルドは反復可能でなければなりません。
ただし、NixOS 構成ファイルには (Rust マニフェストとは異なり) パッケージのバージョンは含まれていません。例えば
environment.systemPackages = with pkgs; [
git
git-lfs
fish
neovim
nixpkgs-fmt
nixos-option
# Basic utils
killall
];
私が正しく理解した場合、パッケージはチャンネル内で更新され、チャンネルが変更されるとパッケージも変更される可能性があります。
それでは、10年後に同じNix環境を取得または構築し、同じバージョンのパッケージをインストールできるようにするにはどうすればよいですか?
答え1
解決策は、チャネルを使用するのではなく、次のソースコードでNixpkgsのバージョンを変更することです。空のNIX_PATHを使用してNixpkgを取得する方法ウィキの記事:
{ pkgs, ... }:
let
nixpkgs = builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/3389f23412877913b9d22a58dfb241684653d7e9.tar.gz";
sha256 = "0wgm7sk9fca38a50hrsqwz6q79z35gqgb9nw80xz7pfdr4jy9pf8";
};
in
{
environment.systemPackages = with pkgs; [
...
];
# Override the `pkgs` argument of modules.
nixpkgs.pkgs = pkgs = import nixpkgs {
# Avoid impurities from `NIXPKGS_CONFIG` environment variable and `~/.config/nixpkgs/config.nix`.
config = {};
};
}
その後、コミットハッシュを最新バージョンに変更し、フィールドを空の文字列に設定し、システムを再構築しようとした後、Nixによって返された新しいハッシュでフィールドを更新することで更新sha256
できます。
もちろん、これはかなり労働集約的であるため、このプロセスを自動化するためのいくつかのツールが登場しました。