Сервер Transmission в Proxmox
Тут я хочу описать способ создания сервера ВМ для штатной торрентокачалки, на мой взгляд, одной из самых удобных. Изначально я познакомился с Transmission благодаря Keenetic и загружал всё на подключенный к роутеру диск. Мне стало интересно, как его можно развернуть самостоятельно на хосте Proxmox с остальными ВМ и снять эту задачу с Keenetic.
Transmission по умолчанию имеет простенький веб интерфейс, который мы затюним, а так же клиенты под большинство ОС.
Перед написанием этой статьи я так же пробовал выполнить трюк в LXC контейнере, где для:
- Привелигированного контейнера не совсем безопасно для ядра;
- В непривилегированном контейнере нельзя выполнять операции, требующие прямого доступа к ядру, в том числе монтирование, а если и обходить , то нужно учитывать особенности работы с ID-сдвигами (UID/GID mapping). Сначала нужно монтировать шару на хосте, а затем привязать её к контейнеру. Это добавляет дополнительный уровень сложности.
В данном случае остается выбор ВМ. Изолированно от хоста. Просто разворачивается. Показываю с создания ВМ до самого конца.
В этой статье не описано создание хоста, на который будут загружаться файлы, поэтому сетевой диск и пользователя, у которого будут права на запись по SMB нужно подготовить самостоятельно.
TL:DR
Создание ВМ для Transmission
Выбор образа, установка параметров, подключение к хосту.
Установка и настройка Transmission
Обновление списка пакетов, установка Transmission, CIFS, nano. Создание каталога downloads, добавление записи о монтировании в /etc/fstab, настройка параметров в settings.json.
Тюнинг интерфейса Transmission
Установка веб-интерфейса с GitHub, настройка параметров для работы через веб-интерфейс.
Описание переменных в settings.json
Создаём ВМ для Transmission
Находим линк для закачки iso образа в releases.ubuntu.com и копируем. Я выбрал ubuntu-22.04.5-live-server-amd64
Идем на наш хост и выбираем local -> ISO Images -> Download from URL.
Вставляем ссылку из буфера в полеURL и выбираем Query URL. В File name отобразится имя образа. Жмем Download.
После загрузки образа выбираем Create VM и создаем ВМ с минимально доступными параметрами по железу.
В OS находим загруженный образ, который ранее закинули в local.
Во вкладке System оставляем параметры по умолчанию.
Во вкладке Disks выделяем минимальный Disk size 8 GiB и указываем Storage.
По CPU и Memory, по моим тестам, одновременно на 5 активных загрузок достаточно 2 cores и 2048 MiB. Больше не пробовал.
В Network снимаем маркер с Firewall если он настроен на хосте, либо настраиваем самостоятельно под свои нужды.
Общий конфиг ВМ может выглядеть так. Ставим маркер Start after created и Finish.
Проходим в Console и выполняем стандартную процедуру установки. На первом этапе я выбираю English.
В Installer update available выбираем Continue without updating.
В Keyboard configuration оставляем как есть -> Done.
В Chose the type of installation оставляем по умолчанию Ubuntu Server (minimized) -> Done.
Далее Network configuration, ну тут уж сами. У меня раздаётDHCP.
Позже задам статику на роутере.
ВProxy configuration мне ничего не нужно, оставляю пустым.
Ждем прогрузки зеркала вUbuntu archive mirror configuration -> Done
В Guided storage configuration оставляю по умолчанию -> Done -> Done -> Continue
В Profile Configuration - указываем своё имя для входа, имя сервера и пароль.
В Upgrade to Ubuntu Pro ничего не меняя, выбираем Continue.
В SSH Configuration я ставлю маркер на Instal OpenSSH Server чтобы в дальнейшем подключаться через терминал, мне так удобнее, а как вам - решайте сами.
В Featured server snaps ничего не меняя, выбираем Done.
После завершения установки отправляем ВМ в перезагрузку -> Reboot now
Так же может потребоваться нажать Enter, что якобы failed unmounting /cdrom. Отмонтировать для этого ничего не нужно.
После загрузки авторизуемся в системе и проверяем, какой адрес был выдан хосту чтобы потом не возникло вопросов, почему по SSH не доступен или не выполняется apt update. Выполняем ip a.
В сетевой карте ens18, где строка inet находим выданный адрес.
Установка и настройка Transmission
Далее я подключаюсь к свежеустановленному хосту по SSH и начинаю установку пакетов.
Напоминаю, что основная цель этого хоста загружать торренты по SMB на примонтированный диск, поэтому нужно заранее создать пользователя на хосте с файловой шарой, у которого будут права на запись в назначенную сетевую папку.
# Обновляем список пакетов sudo apt update # Устанавливаем Transmission, CIFS для монтирования по SMB, nano (по умолчанию в minimized отсутствует) sudo apt install transmission-cli transmission-daemon transmission-common cifs-utils nano -y # Создаем каталог downloads в mnt, в которую будем монтировать папку sudo mkdir -p /mnt/downloads # Открываем /etc/fstab для добавления записи о монтировании: sudo nano /etc/fstab
Добавляем в конец файла и меняем под себя
Список длинный и прокручивается. Выдели триплкликом ЛКМ ниже.
//192.168.1.x/downloads /mnt/downloads cifs username=transmission,password=YoUrPaSSw0rd,uid=fonwa,gid=fonwa,file_mode=0777,dir_mode=0777,iocharset=utf8,_netdev 0 0
- //192.168.1.x/downloads — путь к SMB-ресурсу на целевом хосте, куда будут загружаться файлы.
- /mnt/torrents — папка на только что созданном сервере Ubuntu, куда будет монтироваться сетевое хранилище.
- username=transmission,password=YoUrPaSSw0rd — учетные данные для доступа к SMB-ресурсу.
- uid=fonwa,gid=fonwa — задаёт владельцем и группой для всех файлов в этой папке пользователя fonwa.
- file_mode=0777,dir_mode=0777 — устанавливает права на файлы и каталоги, чтобы они были доступны для записи.
- iocharset=utf8 — кодировка.
_netdevуказывает, что это сетевое устройство, и монтирование должно происходить после запуска сети.
Сохраняем изменения и закрываем файл: Ctrl+X, Y, Enter.
# Применяем настройки монтирования sudo mount -a # Проверяем, что диск смонтирован правильно df -h
Убедитесь, что у папки /mnt/torrents есть права для пользователя fonwa (поскольку именно этот пользователь будет использовать Transmission):
ls -ld /mnt/downloads/
Вывод должен показывать, что владельцем папки является fonwa, и группа тоже должна быть fonwa.
Теперь нужно настроить Transmission так, чтобы он использовал смонтированную папку /mnt/torrents для сохранения скачиваемых торрентов.
# Останавливаем сервис transmission-daemon sudo systemctl stop transmission-daemon
Перед внесением изменений в settings.json, демон должен быть закрыт и остановлен, что мы и сделали выше, в противном случае параметры будут возвращены в предыдущее состояние.
# Открываем файл конфигурации Transmission: sudo nano /etc/transmission-daemon/settings.json
Далее меняем параметры. Я лишь опишу некоторые из них, необходимые для первоначального запуска и показать, что всё работает.
1. Найдите параметр "download-dir" и замените его на путь к смонтированной папке:
2. Отключаем whitelist, иначе на WEB морду не пустит:
3. Выставляем логин/пароль с которыми будем заходить на WEB GUI, по умолчанию transmission/transmission
rpc-password шифрует пароль после сохранения конфига, не удивляемся длинному шифру
Сохраняем изменения и закрываем файл: Ctrl+X, Y, Enter.
# Запускаем сервис transmission-daemon sudo systemctl start transmission-daemon # Проверяем, что сервис активен sudo systemctl status transmission-daemon
Открываем веб-интерфейс Transmission. Он обычно доступен на порту 9091, вводим в браузере:
http://192.168.1.X:9091 и введите свои логин/пароль, указанные в settings.json.
На этом этапе мы увидим скудный интерфейс Transmission.
Настройка задержки монтирования
Если сеть не успевает инициализироваться до попытки монтирования, контейнер продолжал работу, а хост с сетевой папкой перезагрузился, создадим сервис для монтирования:
# Создаем файл сервиса sudo nano /etc/systemd/system/mnt-downloads.mount
Добавляем в него содержимое и меняем под свои данные:
[Unit] Description=Mount CIFS Share Requires=network-online.target After=network-online.target [Mount] What=//192.168.1.x/downloads Where=/mnt/downloads Type=cifs Options=username=transmission,password=YoUrPaSSw0rd,uid=fonwa,gid=fonwa,file_mode=0777,dir_mode=0777,iocharset=utf8,_netdev [Install] WantedBy=multi-user.target
# Включаем и запускаем сервис sudo systemctl enable mnt-downloads.mount sudo systemctl start mnt-downloads.mount
Тюним интерфейс Transmission
# Переходим во временный каталог, откуда будем устанавливать веб-интерфейс cd /var/tmp/ # Загружаем последнюю версию Transmission Web Control с GitHub wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control.sh --no-check-certificate # Запускаем скрипт sudo bash install-tr-control.sh
Ставим папку по умолчанию, нажав 6 и скопировав путь ниже:
Устанавливаем последнюю версию, нажав 1
После установки открываем веб-интерфейс по тому же адресу
http://<IP-адрес вашего хоста>:9091
Поздравляю. Вы установили Transmission с человеческим WEB интерфейсом, если придется зайти на него через браузер.
- Интуитивно менять настройки через WEB GUI;
- Переключаться между десктопной и мобильной версиями;
- Пробросить порты в наружу чтобы ставить на загрузку извне.
Попробуем добавить рандомную magnet ссылку на скачивание.
Как видно, загрузка успешно началась, а это значит, что все выше выполнили корректно и по пути не возникло никаких ошибок. Вы молодцы.
upd. 06.11.2025
- Монтирование CIFS восстанавливается само при обращении;
- Система не виснет при старте, если сеть недоступна;
- Пароль хранится отдельно в /etc/cifs-credentials;
Вынести учётные данные в защищённый файл.
# Вынести учётные данные в защищённый файл sudo nano /etc/cifs-credentials
username=fonwa password=yourpassword domain=WORKGROUP # если домена нет, удалить строку
# Задать права sudo chmod 600 /etc/cifs-credentials sudo chown root:root /etc/cifs-credentials
Отредактировать уже существующий mnt-downloads.mount
sudo nano /etc/systemd/system/mnt-downloads.mount
Изменить под себя IP, name и имя папки, если отличается
[Unit] Description=Mount CIFS Share /mnt/downloads After=network-online.target Requires=network-online.target [Mount] What=//192.168.1.x/downloads Where=/mnt/downloads Type=cifs Options=credentials=/etc/cifs-credentials,uid=fonwa,gid=fonwa,file_mode=0777,dir_mode=0777,iocharset=utf8,_netdev
Создать еще 1 systemd юнит mnt-downloads.automount для автомонтирования
sudo nano /etc/systemd/system/mnt-downloads.automount
[Unit] Description=Automount trigger for /mnt/downloads After=network-online.target Requires=network-online.target [Automount] Where=/mnt/downloads TimeoutIdleSec=600 [Install] WantedBy=multi-user.target
Удалить или закомментировать последнюю запись в /etc/fstab.
Никаких дубликатов //192.168.1.x/downloads быть не должно. Это будет мешать работе systemd.
sudo nano /etc/fstab
Перезагрузить конфигурацию и активировать
sudo systemctl daemon-reload sudo systemctl enable --now mnt-downloads.automount
ls /mnt/downloads # вызовет автоматическое монтирование mount | grep downloads # убедиться, что точка активна # Временно отключить SMB сервис и запустить через некоторое время # Убедиться, что автомонтирование отрабатывает самостоятельно
Переменные в settings.json
Файл /etc/transmission-daemon/settings.json содержит все настройки для Transmission, включая параметры для работы веб-интерфейса, настроек сети, пути загрузки и другие. Я расшифрую основные параметры этого конфигурационного файла, чтобы вы могли настроить его под свои нужды.
Основные параметры конфигурации
- Описание: Устанавливает имя пользователя для аутентификации на веб-интерфейсе Transmission. Если не требуется аутентификация, оставьте пустым..
- Пример: rpc-username": "fonwa"
- Описание: Пароль для веб-интерфейса Transmission.
- Пример: rpc-password": "YoUrPaSSw0rd"
- Описание: Пароль для пользователя, указанного в rpc-username. Пароль сохраняется в виде зашифрованной строки (с использованием хэширования). Не рекомендуется ставить слишком простой пароль, особенно если сервер доступен из внешней сети.
- Описание: Это порт, через который вы будете подключаться к веб-интерфейсу. Обычно используется порт 9091, но вы можете изменить его на любой другой, если требуется.
- Описание: Указывает, на какой IP-адрес веб-интерфейс должен слушать. Если значение установлено в 0.0.0.0, веб-интерфейс будет доступен на всех интерфейсах сервера. Если вы хотите ограничить доступ только локальной сети или конкретному интерфейсу, укажите IP этого интерфейса.
- Пример: "rpc-bind-address": "0.0.0.0"
5. rpc-authentication-required
- Описание: Указывает, требуется ли ввод имени пользователя и пароля для доступа к веб-интерфейсу. Если установлено в false, веб-интерфейс будет доступен без авторизаци.
- Пример: "rpc-authentication-required": true
- Описание: Указывает, какие IP-адреса могут получить доступ к веб-интерфейсу. Используйте * для указания диапазонов (например, 192.168.1.* для разрешения всем в локальной сети).
- Пример: rpc-whitelist": ["127.0.0.1", "192.168.1.*"]
- Описание: Указывает, какие IP-адреса могут получить доступ к веб-интерфейсу. Используйте * для указания диапазонов (например, 192.168.1.* для разрешения всем в локальной сети).
- Описание: Если установлено в true, Transmission будет проверять белый список rpc-whitelist. Если в белом списке не указан IP, доступ будет заблокирован.
- Пример: "rpc-whitelist-enabled": true
- Описание: Папка для сохранения загруженных файлов.
- Пример: "download-dir": "/mnt/omv_share"
- Описание: Указывает, где будет храниться контент, загружаемый через Transmission. Убедитесь, что у пользователя, под которым работает Transmission, есть права на запись в эту директорию.
- Описание: Указывает место для хранения неполных файлов до завершения загрузки. Если параметр не установлен, все файлы загружаются в директорию, указанную в download-dir.
- Пример: incomplete-dir": "/mnt/omv_share/incomplete"
- Описание: Если установлено в true, файлы, находящиеся на стадии загрузки, будут сохраняться в директории, указанной в incomplete-dir
- Пример: "incomplete-dir-enabled": true
- Описание: Если установлено в true, файлы, находящиеся на стадии загрузки, будут сохраняться в директории, указанной в incomplete-dir.
- Описание: Определяет максимальное количество загрузок, которые могут быть активными одновременно. Если вы запускаете больше загрузок, чем указано, они будут ставиться в очередь.
- Пример: "download-queue-size": 5
- Описание: Определяет максимальное количество раздач, которые могут быть активными одновременно. Если вы начинаете больше раздач, чем указано, они будут ставиться в очередь.
- Пример: "upload-queue-size": 10
- Описание: Указывает порт для P2P-соединений. Если вы хотите, чтобы Transmission работал с определенным портом, укажите его здесь.
- Описание: Верхний предел диапазона для случайного выбора порта для P2P-соединений.
- Пример: "peer-port-random-high": 65535
- Описание: Нижний предел диапазона для случайного выбора порта для P2P-соединений.
- Пример: "peer-port-random-low": 49152
- Описание: Если соотношение раздачи к загрузке превышает это значение, Transmission завершит торрент.
- Описание: Если установлено в true, соотношение раздачи/загрузки будет учитываться при завершении торрент-сессий.
- Пример: "ratio-limit-enabled": true
- Описание: Если установлено в true, соотношение раздачи/загрузки будет
- Описание: Если установлено в true, Transmission будет использовать блок-лист для блокировки нежелательных IP-адресов.
- Пример: "blocklist-enabled": false
- Описание: Указывает URL для загрузки блок-листа IP-адресов. Transmission будет скачивать и использовать его для блокировки вредоносных или нежелательных пиров.
- Пример: "blocklist-url": "http://www.example.com/blocklist"
https://evs.msk.ru/transmission-on-debian/
https://tweenpath.net/installing-transmission-torrent-client-debian/