NixOS와 비 Nix 빌드 공간의 호환성 문제 해결
NixOS란 무엇입니까?
프로그래밍 언어, 빌드 시스템, 패키지 관리자, 마지막으로 다른 모든 것을 기반으로 하는 Linux 운영 체제이기 때문에 정의하기가 약간 어렵습니다.
모든 것은
.nix
파일에 정의되어 있습니다. Nix 언어는 소프트웨어 구축을 위해 설계된 기능적 프로그래밍 언어입니다. 각 프로그램은 빌드 중에 정확한 종속성을 정의하므로 스토어에서 패키지를 다운로드할 때 항상 올바른 버전의 종속성을 다운로드합니다. 이 때문에 Nix는 다른 Linux 배포판과 약간 다릅니다. 일반 Linux에서는 많은 종속성이 배포판과 함께 제공되므로 배포 관리자가 종속성을 가질 수 있습니다hard code
. 정말 좋은 예는 ELF
바이너리에 대한 기본 인터프리터입니다. 더 알고 싶다면 내 이전 을 따르십시오.이슈가 뭐야?
예를 들어
/lib64/ld-linux-x86-64.so.2
는 NixOS에 존재하지 않습니다. 이 파일은 glibc
패키지의 일부이지만 각 바이너리에는 버전이 있기 때문입니다. Nix 패키지는 이러한 철학에 따라 컴파일되었기 때문에 문제가 되지 않지만 일단 Nix 생태계에서 무언가를 다운로드하면 문제가 발생합니다.또 다른 문제는
/bin/bash
도 존재하지 않는다는 것입니다 :). 이게 왜 안 좋은 일인지 굳이 깊게 설명할 필요는 없을 것 같습니다.커널 모듈은 잘 알려진 위치가 아닌 Nix 스토어에도 있습니다.
예를 들어 VS Code 원격 언어 서버와 같은 일부 다른 라이브러리도
node
가 특정.so
파일을 찾지 못하기 때문에 시작할 수 없습니다.이 모든 것을 해결하는 방법?
나는 거기에있는 모든 주제를 다루는 좋은 방법을 찾았습니다. 기본 NixOS 구성
/etc/nixos/configuration.nix
에서 다음과 같이 변경했습니다. environment.variables = {
LD_LIBRARY_PATH = "$(cat ${pkgs.gcc.outPath}/nix-support/cc-ldflags | cut -dL -f2 | sed 's/.$//'):/run/current-system/sw/lib:/run/current-system/kernel-modules/lib";
};
라이브러리 검색 경로를 구성합니다. 첫 번째 부분은 정말 못 생겼습니다 (VS Code 특정). 멋지게 해결하는 방법을 알려주십시오. 그러나 운 좋게도 NixOS는
/run/current-system
에서 시스템의 주요 종속성을 참조하기 때문에 나머지는 괜찮습니다. system.activationScripts.nonposix.text = ''
ln -sf /run/current-system/sw/bin/bash /bin/bash
rm -rf /lib64 ; mkdir /lib64 ; ln -sf ${pkgs.glibc.outPath}/lib/ld-linux-x86-64.so.2 /lib64
'';
bash용 심볼릭 링크와 기본 인터프리터용 심볼릭 링크를 만듭니다.
이런 식으로 우리는 일반 Linux처럼 보이도록 Nix를 속입니다.
내 개인 script-kiddie Nix 구성here을 찾을 수 있습니다.
그러나 록스타 솔루션을 찾고 있다면 다음 리포지토리를 확인하는 것이 좋습니다.
https://github.com/michojel/NixOS by Michal Minář
https://github.com/sagikazarmark/nix-config by Márk Sági-Kazár
(영감을 주셔서 감사합니다)
Reference
이 문제에 관하여(NixOS와 비 Nix 빌드 공간의 호환성 문제 해결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mhmxs/solve-compatibility-problems-at-nixos-vs-non-nix-builds-space-22pf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)