개요
토렌트 머신은 아무래도 전력에 민감합니다. 시드가 많지 않은 파일 다운로드, RSS 등을 활용한 자동화, 시딩 등 24시간 켜놓을 일이 많기 때문입니다.
Proxmox, ESXi 등 가상화 서버를 운용하고 있다면, 어차피 전기를 퍼먹기 때문에 VM 하나 더 돌린다고 큰 티가 나진 않겠지만, 전기세 다이어트 중인 분들에게는 하나하나가 큰 고민일 수 밖에 없을 겁니다.
이번 글에서는, 라즈베리파이4를 토렌트 전담머신으로 구축하는 방법을 처음부터 소개할까 합니다.
라즈베리파이가 최신에 가까울수록 당연히 성능이 좋지만, 라즈베리파이5만 해도 슬슬 임베디드 보드라고 보기엔 너무 많은 전력을 먹고, 너무 많은 열을 방출하고 있어서 라즈베리파이4(램 4기가)를 활용해 보겠습니다.(절대 라즈베리파이5가 없어서 그런거 아님)
라즈베리파이3는 랜포트가 100MB(3B+는 300메가) 사양이고, USB포트가 2.0이라 제외했습니다.
OS 기본 환경 구성
OS는 라즈베리 파이 OS[Raspberry Pi OS, 舊 Raspbian(라즈비안)]을 사용하겠습니다. GUI 데스크탑이 있어 사용이 편리하고, 우분투처럼 무겁지 않아 버벅임이 없어 무난하게 사용할 수 있기 때문입니다. 자체 VNC를 내포하고 있고, 설치 과정에서 SSH를 먼저 열어둘 수 있기 때문에, 원격 접속을 위해 고군분투 할 필요 없이 간편하게 설정가능하다는 장점도 있습니다.
이미지는 공식 홈페이지에서 다운받을 수 있는데, Pi Imager를 사용해 SSH를 먼저 셋팅하는 방법을 추천드립니다.
설치 과정은 이미 구글 검색만으로 많이 찾을 수 있으므로 생략하겠습니다. 제가 사용한 OS버전은 Debian Bookworm기반의 64비트 OS입니다.
설치가 완료되면 SD카드를 라즈베리파이에 삽입하고 C타입 전원을 인가해 부팅한 뒤, 원격 접속을 위해 VNC를 사용 설정해야 합니다.
이를 위해, SSH로 접속해 CLI로 작업하거나, 모니터가 연결된 환경이라면 직접 환경 설정을 사용해 설정할 수 있는데, 두 가지 다 기술해 보겠습니다.
VNC 설정 및 접속
- 모니터가 연결되었을 경우
좌측 상단의 메뉴 – Preferences – Raspberry Pi Configuration으로 진입합니다.
Interfaces탭을 클릭한 뒤 VNC를 클릭해 토글 활성화 시켜주면 끝납니다.
- SSH로 접속해 작업하는 경우
설치 과정 상에서 SSH를 설정해 주었고, 무선랜 환경을 미리 설정해 두었다면 해당 IP로, 무선랜 환경 설정이 없다면 공유기의 DHCP쪽에서 IP를 확인하여 SSH로 접속합니다.
접속 후 sudo raspi-config 를 입력하면 아래 화면이 나타납니다.
3. Interface Options를 선택,
I2.VNC 선택,
Yes를 선택하면 최종 완료됩니다.
접속을 위해서는 VNC Viewer 프로그램이 필요한데, 저는 RealVNC Viewer를 사용하겠습니다.
프로그램을 실행한 뒤, 아래 표시된 부분에 라즈베리파이의 IP주소를 입력하면, 아래처럼 로그인을 요구하는데, 설치 당시 설정했던 ID/PW를 입력하시면 됩니다.
그러면 아래처럼 VNC로 접속하실 수 있습니다.
원격 제어가 필요한 경우 간편하게 접속할 수 있습니다.
xrdp를 설치하여 이용하는 방법도 있는데, 기본으로 포함된 VNC와 충돌(Connecting to sesman ip 127.0.0.1 port 3350 에러)을 일으켜 VNC를 삭제해야 하는 점, 간혹 로컬 세션이 살아있을 경우 검은 화면만 출력되는 오류가 있어 추가적인 계정 설정을 해야 하는 점 등을 비추어 볼 때 오히려 뉴비친화적이지 않은 것 같아 VNC를 사용하는 쪽으로 정했습니다.
현재 Raspberry Pi Connect라는, 즉시 사용가능한 원격접속 솔루션을 준비하고 있다고 하니, 이런 설정도 조만간 불필요해지지 않을까 합니다.
한글 설정
메뉴 – Preferences – Raspberry Pi Configuration – Localisation에서 Locale을 KR / UTF-8로 설정한 후 재부팅하면 아래처럼 폰트가 없어 깨져있는 화면을 보실 수 있습니다.
한글 폰트를 설치하기 위해 SSH로 접속하거나 터미널을 열어 아래 명령어를 입력합니다.
sudo apt-get install -y fcitx fcitx-hangul fonts-unfonts-core ibus ibus-hangul
설치가 완료되면 아래 명령어를 입력해 편집기를 열어 줍니다.
sudo nano /etc/default/im-config
처음 시작 부분 중 아래의 문구를 변경합니다.
IM_CONFIG_DEFAULT_MODE=auto → fcitx
저장하고 빠져나온 뒤 재부팅을 하면 제대로 한글이 적용되어 있는 것을 볼 수 있습니다.
상단의 키보드 모양을 클릭해 한영 전환키를 설정할 수 있습니다.
한글 입력이 안될 경우 메뉴 – 기본 설정 – IBus 기본 설정을 클릭하면 아래와 같이 데몬 실행을 안내하는 메세지가 출력됩니다.
이후 우측 상단의 키보드 모양이 태극 문양으로 바뀌고 한글 입력을 할 수 있게 됩니다.
고정IP 설정
공유기에서 고정IP를 설정하지 않고 라즈베리파이에서 직접적으로 고정IP를 설정하려면 아래 명령어를 복사해서 붙여넣으면 됩니다.
예를 들어 192.168.10.10으로 지정하고 공유기 IP가 192.168.10.1이라면, 아래 명령어를 실행하면 됩니다.
SSH상으로 실행한다면 연결이 끊기므로, 변경된 IP주소로 재접속이 필요합니다.
sudo nmcli c mod "Wired connection 1" ipv4.addresses 192.168.10.10/24 ipv4.method manual &&
sudo nmcli con mod "Wired connection 1" ipv4.gateway 192.168.10.1 &&
sudo nmcli con mod "Wired connection 1" ipv4.dns "192.168.10.1" &&
sudo nmcli c down "Wired connection 1" &&
sudo nmcli c up "Wired connection 1"
외장하드 파티션 초기화 및 마운트
리눅스에서 GUI로 파티션을 생성하기 위해선 gparted가 필요합니다.
sudo apt-get install gparted
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
상태 정보를 읽는 중입니다... 완료
The following additional packages will be installed:
gparted-common
제안하는 패키지:
dmraid gpart jfsutils kpartx mtools reiser4progs reiserfsprogs udftools xfsprogs yelp
다음 새 패키지를 설치할 것입니다:
gparted gparted-common
0개 업그레이드, 2개 새로 설치, 0개 제거 및 18개 업그레이드 안 함.
2,483 k바이트 아카이브를 받아야 합니다.
이 작업 후 8,638 k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] y
받기:1 http://deb.debian.org/debian bookworm/main arm64 gparted-common all 1.3.1-1 [1,711 kB]
받기:2 http://deb.debian.org/debian bookworm/main arm64 gparted arm64 1.3.1-1 [772 kB]
내려받기 2,483 k바이트, 소요시간 3초 (720 k바이트/초)
Selecting previously unselected package gparted-common.
(데이터베이스 읽는중 ...현재 150036개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../gparted-common_1.3.1-1_all.deb ...
Unpacking gparted-common (1.3.1-1) ...
Selecting previously unselected package gparted.
Preparing to unpack .../gparted_1.3.1-1_arm64.deb ...
Unpacking gparted (1.3.1-1) ...
gparted-common (1.3.1-1) 설정하는 중입니다 ...
gparted (1.3.1-1) 설정하는 중입니다 ...
Processing triggers for mailcap (3.70+nmu1) ...
Processing triggers for desktop-file-utils (0.26-1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1.1) ...
Processing triggers for man-db (2.11.2-2) ...
설치가 완료되면 메뉴 – 시스템 도구 – GParted를 확인할 수 있습니다. 실행하면 루트권한을 위해 암호를 입력해 주어야 합니다.
우측 상단의 디스크 선택을 통해 외장하드(/dev/sda)를 확인할 수 있습니다. 먼저 장치 – 새 분할 영역 테이블 만들기를 클릭합니다.
뭔가 굉장히 많은데 gpt로 진행하면 됩니다. 작업이 완료되면 빈 공간을 우클릭하여 ‘새로 만들기’를 클릭합니다.
여기서부턴 윈도우에서 Partition Wizard를 사용하는 것과 대동소이합니다. 윈도우와의 호환성을 위해 NTFS를 선택할 수도 있지만, 무난하게 EXT4를 선택하겠습니다.
BTRFS도 설치를 통해 활성화할 수 있지만, 제가 가진 외장하드는 UASP기능을 지원하지 않아 S.M.A.R.T 정보를 직접 읽을 수 없고, 그로 인해 예상되는 불이익이 있어 EXT4를 선택하려고 합니다.
‘추가’를 클릭해 파티션 생성을 진행합니다.
뭔가 열심히 진행되다가 금방 완료됩니다.
터미널을 열어 sudo blkid를 입력합니다. 그러면 방금 생성된 파티션의 UUID를 확인할 수 있습니다.
4005d4be-373e-4925-a4f5-06260e7c25d0를 복사해 둡니다.
이제 이 파티션을 마운트 할 경로를 생성하겠습니다. /mnt/torrent로 하겠습니다.
sudo mkdir -p /mnt/torrent
그리고 아래의 명령어를 입력한 뒤 한 줄을 붙여 넣어 줍니다.
sudo nano /etc/fstab
UUID=4005d4be-373e-4925-a4f5-06260e7c25d0 /mnt/torrent ext4 defaults 0 0
저장 후 닫고 나와 아래와 같이 입력합니다.
sudo systemctl daemon-reload
sudo mount -a -v
아래처럼 잘 마운트 된 것을 확인할 수 있습니다. 그런데 소유자와 그룹이 전부 root죠? 이러면 파일을 쓰고 읽는데 에로사항이 조금 생깁니다.
아래 명령어를 입력해 소유주를 바꿔줍니다. better0101부분은 본인의 아이디에 맞춰 바꿔주세요.
sudo chown -R better0101:better0101 /mnt/torrent
소유주가 잘 변경된 것을 확인할 수 있습니다. 이제 이 폴더를 이용해서 토렌트를 사용할 수 있습니다.
도커 설치
토렌트 자동화를 하기 위해서는 일반적으로 RSS를 활용할 수 있는 프로그램이 필요합니다.
국내에서는 It’s torr를 내포하고 있는 tsharp를 요긴하게 사용할 수 있고, 그 외에 원래부터 유명했던 Jackett, Sonarr, Radarr도 사용할 수 있습니다.
이들을 편하게 이용하기 위해 필요한 도커를 아래 명령어를 복사 붙여넣기 해서 간단하게 설치할 수 있습니다.
arm64를 알아서 감지하고 해당 버전을 설치, Repository 등록까지 알아서 해 줍니다.
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
# Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8de
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c install -m 0755 -d /etc/apt/keyrings
+ sh -c curl -fsSL "https://download.docker.com/linux/debian/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
+ sh -c chmod a+r /etc/apt/keyrings/docker.gpg
+ sh -c echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
Version: 26.1.2
API version: 1.45
Go version: go1.21.10
Git commit: 211e74b
Built: Wed May 8 13:59:58 2024
OS/Arch: linux/arm64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.1.2
API version: 1.45 (minimum version 1.24)
Go version: go1.21.10
Git commit: ef1912d
Built: Wed May 8 13:59:58 2024
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.31
GitCommit: e377cd56a71523140ca6ae87e30244719194a521
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
================================================================================
To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:
dockerd-rootless-setuptool.sh install
Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.
To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/
WARNING: Access to the remote API on a privileged Docker daemon is equivalent
to root access on the host. Refer to the 'Docker daemon attack surface'
documentation for details: https://docs.docker.com/go/attack-surface/
================================================================================
토렌트 환경 구성
qBittorrent, Transmission 설치
qBittorrent는 도커이미지를 제공하기 때문에, 편하게 도커에 설치하는 방법도 많이 선택하는 편입니다.
저는 여러 개의 다운로드 목록을 갖고 있는 경우, WEB UI에서 맨 아래 목록을 선택하는 것이 불편하다는 사소한 이유(한 번 해보세요..)로 네이티브 앱을 설치해 보겠습니다.
GUI 데스크톱도 있고 VNC도 있으니까 이걸 활용하는 셈 치면 됩니다.
라즈베리파이에서 직접 터미널을 열거나, SSH로 접속해 아래 한 줄만 입력하면 됩니다.
sudo apt-get install -y qbittorrent transmission
놀랍게도 Repository가 설치부터 포함되어 있기 때문에, 단 한 줄로 바로 설치할 수 있습니다.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libtorrent-rasterbar2.0
The following NEW packages will be installed:
libtorrent-rasterbar2.0 qbittorrent
0 upgraded, 2 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B/8,674 kB of archives.
After this operation, 17.3 MB of additional disk space will be used.
Selecting previously unselected package libtorrent-rasterbar2.0:arm64.
(Reading database ... 148056 files and directories currently installed.)
Preparing to unpack .../libtorrent-rasterbar2.0_2.0.8-1+b1_arm64.deb ...
Unpacking libtorrent-rasterbar2.0:arm64 (2.0.8-1+b1) ...
Selecting previously unselected package qbittorrent.
Preparing to unpack .../qbittorrent_4.5.2-3+deb12u1_arm64.deb ...
Unpacking qbittorrent (4.5.2-3+deb12u1) ...
Setting up libtorrent-rasterbar2.0:arm64 (2.0.8-1+b1) ...
Setting up qbittorrent (4.5.2-3+deb12u1) ...
Processing triggers for desktop-file-utils (0.26-1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1.1) ...
Processing triggers for libc-bin (2.36-9+rpt2+deb12u7) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for mailcap (3.70+nmu1) ...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libayatana-appindicator3-1 libminiupnpc17 libnatpmp1 transmission-common transmission-gtk
Suggested packages:
minissdpd natpmpc
The following NEW packages will be installed:
libayatana-appindicator3-1 libminiupnpc17 libnatpmp1 transmission transmission-common transmission-gtk
0 upgraded, 6 newly installed, 0 to remove and 1 not upgraded.
Need to get 1,009 kB of archives.
After this operation, 4,910 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main arm64 libayatana-appindicator3-1 arm64 0.5.92-1 [23.6 kB]
Get:2 http://deb.debian.org/debian bookworm/main arm64 libminiupnpc17 arm64 2.2.4-1+b1 [32.0 kB]
Get:3 http://deb.debian.org/debian bookworm/main arm64 libnatpmp1 arm64 20150609-7.1+b2 [8,520 B]
Get:4 http://deb.debian.org/debian bookworm/main arm64 transmission-common all 3.00-2.1+deb12u1 [227 kB]
Get:5 http://deb.debian.org/debian bookworm/main arm64 transmission-gtk arm64 3.00-2.1+deb12u1 [716 kB]
Get:6 http://deb.debian.org/debian bookworm/main arm64 transmission all 3.00-2.1+deb12u1 [1,248 B]
Fetched 1,009 kB in 0s (6,921 kB/s)
Selecting previously unselected package libayatana-appindicator3-1.
(Reading database ... 148102 files and directories currently installed.)
Preparing to unpack .../0-libayatana-appindicator3-1_0.5.92-1_arm64.deb ...
Unpacking libayatana-appindicator3-1 (0.5.92-1) ...
Selecting previously unselected package libminiupnpc17:arm64.
Preparing to unpack .../1-libminiupnpc17_2.2.4-1+b1_arm64.deb ...
Unpacking libminiupnpc17:arm64 (2.2.4-1+b1) ...
Selecting previously unselected package libnatpmp1:arm64.
Preparing to unpack .../2-libnatpmp1_20150609-7.1+b2_arm64.deb ...
Unpacking libnatpmp1:arm64 (20150609-7.1+b2) ...
Selecting previously unselected package transmission-common.
Preparing to unpack .../3-transmission-common_3.00-2.1+deb12u1_all.deb ...
Unpacking transmission-common (3.00-2.1+deb12u1) ...
Selecting previously unselected package transmission-gtk.
Preparing to unpack .../4-transmission-gtk_3.00-2.1+deb12u1_arm64.deb ...
Unpacking transmission-gtk (3.00-2.1+deb12u1) ...
Selecting previously unselected package transmission.
Preparing to unpack .../5-transmission_3.00-2.1+deb12u1_all.deb ...
Unpacking transmission (3.00-2.1+deb12u1) ...
Setting up libnatpmp1:arm64 (20150609-7.1+b2) ...
Setting up libminiupnpc17:arm64 (2.2.4-1+b1) ...
Setting up libayatana-appindicator3-1 (0.5.92-1) ...
Setting up transmission-common (3.00-2.1+deb12u1) ...
Setting up transmission-gtk (3.00-2.1+deb12u1) ...
Setting up transmission (3.00-2.1+deb12u1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1.1) ...
Processing triggers for libc-bin (2.36-9+rpt2+deb12u7) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for mailcap (3.70+nmu1) ...
Processing triggers for desktop-file-utils (0.26-1) ...
이렇게 설치된 qbittorrent는 재부팅 하면, 메뉴 – 인터넷 탭에 자동으로 바로가기가 등록되어 윈도우처럼 편하게 실행할 수 있지만,
혹시 등록되어 있지 않을 경우 아래처럼 터미널에서 실행할 수도 있고
/usr/bin/qbittorrent
메뉴에 직접 추가해 GUI에서 편하게 실행할 수도 있습니다.
좌측 메뉴 – Preferences – Main Menu Editor를 클릭합니다.
New Item을 클릭한 뒤, 아래처럼 입력합니다.
OK를 클릭하여 빠져나온 뒤 메뉴를 펼쳐보면 아래와 같이 qBittorrent가 추가된 것을 확인할 수 있습니다.
같은 방식으로 Transmission도 마찬가지로 터미널로 실행할 수 있으나,
아래처럼 메뉴로 등록하면 편하게 사용할 수 있습니다.
Command : /usr/bin/transmission-gtk
혹은 재부팅하고 나면 아래처럼 알아서 바로가기가 생깁니다.
기존에 보유하고 있던 config파일을 붙여넣을 필요가 있을 경우, 아래의 경로에 붙여넣어주시면 됩니다.
~/.config/qBittorrent
~/.config/transmission
(~/는 홈폴더)
설치가 완료되었다면 아래에 설치할 토렌트 자동화 프로그램들이 이용할 수 있도록 각각의 클라이언트에서 WEB UI를 활성화해주어야 합니다.
qBittorrent는 환경설정 – 웹 UI에서 활성화할 수 있습니다.
- IP주소 : *로 놔두면 모든 인터페이스(로컬 대역, 외부 대역)으로부터 접속 가능, 원치 않을 경우 내부 IP를 수동으로 기입.
그러나 공유기 단에서 포트포워딩을 하거나 리버스 프록시를 설정하지 않을 경우 어차피 차단되므로 건드리지 않아도 됩니다. - 사용자 이름 / 암호 : WEB UI 접속 시 로그인을 요구하므로, 여기에 사용할 계정을 설정합니다.
- localhost의 클라이언트에 대한 인증 우회하기 : WEB UI에 접속할 때, 내부 IP대역으로부터 요청받은 접속에 대해선 로그인을 생략
- IP 서브넷 허용 목록 : 위의 내부 IP대역 외에도 추가적으로 인증을 생략할 수 있는 IP대역(예를 들어, 외부에서 홈네트워크 접근을 위한 VPN 사용 시, 해당 대역 등록 가능)
Transmission은 편집 – 기본 설정 – 리모트 탭에서 설정할 수 있습니다.
원격 접속 허용 체크 및 포트 설정을 통해 접근할 수 있고,
인증 요구를 원하면 계정을 설정할 수 있습니다.
기타 그 외 Whitelist 설정을 통해 설정한 IP대역만 접근할 수 있도록 할 수 있습니다.
VPN 접속기 설치
도커와 VPN, 토렌트를 함께 운용하는 가이드는 보통, jordanpotter/wireguard, qmcgaw/gluetun 등의 이미지를 사용하여 VPN에 접속하는 컨테이너를 띄운 다음, 토렌트 컨테이너들이 이 컨테이너를 통해 통신하도록 docker-compose를 구성합니다.
이 방식의 장점은, 자동적으로 터널 스플릿이 구성된다는 점이고(해당 컨테이너를 경유하지 않는 컨테이너와 자동적으로 분리), 논리적으로 킬 스위치가 구현된다는 점입니다(VPN컨테이너가 죽으면 이를 경유하는 모든 컨테이너의 통신이 끊김).
단점은 개별 환경마다 VPN컨테이너가 오류를 일으킨다는 점(우분투, 데비안, 로키, 민트 혹은 시놀로지 등마다 양상이 다름)과 Wireguard conf파일 내용을 바꿀때마다 컨테이너를 내렸다 올려야 한다는 점 등이 있습니다.
한편, 지금 저희가 구성하고 있는 환경은 데스크톱이 딸린 GUI환경이므로, 그냥 VPN사가 제공하는 프로그램을 바로 사용하면 됩니다.
자체 프로그램으로 터널 스플릿과 킬 스위치를 구성하고, 따로 구성되지 않은 모든 프로그램의 통신은 자동적으로 VPN을 경유하게 되겠죠. 접속 채널 변경 시에도 압도적으로 편합니다.
예시에서 작성하는 VPN은 Mullvad를 사용합니다. Mullvad는 데비안 기반 패키지를 제공하고 있고, 라즈비안OS는 데비안 기반이기 때문에 아무런 문제 없이 설치가 됩니다.
터미널에서 아래와 같이 3줄의 명령어를 입력합니다. 해당 내용은 공식 홈페이지에 있는 내용입니다.
sudo curl -fsSLo /usr/share/keyrings/mullvad-keyring.asc https://repository.mullvad.net/deb/mullvad-keyring.asc
echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mullvad.list
sudo apt-get update && sudo apt-get install mullvad-vpn
설치가 완료되면, 아래와 같이 인터넷 탭에서 해당 앱을 확인할 수 있습니다.
몇 가지 필요한 옵션을 지정해 줍니다.
특히 로컬 네트워크 공유(LOCAL SUBNET)은, VNC나 SSH 접속 등을 위해서라도 필요합니다.
터널 스플릿은 필요하지 않아 구성하지 않았지만, 개별 환경에 따라 필요하신 경우 앱을 추가하시면 됩니다.
이후 트래픽이 제대로 VPN을 타고 나가고 있음을 확인할 수 있습니다.
토렌트 자동화 구성
토렌트 자동화를 위해서는 RSS를 이용할 필요가 있습니다. 원래 기존에는 RARBG가 RSS도 제공했고 네이밍 규칙도 아름다울 정도로 정규화하여 업로드하고 있어 RARBG + Tsharp 조합이면 대부분의 자료를 문제 없이 구할 수 있었으나.. 코로나 팬데믹으로 RARBG가 터진 지금은 Tsharp와 함께 Jackett, Radarr, Sonarr를 이용하여 구성합니다.
도커는 설치해 놓았으므로, 아래 yml을 이용하여 docker compose 혹은 portainer stack을 이용해 컨테이너를 띄워주시면 됩니다. 포함된 모든 서비스는 arm64 플랫폼의 도커 이미지를 제공합니다.
볼륨 경로는 개별 환경에 맞게 구성해주세요.
- Jackett을 사용하는 경우
version: "5"
services:
tsharp:
container_name: tsharp
image: banyazavi/tsharp:aarch64
restart: unless-stopped
ports:
- 8080:8080 # tsharp
- 9091:9091 # transmission webui(tsharp)
- 51413:51413 # transmission
- 51413:51413/udp # transmission
volumes:
- /path/to/data:/root/data
- /path/to/torr:/var/www/html/torr
- /path/to/downloads:/downloads
environment:
- TZ=Asia/Seoul
jackett:
container_name: jackett
image: linuxserver/jackett:latest
restart: unless-stopped
ports:
- 9117:9117 # jackett
environment:
- TZ=Asia/Seoul # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/downloads:/downloads # place where to put .torrent files for manual download
- /path/to/config:/config # config files
flaresolverr:
# DockerHub mirror flaresolverr/flaresolverr:latest
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
ports:
- 8191:8191 # flaresolverr
environment:
- LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false}
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
- TZ=Asia/Seoul
restart: unless-stopped
sonarr:
container_name: sonarr
image: linuxserver/sonarr:latest
restart: unless-stopped
ports:
- 8989:8989 # sonarr
environment:
- PUID=0
- PGID=0
- TZ=Asia/Seoul # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/config:/config # config files
- /path/to/downloads:/downloads # download folder
radarr:
container_name: radarr
image: linuxserver/radarr:latest
restart: unless-stopped
ports:
- 7878:7878 # radarr
environment:
- PUID=0
- PGID=0
- TZ=Asia/Seoul # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/config:/config # config files
- /path/to/downloads:/downloads # download folder
- Prowlarr를 사용하는 경우
version: "5"
services:
tsharp:
container_name: tsharp
image: banyazavi/tsharp:aarch64
restart: unless-stopped
ports:
- 8080:8080 # tsharp
- 9091:9091 # transmission webui(tsharp)
- 51413:51413 # transmission
- 51413:51413/udp # transmission
volumes:
- /path/to/data:/root/data
- /path/to/torr:/var/www/html/torr
- /path/to/downloads:/downloads
environment:
- TZ=Asia/Seoul
flaresolverr:
# DockerHub mirror flaresolverr/flaresolverr:latest
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
ports:
- 8191:8191 # flaresolverr
environment:
- LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false}
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
- TZ=Asia/Seoul
restart: unless-stopped
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=0
- PGID=0
- TZ=Asia/Seoul
volumes:
- /data/prowlarr/config:/config
ports:
- 9696:9696
restart: unless-stopped
sonarr:
container_name: sonarr
image: linuxserver/sonarr:latest
restart: unless-stopped
ports:
- 8989:8989 # sonarr
environment:
- PUID=0
- PGID=0
- TZ=Asia/Seoul # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/config:/config # config files
- /path/to/downloads:/downloads # download folder
radarr:
container_name: radarr
image: linuxserver/radarr:latest
restart: unless-stopped
ports:
- 7878:7878 # radarr
environment:
- PUID=0
- PGID=0
- TZ=Asia/Seoul # timezone, defined in .env
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/config:/config # config files
- /path/to/downloads:/downloads # download folder
VPN컨테이너를 통해 구성할때는 ports 일체를 VPN컨테이너쪽에 지정했지만, 현재는 호스트에 이미 VPN이 돌아가고 있으므로, 개별 컨테이너에 ports를 구성해 주면 됩니다.
Tsharp
먼저, Tsharp의 경우 검색하면 국내 글이 많이 나오는데, 제공받은 RSS를 파싱하여 리스트로 만들어 보여주고 해당 마그넷 링크를 연결시켜 주는 서비스입니다.
긁어온 Feed중 조건에 맞는 것을 발견하면 자동적으로 마그넷 링크를 실행하도록 되어 있습니다.
파일명을 정규화하고 RSS를 이쁘게 제공했던 RARBG와 사용했을 때 정말 극강의 위력을 보여주었었지만, 기타 그 외 사이트들은 RSS를 제대로 제공하지 않거나, RSS를 제공해도 자료가 많이 없는 등의 사유로, 앱 자체적인 문제가 아니라 외부적인 요인 때문에 원툴로 사용하기엔 조금 무리가 있습니다.
현재 Nyaa.si는 RSS를 제공하고 있고, 전문적으로 애니메이션을 취급하므로 해당 카테고리를 이용한다면 여전히 좋은 선택이 될 수 있으며, 계속해서 주소가 변동되는 국내 사이트에 대한 해법으로 It’s torr를 내포하고 있어, 국내 사이트를 사용할 땐 제일 편합니다.
RSS Feed 생성기
Jackett
위의 Tsharp는 RSS를 받아와서 마그넷 링크를 파싱해줄 수는 있지만, RSS를 제공하지 않는 사이트의 내용을 크롤링해오지는 못합니다.
Jackett은 그러한 사이트들을 대상으로 자체적으로 크롤링을 해 긁어온 내역을 파싱해서 RSS Feed화 해주고, 마그넷 링크가 포함되어 있지 않더라도 .torrent파일을 직접 연결시켜 작동시켜 줍니다. 좀 더 강력하죠. 대신 설정이 귀찮습니다.
Add Indexer를 클릭하면 현존하는 대부분의 사이트가 리스트업 되는데,
우선적으로 Public인 것만 사용할 수 있습니다. 비공개 토렌트에 아이디가 있을 경우 옆의 스패너 아이콘을 클릭해 로그인ID를 셋팅한 후 추가할 수 있습니다.
원하는 사이트를 모두 체크했다면, 하단의 Add Selected를 클릭해 리스트에 추가할 수 있고,
리스트에 추가된 사이트들로부터 주기적으로 정보를 긁어와 로컬에 파싱하여, 직접 이용하거나 다른 클라이언트(Sonarr, Radarr 등)로 하여금 RSS Feed처럼 이용하게 할 수 있습니다.
최하단에서 셋팅할 수 있는 FlareSolverr는 리스트에 추가된 사이트를 접속하는 과정에서 발생하는 Captha를 풀어주는 역할입니다. Selenium을 활용합니다.
기타 그 외 주기적으로 사이트Test를 수행해 자주 접속에러가 뜨는 쪽은 리스트에서 제외함으로써 토렌트 검색에 걸리는 시간을 줄일 수 있습니다.
Radarr와 Sonarr, 기타 그 외 Lidarr 등 *arr들과 사용할 인덱서로 Prowlarr가 더 좋다는 의견도 많으니, Jackett대신 그쪽을 셋팅하는 방법도 고려해보실 수도 있습니다.
Prowlarr(추천)
Prowlarr의 Indexer 추가도 동일합니다. 목록에서 클릭하고 Test, Save를 클릭하면 됩니다.
Jackett과 마찬가지로 FlareSolverr는 수동으로 설정해주셔야 합니다.
먼저 Settings – Indexer에서 FlareSolverr를 클릭해 추가해 주면서, Tag를 함께 지정해 줍니다. 아무렇게나 편한 이름으로 지정하시면 됩니다.
이후 Indexer를 추가할 때, 아래와 같은 에러 메세지를 만날 경우 Tag에 flaresolverr를 지정해 주시면 됩니다.
이 부분은 설정만 해두면 알아서 flaresolverr를 적용하는 Jackett과 비교해 조금 귀찮은 부분입니다.
Indexer에 따라 토렌트를 가져오는 방식의 순위를 정할 수도 있습니다.
제 경우 1순위 magnet, 실패 시 .torrent파일을 가져오도록 해 놓았습니다.
Jackett과 마찬가지로, Indexer로 등록된 사이트들의 토렌트를 수동으로 검색하고, 이를 다운로드 받을 수 있습니다.
Jackett은 다운로드 받을 파일의 마그넷 주소를 브라우저에서 인식하는 토렌트 다운로드 클라이언트로 실행하거나, torrent파일을 docker-compose에서 지정한 주시폴더에 넣어서 작동시키는 방식임에 반해,
Prowlarr는 Download Client를 지정하고 해당 Client로 직접 실행하는 방식입니다. 조금 더 직관적입니다.
*arr 형제인 만큼, Apps탭에서 Radarr와 Sonarr에게 인덱싱 결과를 편하게 제공할 수 있으며 Sonarr와 Radarr의 다운로드 세부 설정 시 확인할 수 있습니다.
Jackett과 Prowlarr는 같은 역할을 수행하므로 하나만 선택해서 운영하면 충분합니다.
오히려 같은 Indexer에 대해 두 앱을 모두 운영해 수시로 접속해서 트래픽을 유발할 경우, 차단당할 수 있습니다.
Radarr & Sonarr
Radarr는 영화에, Sonarr는 TV시리즈에 특화된 토렌트 앱입니다. Jackett과 Prowlarr에 따라 설정법이 다릅니다.
- Prowlarr(추천)
위에서 설정하고 나면 이미 알아서 추가된 Indexer 리스트를 확인할 수 있습니다.
- Jackett
위의 Jackett에서 설정된 RSS Feed 중에서 설정한 조건에 맞는 자료를 다운로드 할 수 있도록 지시할 수 있습니다.
설정의 Indexer탭에서 위의 Jackett에서 설정한 RSS Feed를 가져와 사용할 수 있습니다.
+버튼 클릭 – Torznab – Jackett에서 Indexer 복사 – 붙여넣기의 간단한 과정을 통해 구축할 수 있습니다.
Jackett의 API Key와 Indexer의 Torznab Feed를 복사해와서 붙여 넣어 주면 끝납니다.
Download Clients에서는 Radarr가 찾아낸 토렌트를 다운로드하도록 연계할 프로그램을 정할 수 있습니다.
상당히 많은 프로그램을 지원합니다. 아래처럼요.
유즈넷을 제외하고 토렌트 클라이언트 중에서 평범하고, 사용하기 편하며 접근성이 좋은 것들은 Deluge, qBittorrent, Transmission, uTorrent 정도 될 것 같습니다.
또, 생소하지만 시스템 점유율을 최소한으로 낮추기 위해선 Aria2도 고려할 수 있습니다. 사용자 인터페이스를 제거하고 CLI로만 작동되는, 점유율 최하의 토렌트 다운로드 클라이언트입니다.
Transmission은 세부적인 설정을 하기 어렵고, Deluge는 좋은 편이나, 시스템 자원 사용률이 꽤 높은 편에 속합니다. 다량의 다운로드 진행 시 반응이 살짝 느려지기도 할 정도구요.
기타 그 외 시놀로지를 사용한다면 Download Station도 사용할 수 있습니다.
이 글에선, 메인으로 qBittorrent를 사용하고, Tsharp용으로 Transmission을 사용하기 위해 두 가지 클라이언트를 설치했었으므로,
qBittorrent를 클릭하여 연결해주면 됩니다. 위에서 설정한 WEB UI의 접속정보를 입력해 주시면 됩니다.
설정이 완료되었다면, 간단하게 영화를 검색해 다운로드 받을 수 있습니다.
Sonarr도 이 가이드와 동일합니다.
기타 그 외 Settings – Custom Formats 에서 릴 그룹을 지정하고, Profiles에서 Custom Format마다 점수를 차등으로 두어 릴그룹 선호도를 조정할 수 있는 방법도 있으므로, 개인 선호도에 맞게 조정하는 것도 추천드립니다.
마무리
긴 글을 쓰면서 두서없는 부분이 있을 수 있는데… 다시 한 번 쭉 읽으면서 이상한 부분은 수정할 수 있도록 해보겠습니다.
읽으시다가 이해 안가는 부분 있을 경우 알려주시면 수정하거나 답변 드리겠습니다.
Radarr, Sonarr등이 사용법을 숙지하고 나면 굉장히 정교하게 돌아가는데, 그 사용법을 익히는 시간이 좀 필요합니다.
국내 자료를 주로 찾는 분이라면 여기까지 오지 않아도 Tsharp만으로도 필요한 부분을 충족시키실 수도 있습니다.
기타 그 외 음악에 특화된 Lidarr와 자막에 특화된 Bazarr가 있는데, 제가 이들을 사용하지 않아서 =ㅅ=… 제외했습니다.
여기서 소개드린 모든 도커이미지와 프로그램(qBittorrent, Transmission) 등은, arm64아키텍쳐에서도 잘 작동되는 것을 알 수 있습니다.
오라클 A1을 보유하고 있는데, 딱히 쓸 곳을 찾지 못하신 분들은 이런 구성으로 사용하셔도 유용할 것 같습니다.
출처
1. https://www.raspberrypi.com/software/operating-systems/
Operating system images – Raspberry Pi
From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.
www.raspberrypi.com
2. https://www.raspberrypi.com/software/
Raspberry Pi OS – Raspberry Pi
From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.
www.raspberrypi.com
3. https://www.realvnc.com/en/connect/download/viewer/
Download VNC Viewer by RealVNC®
RealVNC® Viewer is the original VNC Viewer and the most secure way to connect to your devices remotely. Download VNC Viewer by RealVNC® now.
www.realvnc.com
4. https://www.raspberrypi.com/software/connect/
Raspberry Pi Connect Beta - Access your Raspberry Pi from anywhere – Raspberry Pi
Raspberry Pi Connect is a secure remote access solution for Raspberry Pi OS, allowing you to connect to your desktop and command line directly from any browser.
www.raspberrypi.com
5. https://github.com/jordanpotter/docker-wireguard
GitHub - jordanpotter/docker-wireguard: Simple image for running a WireGuard client with a kill switch
Simple image for running a WireGuard client with a kill switch - jordanpotter/docker-wireguard
github.com
6. https://github.com/qdm12/gluetun
GitHub - qdm12/gluetun: VPN client in a thin Docker container for multiple VPN providers, written in Go, and using OpenVPN or Wi
VPN client in a thin Docker container for multiple VPN providers, written in Go, and using OpenVPN or Wireguard, DNS over TLS, with a few proxy servers built-in. - qdm12/gluetun
github.com