서버 구성

서버 구성

[여기서 부분적으로 다뤄졌습니다:https://plus.google.com/110416349762686874861/posts/PVGHL1Tpeb9;하지만 완전히는 아님]

업그레이드할 때마다 Hydra에서 모든 항목을 가져오지 않도록 NixOS 시스템 중 하나를 패키지용 캐시로 사용하고 싶습니다. 그래서 나는 이것을 시도했습니다 : https://nixos.org/nix/manual/#sec-sharing-packages. 하지만

  • 사용하려고 하면 nix-serve -p <port>( ! nix-env --option extra-binary-caches http://<host>:<port>/로 실행하더라도 root) 이 캐시를 무시하고 "NAR 정보 파일"... "서명 누락"이라고 말하고 전환을 시도합니다 cache.nixos.org... 그래서 nix-serve예상대로 작동하지 않습니다. 이는 문서가 더 이상 정품이 아니거나 nix-serve손상되었음을 의미합니까?

  • nix-copy-closure --to <user>@<host>작동 하지만 ( <user>신뢰할 수 있는 사용자로 추가된 경우 nix.trustedUsers) 하지만 업그레이드할 때마다 이렇게 하면 매우 불편할 것입니다. 그런데. 여기서 나를 혼란스럽게 하는 것은 --from그것을 사용하는 방법입니다.

나는 암호화 서명이 작동하는 방식과 패키지(및 저장소)에 서명하는 데 사용되는 이유에 대해 일반적으로 이해하고 있습니다. 하지만

  • 이 경우에는 전혀 필요하지 않습니다. MITM의 위험에 대해 걱정할 필요가 없습니다. 정기적으로 한 컴퓨터에서 다른 컴퓨터로 몇 GiB의 바이너리 파일을 쉽게 복사하고 싶습니다. 물론 유효성 검사를 완전히 비활성화할 수도 있지만 nix.requireSignedBinaryCaches = false덜 급진적인 접근 방식이 있습니까? 예를 들어, "신뢰할 수 있는 사용자" nix-env로 전화 root하여 이 "추가" 바이너리 캐시를 "신뢰할 수 있는 바이너리 캐시"로 등록한다고 해서 내가 무엇을 하고 있는지 알 수 있다는 뜻은 아니며 시스템이 불평할 필요가 없다는 뜻입니다. 서명이 없나요? (검사를 완전히 비활성화할 필요는 없습니다.) 특정 "신뢰할 수 있는" 소스/사용자에 대해서만 유효성 검사를 비활성화하는 방법을 찾지 못했고 거의 존재하지 않는 것으로 의심됩니다(예: 버그).

  • nix-store --generate-binary-cache-key이 서명 메커니즘을 준수하기 위해 , 그런 다음 nix-push --dest <somewhere> --key-file <secret-1> --none <cherrypicked-paths>클라이언트에 공개 키를 등록하여 "완전한" 바이너리 캐시를 설정해 볼 수도 있습니다 . 그러나 그것은 내가 원하는 것이 아닙니다. 아카이브를 "서버"에 저장하고 nix-push경로를 명시적으로 설정합니다. nix-serve이 공유 패키지가 배송 전에 서명되어 수신자가 nix-env이 특정 소스가 신뢰할 수 있다고 절대적으로 확신할 경우 서명 부족에 대해 불평하지 않고 기뻐할 수 있기를 바랍니다 !

nix-serve결론: 서명 확인 메커니즘(또는 둘 다)이 손상되었거나 유지되지 않는다고 확신합니다 . 따라서 이를 문제라기보다는 버그 보고서 후보로 간주할 수 있습니다. 하지만 내가 틀렸다면 그게 더 낫습니다.

답변1

nix-serve명령을 통해 제공되는 서명된 바이너리 캐시를 사용하도록 서버와 클라이언트를 구성하는 방법은 다음과 같습니다 . 이는 nix-push빌드 캐시를 사용할 필요가 없으며 /nix/store이 방법을 사용하여 직접 제공할 수 있습니다.

이는 man-page 에 문서화되어 있으므로 nix-push더 자세한 내용을 원할 경우 해당 내용도 확인할 수 있습니다.

서버 구성

이 예에서는 서버의 호스트 이름이 이라고 가정합니다 cache.example.com.

먼저 다음을 사용하여 서명 키 쌍을 생성해야 합니다 nix-store --generate-binary-cache-key.

$ nix-store --generate-binary-cache-key cache.example.com-1 nix-serve.sec nix-serve.pub

cache.example.com... 서버에 적합한 호스트 이름으로 바꾸세요 . 실제 호스트 이름과 일치할 필요는 없지만, 공개 키가 속한 서버를 쉽게 구별할 수 있도록 일치하면 도움이 됩니다.

캐시 서버가 실행 중인 경우 NixOS구성 파일에 다음 두 줄을 추가하여 캐시를 제공할 수 있습니다 NixOS.

nix-serve = {
  enable = true;
  secretKeyFile = "/path/to/nix-serve.sec";
};

...사용자에게 nix-serve키에 대한 읽기 액세스 권한이 있는지 확인하세요 nix-serve.sec.

캐시를 제공하지 않고 실행 파일을 사용하여 직접 캐시를 제공 NixOS하려면 다음과 같이 환경 변수를 사용하여 키 경로를 지정 nix-serve해야 합니다 .NIX_SECRET_KEY_FILE

NIX_SECRET_KEY_FILE=/path/to/nix-serve.sec nix-serve ...

클라이언트 구성

클라이언트 시스템이 NixOS시스템인 경우 구성 파일에 다음 줄을 추가할 수 있습니다 NixOS.

nix.binaryCaches = [
  "https://cache.nixos.org/"

  # This assumes that you use the default `nix-serve` port of 5000
  "http://cache.example.com:5000"
];

nix.binaryCachePublicKeys = [
  "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="

  # Replace the following string with the contents of the
  # `nix-serve.pub` file you generated in the "Server configuration"
  # section above
  "cache.example.com-1:...="
];

NixOS컴퓨터를 사용 하지 않는 경우 nix.conf파일을 수동으로 편집하여 다음 설정을 지정할 수 있습니다.

binary-caches = https://cache.nixos.org/ http://cache.example.com
binary-cache-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cache.example.com-1:...=

하나의 빌드에 대해서만 바이너리 캐싱을 활성화하려면 다음과 같이 이러한 바이너리 캐시 구성 플래그를 nix-build또는 같은 Nix 유틸리티에 직접 전달할 수 있습니다.nixos-rebuild

nixos-rebuild build --option binary-caches "https://cache.nixos.org/ http://cache.example.com" --option binary-cache-public-keys "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cache.example.com-1:...="

관련 정보