2023-01-18 セキュリティアップデートのためにgit 2.39.1をインストールしたい
背景
gitにCVEがでた
nixpkgsの反映を待つと時間がかかるためパッチをあててインストールしたい
nixpkgsへのPull Request
pkgs/applications/version-management/git/default.nix へのversionとハッシュ値を変更しているだけである
code: git.nix
let
version = "2.39.1";
svn = subversionClient.override { perlBindings = perlSupport; };
in
stdenv.mkDerivation (finalAttrs: {
pname = "git"
+ lib.optionalString svnSupport "-with-svn"
+ lib.optionalString (!svnSupport && !guiSupport && !sendEmailSupport && !withManual && !pythonSupport && !withpcre2) "-minimal";
inherit version;
src = fetchurl {
sha256 = "sha256-QKOKCEezDDcbNYc7OvzxI4hd1B6j7Lv1EO+pfzzlwWE=";
};
versionは外から受け付けずに pnameとsrcに付与される。この対応が少し手間になりそう。
srcとnameとpnameを変えてあげることができれば良さそう
対応案
git のderivationのversionとハッシュ値を変える
derivationの確認をする
code: キーの確認
builtins.attrNames (import <nixpkgs> {}).git
{ inherit ((import <nixpkgs> {}).git) name pname version src;}
{ name = "git-2.39.0"; pname = "git"; version = "2.39.0"; src = «derivation /nix/store/l2bq34wb96pmfxhr59kgwpp5l7qw891j-git-2.39.0.tar.xz.drv»; version = "2.39.0"; } }
srcがdevrivationになっている
code: git-2.39.0.tar.xz.drvの確認
builtins.attrNames (import <nixpkgs> {}).git.src
(import <nixpkgs> {}).git.src.urls
fetchUrlを使ってderivationを作ってあげれば良さそうではある
必要な値を差し替えてみる
code: override.nix
{
packageOverrides = pkgs:
with pkgs;
let git_version = "2.39.1";
git_2_39_1 = git // {
version = git_version;
name = "git-${git_version}";
src = fetchurl {
sha256 = "sha256-QKOKCEezDDcbNYc7OvzxI4hd1B6j7Lv1EO+pfzzlwWE=";
};
};
in {
git = git_2_39_1;
};
}
code: repl.nix
let git = (import <nixpkgs> {}).git;
in { inherit (git) name pname version; urls = builtins.elemAt git.src.urls 0;}
期待した感じになっていそう。しかし、他のderivationのgitと競合してしまう。
overrideDerivationしてみるとどうなるだろう
code: config.nix
{
packageOverrides = pkgs:
with pkgs;
let git_2_39_1 = git.overrideDerivation (drv:
let version = "2.39.1";
in {
inherit version;
name = "git-${version}";
src = fetchurl {
sha256 = "sha256-QKOKCEezDDcbNYc7OvzxI4hd1B6j7Lv1EO+pfzzlwWE=";
};
});
in {
git = git_2_39_1;
};
}
だめだった。
code: error
error: files '/nix/store/j438mfagnyshw5l596l3lv106cid1ivq-git-2.39.1/bin/git-receive-pack' and '/nix/store/6bpk3d4vlhc5pjdxcifd49db0jc8rxql-home-manager-path/bin/git-receive-pack' have the same priority 5; use 'nix-env --set-flag priority NUMBER INSTALLED_PKGNAME' or type 'nix profile install --help' if using 'nix profile' to find out howto change the priority of one of the conflicting packages (0 being the highest priority)
home-manager-pathが原因なので消してみる nix-env --uninstall home-manager-path
nix-env -iA nixpkgs.git でインストールすることができた
code: shell
$ git -v
git version 2.39.1
関連