Настройка торрент-сервера
Всем привет.
Понадобилось на днях настроить торрент-сервер для сервера (такая тавтология). В конечном итоге я хотел видеть видеть работу торрента так: он всегда работает в фоне и отслеживает определенную директорию на наличие торрент-файлов. Как только в ней появляется такой файл, торрент автоматически начинает его загружать в заранее определенную папку, удаляя при этом сам торрент-файл. Далее, после полной загрузки торрента, он удаляется из списка загруженных/раздающихся торрентов, оставляя только контент.
Забегая вперед, скажу что реализовать это мне удалось и работает все замечательно. Итак, что нужно сделать:
Установить торрент-сервер. Я остановил свой выбор на Transmission. так как он универсален: может работать без графики и в фоне, имеет web-интерфейс:
Отредактировать конфигурационный файл transmission ~/.config/transmission. В нем нужно изменить/добавить следующие параметры:
- download-dir: "путь до папки, в которую будут загружаться торренты". Тут все понятно, указываем путь для сохранения загрузок;
- trash-original-torrent-files: "true". Эта опция отвечает за удаление торрент-файла после начала загрузки торрента;
- watch-dir-enabled: "true". Говорит transmission о том что нужно следить за указанной папкой на предмет наличия в ней торрент-файлов и автоматически загружать их, если такие файлы есть;
- watch-dir: "путь до папки, в которой находятся торрент-файлы". Это, соответственно, папка из предыдущего пункта, состояние которой transmission будет отслеживать.
Остальные опции я не изменял. Тех, кто хочет больше настроек, прошу пожаловать сюда.
Теперь осталось только настроить автоудаление торрентов из списка после полной их загрузки. Но штатными средствами осуществить это не вышло, поэтому потанцевав немного с бубном, пришел к следующему решению: удалять торренты будет самописный скрипт, запускающийся каждую минуту.
Скрипт я назвал rm-torrents и вот его содержание:
TORRENTLIST=`transmission-remote -l | grep "100%" | awk '{print $1}'`
for TORRENTID in $TORRENTLIST
do
transmission-remote -t $TORRENTID -r
done
Чтобы запускать скрипт каждую минуту можно воспользоваться кроном, но так как системд шагает по планете, я решил не отставать от коллектива, поэтому запускать скрипт будет таймер от системд. Запускаться он будет от вашего пользователя (не от рута), поэтому идем в папку ~/.config и создаем в ней папку systemd (если еще не создана), а в ней папку user. Далее, в этой папке создаем файл rm-torrents.service:
Description=Remove downloaded torrents from transmission
[Service]
ExecStart=/usr/bin/sh путь/до/rm-torrents
И файл rm-torrents.timer:
Description=Remove complete downloaded torrents from transmission
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
Названия файлов до точки (расширения) должны совпадать, иначе таймер не поймет какой сервис ему запускать.
Принцип работы прост: rm-torrents.timer будет каждую минуту запускать сервис rm-torrents.service, который, в свою очередь, будет запускать скрипт удаления торрентов.
Те кто считает что запускать скрипт каждую минуту это перебор могут поэкспериментировать с опцией таймера "OnUnitActiveSec=" и выставить там, например 60min. Это значит что сервис будет запускаться каждый час.
Теперь добавим transmission в автозагрузку, но для этого немного подредактируем его системд-сервис. Так как нам нужно запускать торрент от своего пользователя, а не от рута и не от только что созданного системного пользователя transmission. Следуя вики арча, создаем папку /etc/systemd/system/transmission.service.d и в ней файл username.conf со следующим содержимым:
User=<ваше имя пользователя>
Далее, укажем системд перечитать свои сервис файлы (так как мы внесли изменение), запустим торрент и добавим его в автозагрузку:
sudo systemctl start transmission
sudo systemctl enable transmission
Добавим теперь в автозагрузку наш созданный таймер. Добавлять уже будем от обычного пользователя, без sudo:
systemctl --user enable rm-torrents.timer
На этом настройка завершена. На собственном опыте могу сказать что такая конструкция работает исправно.
Читайте, настраивайте, делитесь впечатлениями.