자작나스 만들기 STEP 2 (transmission 설정)

2023. 1. 24. 23:06Etc

Transmission - torrent client

Linux의 torrent client 중에서 가장 널리 알려지고 많이 쓰이는 게 Transmission이라고 합니다.
사용할 툴은 쉽게 정했지만, 실제로 필요한 아래와 같은 요구사항을 충족시키기 위해 셋팅이 필요했습니다.

  • 여러 User가 하나의 Linux 머신에 접속해서 원하는 torrent 씨드를 등록한다.
  • 각자가 등록하여 다운 받는 항목과 진도를 확인할 수 있어야 한다.
  • 타인이 다운 받는 항목은 서로 알 수가 없어야 한다.

각 서비스마다 하나의 Web이 제공되기 때문에 각 유저의 리스트를 별개로 관리하기 위해서는 유저마다 서비스를 따로 돌릴 필요가 있었습니다.

 

서비스 설정파일

Transmission이 설치가 되면 아래와 같이 서비스 데몬 설정 파일을 만들어줍니다.
각 유저별로 홈 디렉토리 Config에서 설정파일을 관리합니다.
처음 셋업하면서 시행착오를 많이 겪었기에 log설정도 해둡니다.

/etc/systemd/system/transmission@.service

[Unit]
Description=Transmission BitTorrent Daemon
After=network.target

[Service]
User=%I
Type=simple
ExecStart=/usr/bin/transmission-daemon -f --log-debug --logfile /home/%i/.config/transmission/transmission.log  -g /home/%i/.config/transmission/
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

각 유저별 서비스를 시작하는 방식은 아래와 같습니다.
아래 명령을 수행하면 userA, userB의 서비스가 시작됩니다. 물론 Liunx에 홈 디렉토리와 함께 유저가 생성되어져 있어야할 것 입니다.

sudo service transmission@userA start
sudo service transmission@userB start

 

유저별 세팅

각 유저의 홈 디렉토리에는 '/home/userA/.config/transmission/settings.json' 해당 파일이 있습니다.
이 파일은 service를 stop한 상태에서 고쳐져야만 반영이됩니다. (그렇지 않으면 원복됨)

설정값은 다양하게 있지만 셋업과정에서 커스터마이징한 값들은 아래와 같습니다..

설정항목 나의 설정값 설명
download-dir /mnt/sda1/userA/downloads Torrent다운이 완료되면 저장될 위치이다. user별로 별도의 디렉토리를 생성하여 위치를 고정해주었습니다.
incomplete-dir /home/userA/.temp-downloads 다운로드되는 과정에서 임시로 저장될 위치입니다. 설정하지 않으면 'download-dir'에 저장됩니다.
incomplete-dir-enabled true 'incomplete-dir' 값을 설정해놓아도 이 값을 enable하지 않으면 동작되지 않습니다.
peer-port 57001 여러 user가 동시에 서비스를 돌릴려면 해당 값이 모두 달라야합니다. 포트가 중복되면 두번째부터 당연히 서비스가 정상적으로 동작하지 않게 됩니다. random으로 할당하는 옵션도 존재하지만 직접 모두 다른 포트로 할당을 해주었습니다.
rpc-port 13001 RPC는 해당 서비스에 어떤 기능을 트리거하기 위한 것이라고 볼 수 있습니다. 이 포트 또한 유저마다 달라야 합니다.
rpc-username remoteUser RPC를 위한 Username으로 Linux 유저와는 별개입니다.
rpc-password pw123 Username에 매핑되는 password 입니다. 이 값을 수정 후 저장하면 자동으로 encrytion 됩니다.
rpc-url /transmission/ Web페이지로 접근하기 위한 Url 설정입니다.
watch-dir /mnt/sda1/userA/downloads/ torrent 파일이 올라오면 이를 감지해서 다운로드 등록할 디렉토리 입니다.
watch-dir-enabled true torrent파일 모니터링 기능 활성화 여부입니다.
script-torrent-done-filename /usr/bin/transmission-autodel-userA.sh 다운로드가 완료되면 수행할 script입니다. 다운로드가 완료되었을 때, 항목에서 삭제되지 않으면 계속 Upload의 씨드가 되므로 자동으로 삭제하기 위한 script 입니다.
script-torrent-done-enabled true 자동 script 수행 활성화 여부입니다.
trash-original-torrent-files true 등록된 torrent 파일을 자동으로 삭제할지 여부입니다.

설정을 고치고 다시 서비스가 시작되면 모니터링 디렉토리에 파일이 올라오면 자동으로 감지해서 다운로드를 시작합니다.

다운로드가 정상적으로 되고 있음은 http://localhost:13001/transmission/web/ 을 통해서 확인할 수 있습니다. (path 마지막에 '/'를 빼먹지 말자)

 

자동 삭제

torrent 파일 다운로드가 끝나면 자동 삭제 스크립트를 수행해주도록 셋업해두었습니다.

/usr/bin/transmission-autodel-userA.sh

export SERVER="13001 --auth remoteUser:pw123"
/usr/bin/transmission-autodel.sh

/usr/bin/transmission-autodel.sh

TORRENTLIST=`transmission-remote $SERVER --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=" " --fields=1`
for TORRENTID in $TORRENTLIST
do
    DL_COMPLETED=`transmission-remote $SERVER --torrent $TORRENTID --info | grep "Percent Done: 100%"`
    STATE_STOPPED=`transmission-remote $SERVER --torrent $TORRENTID --info | grep "State: Seeding\|Stopped\|Finished\|Idle"`
    if [ "$DL_COMPLETED"  ] && [ "$STATE_STOPPED"  ]; then
        transmission-remote $SERVER --torrent $TORRENTID --remove
    fi
done

실행되는 스크립트는 rpc에 사용할 포트, 아이디/비번을 설정하고 또 'transmission-autodel.sh'를 수행해준다.

해당 스크립트가 수행되면 다운로드가 완료된 항목이 삭제되는 걸 직접 확인해볼 수도 있습니다.

마지막으로 Linux가 부팅될때 자동으로 실행될 수 있도록 설정을 해둡니다.

sudo systemctl enable transmission@userA
sudo systemctl enable transmission@userB

이제 transmission 설정 작업도 끝났습니다.
포트 설정과 같은 시행 착오가 많았기에 기록을 남겨둡니다.