2023. 1. 24. 23:06ㆍEtc
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 설정 작업도 끝났습니다.
포트 설정과 같은 시행 착오가 많았기에 기록을 남겨둡니다.
'Etc' 카테고리의 다른 글
자작나스 만들기 STEP 3 (transmission web https 설정) (0) | 2023.01.24 |
---|---|
자작나스 만들기 STEP 1 (sftp 설정) (0) | 2023.01.24 |
.gitconfig (Multi user) (0) | 2023.01.24 |
Otp generation tool setup (0) | 2023.01.24 |
Github sshkey로 계정 연결하기 (1) | 2023.01.24 |