我如何覆盖config.nix中idea-ultimate或idea-community所需的jetbrains jdk依赖关系?

问题描述 投票:0回答:2

我已经按照nixpkgs手册的declarative package management设置了本地nix配置。

我想将idea-ultimate作为myPackages之一,但目前对jetbrains jdk的依赖项是broken,指向macOS上不存在的软件包。

正在尝试下载jbrsdk-11_0_2-osx-x64-b485.1.tar.gz而不是jbrsdk-11_0_4-osx-x64-b485.1.tar.gz

[我以为我可以通过如下重写jetbrainsjdk来解决此问题,但是当我执行error: attribute 'jetbrainsjdk' missing, at /Users/ldeck/.config/nixpkgs/config.nix:4:20之类的操作时,就会得到nix-env -qa ‘jetbrains.*’

重写idea-ultimate以便使用固定的jdk的正确方法是什么?

这里是我的~./config/nixpkgs/config.nix

{
  allowUnfree = true;
  packageOverrides = pkgs: rec {
    jetbrainsjdk = pkgs.jetbrainsjdk.override {
      version = "520.11";
      src = pkgs.fetchurl {
        url = "https://bintray.com/jetbrains/intellij-jdk/download_file?file_path=jbrsdk-11_0_4-osx-x64-b${jetbrainsjdk.version}.tar.gz";
        sha256 = "0d1qwbssc8ih62rlfxxxcn8i65cjgycdfy1dc1b902j46dqjkq9z";
      };
    };


    myProfile = pkgs.writeText "my-profile" ''
      export PATH=$HOME/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/sbin:/bin:/usr/sbin:/usr/bin
      export MANPATH=$HOME/.nix-profile/share/man:/nix/var/nix/profiles/default/share/man:/usr/share/man
    '';
    myPackages = with pkgs; buildEnv {
      name = "my-packages";
      paths = [
        (runCommand "profile" {} ''
          mkdir -p $out/etc/profile.d
          cp ${myProfile} $out/etc/profile.d/my-profile.sh
        '')
    aspell
    bc
    coreutils
    direnv
    emacs
    emscripten
    ffmpeg
    gdb
    git
    hello
    jq
    nixops
    nox
    scala
    silver-searcher
      ];
      pathsToLink = [ "/share/man" "/share/doc" "/bin" "/etc" "/Applications" ];
      extraOutputsToInstall = [ "man" "doc" ];
    };
  };
}


UPDATE 1

感谢@ChrisStryczynski,他建议我需要with pkgs,我走得更远。

但是现在的问题是,在尝试使用自定义jdk安装最终版本的想法时,仍然需要从某个位置断开,不存在的jbrsdk-11_02-osx-x64-b485.1.tar.gz.drv

以下更新的配置和日志。

{
  allowUnfree = true;
  packageOverrides = pkgs: **with pkgs;** rec {

    myJetbrainsJdk = **pkgs.jetbrains.jdk.overrideAttrs** (oldAttrs: rec {
      version = "520.11";
      src = pkgs.fetchurl {
        url = "https://bintray.com/jetbrains/intellij-jdk/download_file?file_path=jbrsdk-11_0_4-osx-x64-b520.11.tar.gz";
        sha256 = "0d1qwbssc8ih62rlfxxxcn8i65cjgycdfy1dc1b902j46dqjkq9z";
      };
    });

    myIdeaUltimate = pkgs.jetbrains.idea-ultimate.override {
      jdk = myJetbrainsJdk;
    };

    ...

    myPackages = with pkgs; buildEnv {
    ...
    myIdeaUltimate
      ];
      ...
    };
  };
}

日志

nix-channel --update; nix-env -iA nixpkgs.myPackages
unpacking channels...
replacing old 'my-packages'
installing 'my-packages'
these derivations will be built:
  /nix/store/9kfi3k9q6hi7z3lwann318hndbah535v-idea-ultimate.desktop.drv
  /nix/store/ica1m5yq3f3y05xnw7ln1lnfvp0yjvyf-download_file?file_path=jbrsdk-11_0_4-osx-x64-b520.11.tar.gz.drv
  /nix/store/bf2hwhrvfl8g77gdiw053rayh06x0120-jetbrainsjdk-520.11.drv
  /nix/store/fazsa1a4l70s391rjk9yyi2hvrg0zbmp-download_file?file_path=jbrsdk-11_0_2-osx-x64-b485.1.tar.gz.drv
  /nix/store/fwwk976sd278zb68zy9wm5pkxss0rnhg-jetbrainsjdk-485.1.drv
  /nix/store/s3m2bpcyrnx9dcq4drh95882n0mk1d6m-ideaIU-2019.2.4-no-jbr.tar.gz.drv
  /nix/store/9kiajpmmsp3i6ysj4vdqq8dzi84mnr73-idea-ultimate-2019.2.4.drv
  /nix/store/jh1ixm54qinv8pk6kypvv6n6cfr4sws8-my-packages.drv
these paths will be fetched (0.02 MiB download, 0.12 MiB unpacked):
  /nix/store/hp90sbwznq1msv327f0lb27imvcvi80h-libnotify-0.7.8
building '/nix/store/9kfi3k9q6hi7z3lwann318hndbah535v-idea-ultimate.desktop.drv'...
copying path '/nix/store/hp90sbwznq1msv327f0lb27imvcvi80h-libnotify-0.7.8' from 'https://cache.nixos.org'...
building '/nix/store/fazsa1a4l70s391rjk9yyi2hvrg0zbmp-download_file?file_path=jbrsdk-11_0_2-osx-x64-b485.1.tar.gz.drv'...

trying https://bintray.com/jetbrains/intellij-jdk/download_file?file_path=jbrsdk-11_0_2-osx-x64-b485.1.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (22) The requested URL returned error: 404 Not Found
error: cannot download download_file?file_path=jbrsdk-11_0_2-osx-x64-b485.1.tar.gz from any mirror
builder for '/nix/store/fazsa1a4l70s391rjk9yyi2hvrg0zbmp-download_file?file_path=jbrsdk-11_0_2-osx-x64-b485.1.tar.gz.drv' failed with exit code 1
building '/nix/store/ica1m5yq3f3y05xnw7ln1lnfvp0yjvyf-download_file?file_path=jbrsdk-11_0_4-osx-x64-b520.11.tar.gz.drv'...
cannot build derivation '/nix/store/fwwk976sd278zb68zy9wm5pkxss0rnhg-jetbrainsjdk-485.1.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/9kiajpmmsp3i6ysj4vdqq8dzi84mnr73-idea-ultimate-2019.2.4.drv': 1 dependencies couldn't be built
cannot build derivation '/nix/store/jh1ixm54qinv8pk6kypvv6n6cfr4sws8-my-packages.drv': 1 dependencies couldn't be built
error: build of '/nix/store/jh1ixm54qinv8pk6kypvv6n6cfr4sws8-my-packages.drv' failed
intellij-idea package overriding nix
2个回答
0
投票

而不是:

nix-env -iA nixpkgs.myPackages

只需:

nix-env -iA nixpkgs.myIdeaUltimate

问题是:

  myPackages = with pkgs; buildEnv {
    ...
    myIdeaUltimate
      ];
      ...
    };

这里您仍在引用旧的pkgs.myIdeaUltimate

Nixos似乎做了一些处理,用pkgs中的相应内容替换packageOverrides


0
投票

感谢Danylo Hlynskyi通过discussion on discourse.nixos.org titled “How do you discover the override attributes for a derivation",使用叠加层找到了解决方案。

〜/ config / nixpkgs / overlays / 02-jetbrains.nix

self: super:
{
  jetbrains = super.jetbrains // {
    jdk = super.jetbrains.jdk.overrideAttrs (oldAttrs: rec {
      version = "520.11";
      src = super.fetchurl {
        url = "https://bintray.com/jetbrains/intellij-jbr/download_file?file_path=jbrsdk-11_0_4-osx-x64-b520.11.tar.gz";
    sha256 = "3fe1297133440a9056602d78d7987f9215139165bd7747b3303022a6f5e23834";
      };
      passthru = oldAttrs.passthru // {
        home = "${self.jetbrains.jdk}/Contents/Home";
      };
    });
    idea-ultimate = super.jetbrains.idea-ultimate.overrideAttrs (_: {
      name = "idea-ultimate.2019.2.4";
      src = super.fetchurl {
        url = "https://download.jetbrains.com/idea/ideaIU-2019.2.4-no-jbr.tar.gz";
    sha256 = "09mz4dx3zbnqw0vh4iqr8sn2s8mvgr7zvn4k7kqivsiv8f79g90a";
      };
    });
  };
}

安装:nix-env -iA 'nixpkgs.jetbrains.idea-ultimate’

执行:idea-ultimate

难题的关键部分是重写passthru.home变量以指向覆盖的jdk,而不是super所需的jdk。否则,您将下载旧的jdk以用于运行时。

passthru = oldAttrs.passthru // {
    home = "${self.jetbrains.jdk}/Contents/Home”;
};

没有附加/Contents/Home,因为self.jetbrains.jdk不是有效的住所,所以创意无法启动。

© www.soinside.com 2019 - 2024. All rights reserved.