2017-09-18 6 views
0

Je reçois l'erreur de collision suivante en essayant de construire un environnement qui, d'après ce que je peux voir, ne devrait pas avoir de collision (dans ce cas, scala-env dépend de ideaLocal, donc ça ne devrait pas entrer en conflit) :Comment faire en sorte qu'une dérivation ne soit pas incompatible avec un environnement dérivé dans Nix?

... 
idea-IU-172.4155.36/bin/libyjpagent-linux.so 
idea-IU-172.4155.36/bin/libyjpagent-linux64.so 
idea-IU-172.4155.36/help/ideahelp.jar 
idea-IU-172.4155.36/lib/libpty/linux/x86/libpty.so 
idea-IU-172.4155.36/lib/libpty/linux/x86_64/libpty.so 
idea-IU-172.4155.36/bin/format.sh 
idea-IU-172.4155.36/bin/fsnotifier 
idea-IU-172.4155.36/bin/fsnotifier-arm 
idea-IU-172.4155.36/bin/fsnotifier64 
idea-IU-172.4155.36/bin/idea.sh 
idea-IU-172.4155.36/bin/inspect.sh 
idea-IU-172.4155.36/bin/printenv.py 
idea-IU-172.4155.36/bin/restart.py 
building path(s) ‘/nix/store/29g92lnpi0kywy9x7vcgl9yivwa2blm6-scala-env’ 
created 696 symlinks in user environment 
building path(s) ‘/nix/store/qrnbff8nhpmxlzkmv508aymz5razbhgf-user-environment’ 
Wide character in die at /nix/store/64jc9gd2rkbgdb4yjx3nrgc91bpjj5ky-buildenv.pl line 79. 
collision between ‘/nix/store/75sz9nklqmrmzxvf0faxmf6zamgaznfv-idea-local/bin/idea’ and ‘/nix/store/29g92lnpi0kywy9x7vcgl9yivwa2blm6-scala-env/bin/idea’; use ‘nix-env --set-flag priority NUMBER PKGNAME’ to change the priority of one of the conflicting packages 
builder for ‘/nix/store/8hp5kdicxy9i02fa07vx85p1gvh4i1bq-user-environment.drv’ failed with exit code 255 
error: build of ‘/nix/store/8hp5kdicxy9i02fa07vx85p1gvh4i1bq-user-environment.drv’ failed 

est ici l'expression de Nix (dont la plupart peuvent être ignorés, mais il est pas trop long donc je vais coller tout ça):

with import <nixpkgs> { }; 
let 
    ideaLocal = stdenv.mkDerivation { 
    name = "idea-local"; 
    buildInputs = [ ]; 
    builder = builtins.toFile "builder.sh" '' 
     source $stdenv/setup 
     mkdir -p $out/bin 
     tar zxvf $src -C $out/ 
     ln -sf $out/idea-IU* $out/idea 
     ln -sf $out/idea/bin/idea.sh $out/bin/idea 
    ''; 
    shellHook = '' 
     IDEA_JDK=/usr/lib/jvm/zulu-8-amd64 
    ''; 
    src = fetchurl { 
     url = https://download.jetbrains.com/idea/ideaIU-2017.2.4-no-jdk.tar.gz; 
     sha256 = "15a4799ffde294d0f2fce0b735bbfe370e3d0327380a0efc45905241729898e3"; 
    }; 
    priority = 5; 
    }; 
in 
buildEnv { 
    name = "scala-env";                                                                                       
    paths = [                                                                                         
    ammonite                                                                                         
    boehmgc 
    clang 
    dbus # needed non-explicitly by vscode 
    emacs 
    git 
    # idea.idea-ultimate # disabled temporarily 
    ideaLocal 
    less 
    libunwind 
    openjdk 
    openssh 
    re2 
    rsync 
    sbt 
    stdenv 
    syncthing # for syncrhonizing data between containers 
    tmux 
    unzip 
    vscode 
    zlib 
    ]; 
    # builder = builtins.toFile "builder.sh" '' 
    # source $stdenv/setup 
    # mkdir -p $out 
    # echo "" > $out/Done 
    # echo "Done setting up Scala environment." 
    # ''; 
    buildInputs = [ makeWrapper ];                                                                                    
    # TODO: better filter, use ammonite script?: 
    postBuild = '' 
    for f in $(ls -d $out/bin/* | grep "idea"); do 
    sed -i '/IDEA_JDK/d' $f 
    wrapProgram $f \ 
     --set IDEA_JDK "/usr/lib/jvm/zulu-8-amd64" \ 
     --set CLANG_PATH "${clang}/bin/clang" \ 
     --set CLANCPP_PATH "${clang}/bin/clang++" 
    done 
    ''; 

} 

Modifier:

(DevContainer)which idea 
/home/brandon/.nix-profile/bin/idea 
(DevContainer)ls -last /home/brandon/.nix-profile/bin/idea 
4 lrwxrwxrwx 1 brandon brandon 63 Jan 1 1970 /home/brandon/.nix-profile/bin/idea -> /nix/store/75sz9nklqmrmzxvf0faxmf6zamgaznfv-idea-local/bin/idea 

Donc, il semble que ideaLocal soit importé en tant qu'environnement - quelle est la bonne façon de le faire simplement installer comme un paquet qui est une dépendance de scalaEnv?

+1

Je vois que deux « environnements utilisateur » sont en construction. Le premier réussit tandis que le second échoue. Est-il possible que vous construisiez votre environnement et l'installiez ensuite dans votre environnement utilisateur (avec 'nix-env') où votre environnement déclaratif (considéré comme un paquet normal contenant' bin/idea') entre en collision avec un impératif préexistant installation de 'idée'? –

+0

@RobertHensing merci - voir mon édition. – bbarker

Répondre

0

Apparemment, la solution était de préciser le profil que je pense que le nom de l'environnement, de sorte que les deux environnements ne sont pas installés simultanément:

nix-env -if scala-default.nix -p scala-env