자주 묻는 질문#

Nix#

Nix 언어 코드를 자동으로 포맷하려면 어떻게 합니까?#

nixfmt는 Nix 언어 코드의 공식 포매터입니다. 설치 방법은 해당 소스 저장소를 참고하십시오.

nixfmt는 Nixpkgs의 모든 코드를 포맷하는 데 사용됩니다.

Nix 언어에서 경로와 문자열을 서로 변환하려면 어떻게 합니까?#

문자열 보간과 경로 및 문자열 연산자에 관한 Nix 참조 매뉴얼을 참고하십시오.

패키지의 역의존성을 빌드하려면 어떻게 합니까?#

$ nix-shell -p nixpkgs-review --run "nixpkgs-review wip"

Nix로 $HOME의 dotfile을 관리하려면 어떻게 합니까?#

nix-community/home-manager를 참고하십시오.

Nixpkgs 저장소의 클론으로 패키지를 업데이트하거나 새로 작성하려면 어떻게 합니까?#

Nix로 기존 소프트웨어 패키징하기 문서와 Nixpkgs 기여 가이드를 읽어 보십시오.

NixOS#

Nix가 아닌 실행 파일은 어떻게 실행합니까?#

NixOS에서는 일반적인 Linux 환경용으로 만든 동적 링크 실행 파일을 별도 조치 없이 바로 실행할 수 없습니다. NixOS는 설계상 전역 라이브러리 경로가 없고 파일시스템 계층 구조 표준(FHS)도 따르지 않기 때문입니다.

실행 환경에 대한 기대가 이렇게 어긋나는 문제는 몇 가지 방법으로 해결할 수 있습니다.

  • Nixpkgs에 패키지된 버전이 있다면 그것을 사용하십시오. 사용 가능한 패키지는 https://search.nixos.org/packages에서 검색할 수 있습니다.

  • 프로그램의 Nix 표현식을 작성하여 자신의 설정 안에서 패키지하십시오.

    여기에는 여러 방법이 있습니다.

    • 소스에서 빌드하십시오.

      많은 오픈 소스 프로그램은 파일이 설치될 위치를 컴파일할 때 매우 유연하게 정할 수 있습니다. 이에 대한 소개는 Nix로 기존 소프트웨어 패키징하기 문서를 참고하십시오.

    • autoPatchelfHook을 사용하여 프로그램의 ELF 헤더에 라이브러리 경로가 들어가도록 수정하십시오.

      소스에서 빌드할 수 없을 때 이 방법을 사용하십시오.

    • buildFHSEnv로 프로그램을 감싸 FHS와 비슷한 환경에서 실행하십시오.

      이 방법은 최후의 수단이지만 필요한 경우도 있습니다. 예를 들어 프로그램이 다른 실행 파일을 내려받아 실행하는 경우입니다.

  • nix-ld를 사용하여 패키지화되지 않은 프로그램에만 적용되는 라이브러리 경로를 만드십시오. configuration.nix에 다음을 추가하십시오:

    1  programs.nix-ld.enable = true;
    2  programs.nix-ld.libraries = with pkgs; [
    3    # Add any missing dynamic libraries for unpackaged programs
    4    # here, NOT in environment.systemPackages
    5  ];
    

    그런 다음 nixos-rebuild switch를 실행하고, 새 환경 변수가 적용되도록 로그아웃했다가 다시 로그인하십시오. (이 과정은 nix-ld를 활성화할 때만 필요하며, 포함된 라이브러리의 변경 사항은 다시 빌드하면 즉시 적용됩니다.)

    참고

    nix-ld는 x86_64 머신의 32비트 실행 파일에서는 작동하지 않습니다.

  • steam-run을 사용하여 Steam 패키지용으로 만들어진 FHS와 유사한 환경에서 프로그램을 실행하십시오:

    $ nix-shell -p steam-run --run "steam-run <command>"
    

나만의 ISO를 빌드하려면 어떻게 해야 합니까?#

http://nixos.org/nixos/manual/index.html#sec-building-image를 참조하십시오.

NixOS 테스트의 머신에 접속하려면 어떻게 해야 합니까?#

다음 패치를 적용하십시오:

diff --git a/nixos/lib/test-driver/test-driver.pl b/nixos/lib/test-driver/test-driver.pl
index 8ad0d67..838fbdd 100644
--- a/nixos/lib/test-driver/test-driver.pl
+++ b/nixos/lib/test-driver/test-driver.pl
@@ -34,7 +34,7 @@ foreach my $vlan (split / /, $ENV{VLANS} || "") {
     if ($pid == 0) {
         dup2(fileno($pty->slave), 0);
         dup2(fileno($stdoutW), 1);
-        exec "vde_switch -s $socket" or _exit(1);
+        exec "vde_switch -tap tap0 -s $socket" or _exit(1);
     }
     close $stdoutW;
     print $pty "version\n";

그러면 vde_switch 네트워크에 로컬에서 접근할 수 있습니다.

기존 Linux 설치 환경 안에서 NixOS를 부트스트랩하려면 어떻게 해야 합니까?#

사용할 수 있는 도구가 몇 가지 있습니다: