Nix 설정 - 클라우드 서버를 토렌트 다운로드 봇으로 활용할 때 꼭 필요한 필수설정이란?


요약

Nix를 이용해서 내 설정파일을 최신 버전으로 항상 깔끔하게 관리해준다. 야호!

오늘의 문제 - Aria2의 torrent tracker 목록 설정

몇몇 토런트 파일의 경우 .torrent 파일조차 없이 magnet 주소만 떨렁 있어서 다운로드할때 속터지는 경우가 있다.

운이 좋으면 DHT니 뭐니 낑낑대서 어찌어찌 다운로드를 시작하긴 하는데… 사실 이미 아는 트래커 사이트 목록이 있으면 이러한 초기 peer 검색에 걸리는 시간을 상당히 단축시킬 수 있기 때문에 좋은 트래커 사이트 목록을 설정해 두면 좋다.

당연히 그런 ‘좋은 트래커 사이트 목록’이 인터넷 어딘가에 있을 때, Nix를 이용해서 최신 버전을 자동으로 다운받아서 aria2의 설정파일에 등록하도록 하는 것이 오늘의 목표… 되겠습니다.

그거 그냥 손으로 하면 되는데 뭣하러 Nix를 쓰세요

정체불명의 LLM 모델이 생성한 답변:

Nix는 패키지 관리 도구로, 시스템 설정 및 애플리케이션 빌드 과정을 자동화하여 일관성과 재현성을 높여줍니다. 손으로 하면 쉽게 복잡한 의존 관계 관리가 어려워지고, 환경 설정이 일관되지 않을 수 있습니다. Nix를 사용하면 코드와 환경 설정을 함께 관리하여 오류를 줄이고 협업을 용이하게 할 수 있습니다.

내 답변:

야 나이먹으면 다 깜박깜박해서 매번 최신 트래커 사이트 목록 가져다 설정해주기 쉽지 않다. 근데 Nix에서 설정으로 박아놓으면 매번 최신버전 자동으로 가져다가 설정해주잖어.

구현

”좋은 트래커 사이트 목록”이란?

여기선 편하게, Github:XIU2/TrackersListCollection가 좋은 트래커 사이트 목록이라고 가정하자. 매일 업데이트되니 뭔가 믿음감 +1!

Nix에서 받아오려면?

그냥 Http에 있는 파일이었으면 번거로웠을 텐데, Github에 호스팅되니까 Nix에서 약간의 관리 스크립트를 제공해준다.

aria-trackers = pkgs.fetchFromGitHub {
  owner = "XIU2";
  repo = "TrackersListCollection";
  rev = "52419e879add1b247caac3cb39e4946aed3485ff";
  sha256 = "oexj9rjUjB0f6FgLeE9SGKHMDWSNLCIRewsg7/73BfE=";
};

위 명령은 바꿔말하면 Github의 어떤 저장소의 특정 리비전을 가져다 쓰겠다는 소리가 된다.

Nix에서 저장소의 파일을 읽으려면?

{ lib, pkgs, ... }:
let srcs = import ./srcs.nix pkgs;
in 
{
  home-manager.users.heyyou= {
    /* other configurations */
    programs.aria2 =
      let
        trackers = builtins.readFile(srcs.aria-trackers + "/best_aria2.txt");
      in
      {
        enable = true;
        extraConfig = ''
          continue
          seed-time=1
          seed-ratio=0
          bt-tracker=${trackers}
        '';
      };
  };
}

위 명령은 바꿔말하면 위에 정해둔 저장소에서 best_aria2.txt라는 파일을 읽어다가 해당 내용을 bt-tracker= 항목에 그대로 설정하겠다는 소리가 된다.

Github 저장소가 업데이트되면 어떡해?

여기 자동으로 fetchFromGithub의 항목들을 최신 rev로 업데이트해주는 도구가 있다.

Github:expipiplus1/update-nix-fetchgit

설정 생성할 때마다 한번씩 실행해주면 위에 설정한 aria-trackers의 rev를 최신 버전으로 자동으로 변경해준다. (아마 sha256도 함께?)

결론

이제 magnet 피어 찾느라 며칠씩 낭비하던 과거야 안녕.

조금 자극적인 타이틀 낚시를 시도해봤는데 방문객 수가 늘어났으면 좋겠다.