Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий ;)

вторник, 21 июня 2022 г.

Transmission + Samba. Делаем службу загрузки торрентов

В кинотеатрах новых фильмов мало. Поэтому переходим на домашние киносеансы. Торренты - вещь полезная, кроме мультимедиа, в них, например, есть дистрибутив Ubuntu :)

Самый простой способ скачаивания файлов с торрентов - клиент на рабочей станции (компьютер, ноутбук). В чем минус - всегда должен быть включен и иметь доступ в Интернет. Для стационарного компьютера это не проблема. А для ноутбука, который перемещается вместе с хозяином это ограничение. Кроме того, обычные клиенты требуют ручного добавления каждого торрента, выбора места для сохранения файлов.

Предлагаемое решение - развернуть торрент-клиент на отдельном компьютере (стационарный компьютер, домашний сервер, одноплатник вроде Raspberry PI). Он всегда работает, всегда подключен к Интернету, качает в фоне, не тормозит основной компьютер. Кроме того решение позволяет иметь доступ к сервису закачек торрентов и к скаченному материалу всем домочатцам и разным проигрывателям

Используется связка торрент-клиента Transmission, запущенного в режиме демона, и службы файлового сервера Samba. Вместо Samba можно использовать NFS, или например, настроить DLNA. Samba выбрана потому, что большинство устройств (телевизоры, компьютеры, телефоны) умеют работать по протоколу SMB/CIFS. При необходимости, можно не ограничиваться доступом только по CIFS и настроить доступ к скаченному контенту по нескольким протоколам одноврмененно (CIFS, NFS, DLNA, AFP, web-доступ, FTP и т.д.)

Важно отметить, что я не уделяю внимания безопасности и разделения ролей. Все, кто имеют доступ к домашней сети, могут добавлять задания Transmission и пользоваться скаченными файлами. Это типовая ситуация в семье. Если треьбуется разделение по пользователям, что надо добавлять и настравать доступ для пользователей Samba

  1. Устанавливаем необходимые пакеты
    evgeniy@transmission:~$ sudo apt update
    evgeniy@transmission:~$ sudo apt dist-upgrade
    evgeniy@transmission:~$ sudo apt install transmission-cli transmission-common transmission-daemon samba
  2. Проверяем, что Transmission работает:
    evgeniy@transmission:~$ systemctl status transmission-daemon.service
    ● transmission-daemon.service - Transmission BitTorrent Daemon
         Loaded: loaded (/lib/systemd/system/transmission-daemon.service; enabled; vendor preset: enabled)
         Active: active (running) since Sun 2022-06-12 02:26:16 MSK; 29s ago
       Main PID: 1394 (transmission-da)
         Status: "Idle."
          Tasks: 4 (limit: 1103)
         Memory: 1.7M
         CGroup: /system.slice/transmission-daemon.service
                 └─1394 /usr/bin/transmission-daemon -f --log-error
    
    Jun 12 02:26:16 transmission systemd[1]: Starting Transmission BitTorrent Daemon...
    Jun 12 02:26:16 transmission systemd[1]: Started Transmission BitTorrent Daemon.
    Jun 12 02:26:17 transmission transmission-daemon[1394]: [2022-06-12 02:26:17.746] UDP Failed to set receive buffer: requested 4194304, got 425984 (tr-udp.c:>
    Jun 12 02:26:17 transmission transmission-daemon[1394]: [2022-06-12 02:26:17.746] UDP Failed to set send buffer: requested 1048576, got 425984 (tr-udp.c:94)
  3. Создаем необходимые каталоги. Нам потребуется родительский каталог /mnt/transmission и два подкаталога: downloads для скаченных файлов и query для торрент-файлов (заданий на скачиваение). Владельцем каталогов должен быть пользователь, от имени которого запускается Transmission. По умолчанию это debian-transmission. Также надо дать доступ на запить для одноименной группы debian-transmission. Это позволит Samba писать в каталоги, которыми владеет Transmission
    evgeniy@transmission:~$ sudo mkdir /mnt/transmission
    evgeniy@transmission:~$ sudo mkdir /mnt/transmission/downloads
    evgeniy@transmission:~$ sudo mkdir /mnt/transmission/query
    evgeniy@transmission:~$ sudo chown debian-transmission:debian-transmission -R /mnt/transmission
    evgeniy@transmission:~$ sudo chmod g+w /mnt/transmission/query
    evgeniy@transmission:~$ sudo chmod g+w /mnt/transmission/downloads
  4. Создаем шаблон файла настроект Transmission. Файл /var/lib/transmission-daemon/.config/transmission-daemon/settings.json является ссылкой на /etc/transmission-daemon/settings.json.
    evgeniy@transmission:~$ sudo cp /var/lib/transmission-daemon/.config/transmission-daemon/settings.json /var/lib/transmission-daemon/.config/transmission-daemon/settings.json.org
    Важно остановить демон Transmission, иначе конфигурация будет перезаписана:
    evgeniy@transmission:~$ sudo systemctl stop transmission-daemon.service
    Редактируем файл настроек
    evgeniy@transmission:~$ sudo vim /etc/transmission-daemon/settings.json
    Изменяем как минимум следующие параметры:
    1. Каталог для загруженных файлов и каталог для загружаемых файлов. Возможно, имеет смысл использовать разные каталоги, чтобы не "смущать" медиаплейеры недокаченными файлами
      "incomplete-dir": "/media/transmission/downloads/",
      "download-dir": "/media/transmission/downloads/",
    2. Каталог для новых запросов - файлов *.torrent (ради него всё и затевали).
      "watch-dir-enabled": true,
      "watch-dir": "/media/transmission/query",
    3. отменяем авторизацию на веб-интерфейсе Transmission
      "rpc-authentication-required": false,
      "rpc-host-whitelist-enabled": false,
      "rpc-whitelist-enabled": false,
    4. Меняем маску для создаваемых при закачке каталогов, чтобы их можно было удалять. JSON не понимает восьмиричный формат, поэтому маску надо перевести в десятичный формат. Отсюда
      "umask": 2,
    Мой файл настроек выглядит так:
    evgeniy@transmission:~$ sudo cat /etc/transmission-daemon/settings.json
    {
        "alt-speed-down": 50,
        "alt-speed-enabled": false,
        "alt-speed-time-begin": 540,
        "alt-speed-time-day": 127,
        "alt-speed-time-enabled": false,
        "alt-speed-time-end": 1020,
        "alt-speed-up": 50,
        "bind-address-ipv4": "0.0.0.0",
        "bind-address-ipv6": "::",
        "blocklist-enabled": false,
        "blocklist-url": "http://www.example.com/blocklist",
        "cache-size-mb": 4,
        "dht-enabled": true,
        "download-dir": "/media/transmission/downloads/",
        "download-limit": 100,
        "download-limit-enabled": 0,
        "download-queue-enabled": true,
        "download-queue-size": 5,
        "encryption": 1,
        "idle-seeding-limit": 30,
        "idle-seeding-limit-enabled": false,
        "incomplete-dir": "/media/transmission/downloads/",
        "incomplete-dir-enabled": false,
        "lpd-enabled": false,
        "max-peers-global": 200,
        "message-level": 1,
        "peer-congestion-algorithm": "",
        "peer-id-ttl-hours": 6,
        "peer-limit-global": 200,
        "peer-limit-per-torrent": 50,
        "peer-port": 51413,
        "peer-port-random-high": 65535,
        "peer-port-random-low": 49152,
        "peer-port-random-on-start": false,
        "peer-socket-tos": "default",
        "pex-enabled": true,
        "port-forwarding-enabled": false,
        "preallocation": 1,
        "prefetch-enabled": true,
        "queue-stalled-enabled": true,
        "queue-stalled-minutes": 30,
        "ratio-limit": 2,
        "ratio-limit-enabled": false,
        "rename-partial-files": true,
        "rpc-authentication-required": false,
        "rpc-bind-address": "0.0.0.0",
        "rpc-enabled": true,
        "rpc-host-whitelist": "",
        "rpc-host-whitelist-enabled": false,
        "rpc-password": "{97abd03265501542ff9948acc416e9eda05ad484PzREGxik",
        "rpc-port": 9091,
        "rpc-url": "/transmission/",
        "rpc-username": "transmission",
        "rpc-whitelist": "0.0.0.0",
        "rpc-whitelist-enabled": false,
        "scrape-paused-torrents-enabled": true,
        "script-torrent-done-enabled": false,
        "script-torrent-done-filename": "",
        "seed-queue-enabled": false,
        "seed-queue-size": 10,
        "speed-limit-down": 100,
        "speed-limit-down-enabled": false,
        "speed-limit-up": 100,
        "speed-limit-up-enabled": false,
        "start-added-torrents": true,
        "trash-original-torrent-files": false,
        "umask": 2,
        "upload-limit": 100,
        "upload-limit-enabled": 0,
        "upload-slots-per-torrent": 14,
        "utp-enabled": true,
        "watch-dir": "/media/transmission/query",
        "watch-dir-enabled": true
    }
    Запускаем Transmission
    evgeniy@transmission:~$ sudo systemctl start transmission-daemon.service
    Проверяем, что он нормально запустился:
    evgeniy@transmission:~$ systemctl status transmission-daemon.service
    ● transmission-daemon.service - Transmission BitTorrent Daemon
         Loaded: loaded (/lib/systemd/system/transmission-daemon.service; enabled; vendor preset: enabled)
         Active: active (running) since Sun 2022-06-19 11:31:54 MSK; 1 day 13h ago
       Main PID: 1682 (transmission-da)
         Status: "Uploading 13.65 KBps, Downloading 0.71 KBps."
          Tasks: 4 (limit: 1102)
         Memory: 532.7M
         CGroup: /system.slice/transmission-daemon.service
                 └─1682 /usr/bin/transmission-daemon -f --log-error
  5. Теперь настраиваем Samba
    evgeniy@transmission:~$ sudo vim /etc/samba/smb.conf
    делаем два сетевых ресурса - для готовых файлов и для запросов:
    [downloads]
    comment = Downloaded Torrents
    path = /media/transmission/downloads
    available = yes
    security = share
    read only = no
    browseable = yes
    public = yes
    writable = yes
    guest only = yes
    writable = yes
    force user = debian-transmission
    guest ok = yes
    create mask = 0666
    directory mask = 0777
    
    [query]
    comment = Torrent Files to Download
    path = /media/transmission/query
    available = yes
    security = share
    read only = no
    browseable = yes
    public = yes
    writable = yes
    guest only = yes
    writable = yes
    force user = debian-transmission
    guest ok = yes
    create mask = 0666
    directory mask = 0777
    Напомню, что задачу разграничения доступа к сетевым ресурсам и использованию торрент-сервиса в этой статье не ставим.
  6. Перезапускаем демон, проверяем, что с ним всё хорошо
    evgeniy@transmission:~$ sudo systemctl restart smbd.service
    evgeniy@transmission:~$ sudo systemctl status smbd.service
    ● smbd.service - Samba SMB Daemon
         Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
         Active: active (running) since Sun 2022-06-19 02:34:37 MSK; 6s ago
           Docs: man:smbd(8)
                 man:samba(7)
                 man:smb.conf(5)
        Process: 15116 ExecStartPre=/usr/share/samba/update-apparmor-samba-profile (code=exited, status=0/SUCCESS)
       Main PID: 15136 (smbd)
         Status: "smbd: ready to serve connections..."
          Tasks: 5 (limit: 1103)
         Memory: 9.2M
         CGroup: /system.slice/smbd.service
                 ├─15136 /usr/sbin/smbd --foreground --no-process-group
                 ├─15138 /usr/sbin/smbd --foreground --no-process-group
                 ├─15139 /usr/sbin/smbd --foreground --no-process-group
                 ├─15140 /usr/sbin/smbd --foreground --no-process-group
                 └─15142 /usr/sbin/smbd --foreground --no-process-group
    
    Jun 19 02:34:37 transmission systemd[1]: Starting Samba SMB Daemon...
    Jun 19 02:34:37 transmission systemd[1]: Started Samba SMB Daemon.
    Добавляем правило для Samba в межсетевой экран:
    evgeniy@transmission:~$ sudo ufw allow samba
  7. Далее надо проверить, что сетевые ресурсы доступны для просмотра и редактирования: создание файлов и каталогов, копирование файлов с рабочей станции, удаление файлов и каталогов
  8. По умолчанию Transmission доступен по адресу: http://<server IP>:9091/transmission


    Каталог с запросами (torrent-файлами), доступный как сетевой ресурс

Всё, служба заказчки торрентов готова

Комментариев нет: