Запуск transmission в podman на Rocky Linux 8
Запуск transmission в podman на Rocky Linux 8.
Предыстория
В сентябре 2025 года купил себе два HP Proliant Microserver Gen8. Один в рабочем состояние, другой не рабочий (нет блока питания и памяти).
Железо уже старое, поддерживает только Legacy BIOS, нет UEFI загрузок, прошивка старая. Но удалось обновить версию BIOS 2019 года и iLO 2020 года. Ну загрузку смог решить только через сетевую загрузку ipxe, напишу попозже об этом в другой статье.
Данные
- OS Rocky Linux 8.10;
- CPU Intel(R) Celeron(R) CPU G1610T @ 2.30GHz
- RAM 8GB
- HDD 1TB, 10TB;
- Podman взамен Docker;
- Transmission как клиент для Torrent.
Podman
Podman используется по умолчанию, взамен Docker. Рекомендую прочитать книгу Podman in Action.
Клиента торрент transmission будем запускать под пользователем transmission.
Создадим свой systemd unit transmission.service для запуска торрент клиента.
Create user and group
sudo groupadd -g 1001 transmission
sudo useradd -g 1001 -u 1001 -m -d /home/transmission -c "Transmission client" -s /bin/bash transmission
Install podman
sudo dnf -y update
sudo dnf -y install podman
Create folders and set selinux labels
sudo mkdir /opt/transmission
sudo mkdir -p /data/transmission/complete /data/transmission/incomplete
sudo chown transmission:transmission -R /opt/transmission /data/transmission
sudo semanage -a -t container_file_t "/data/transmission(/.*)?"
sudo semanage -a -t container_file_t "/opt/transmission(/.*)?"
sudo restorecon -Rv /data/transmission/
sudo restorecon -Rv /opt/transmission/
Systemd unit
cat<<EOF | sudo tee /etc/systemd/system/transmission.service
[Unit]
Description=Podman container-transmission.service
Documentation=man:podman-generate-systemd(1)
Wants=network-online.target
After=network-online.target
RequiresMountsFor=/tmp/containers-user-1001/containers
[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
TimeoutStopSec=70
Group=transmission
User=transmission
ExecStartPre=-/usr/bin/podman stop transmission
ExecStartPre=-/usr/bin/podman rm transmission
ExecStart=/usr/bin/podman \
run -d \
--name transmission \
-e TZ=Asia/Aqtobe \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-v /opt/transmission/config:/config:z \
-v /data/transmission:/downloads:z \
docker.io/linuxserver/transmission
ExecStop=/usr/bin/podman stop \
-t 10 transmission
ExecStopPost=/usr/bin/podman stop \
-t 10 transmission
Type=forking
[Install]
WantedBy=default.target
sudo systemctl enable --now transmission.service
sudo systemctl status transmission.service
EOF
Еще раз меняем владельцев файлов transmission.
ОЧЕНЬ ВАЖНО: чтобы лучше понять этот раздел, рекомендую прочитать книгу Podman in Action, глава “Непривилегированные (rootless) контейнеры”, страница 150. Ну по крайней мере в моей книге на русском языке так.
Docker образ linuxserver/transmission - это сложный контейнер, тем что оно запускает сперва supervise, а supervise запускает под пользователем abc (910) transmission.
podman запускает весь контейнер под пользователем transmission, внутри контейнера создается отдельное пространство имен, под которым уже запускаются процессы в контейнере.
По этой причине, когда вы добавите новую торрент-раздачу в клиенте, то появится ошибка “Permission denied”, даже не смотря на то, что основной процесс контейнера запущен под пользователем transmission.
Начать нужно смотреть на содержимое файлов /etc/subgid, /etc/subuid. Например на моем сервере вывод будет следующим
[transmission@storage ~]$ cat /etc/subgid
support:100000:65536
transmission:165536:65536
[transmission@storage ~]$ cat /etc/subuid
support:100000:65536
transmission:165536:65536
То есть все процессы запущенные в контейнере transmission будут начинаться с GID, UID 165536 до (165536 + 65536). При этом root пользователь будет иметь GID, UID 165535. Ну я так думаю.
Посмотрим, под каким пользователем запущен процесс transmission в контейнере transmission.
[support@storage ~]$ sudo su - transmission
[sudo] password for support:
[transmission@storage ~]$ podman exec -it transmission ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:57 ? 00:00:00 /package/admin/s6/command/s6-svscan -d4 -- /run/service
root 16 1 0 14:57 ? 00:00:00 s6-supervise s6-linux-init-shutdownd
root 22 16 0 14:57 ? 00:00:00 /package/admin/s6-linux-init/command/s6-linux-init-shutdownd -d3 -c /run/s6/basedir -g 3000 -C -B
root 35 1 0 14:57 ? 00:00:00 s6-supervise s6rc-oneshot-runner
root 36 1 0 14:57 ? 00:00:00 s6-supervise s6rc-fdholder
root 37 1 0 14:57 ? 00:00:00 s6-supervise svc-cron
root 38 1 0 14:57 ? 00:00:00 s6-supervise svc-transmission
root 46 35 0 14:57 ? 00:00:00 /package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/command/s6-ipcserver-access -v0 -E
root 163 38 0 14:57 ? 00:00:00 bash ./run svc-transmission
root 164 37 0 14:57 ? 00:00:00 busybox crond -f -S -l 5
abc 172 163 0 14:57 ? 00:00:05 /usr/bin/transmission-daemon -g /config -f
root 217 0 99 15:24 pts/0 00:00:00 ps -ef
[transmission@storage ~]$ podman exec -it transmission grep abc /etc/passwd
abc❌911:911::/config:/bin/false
[transmission@storage ~]$ exit
[transmission@storage ~]$
Процесс transmission запущен под GID, UID 911.
Посмотрим какие GID, UID получили файлы, созданные transmission в каталоге /opt/transmission. Это служебный каталог.
[transmission@storage ~]$ ls -alZ /opt/transmission/
total 0
drwxr-xr-x. 3 transmission transmission unconfined_u:object_r:container_file_t:s0 20 Oct 16 12:23 .
drwxr-xr-x. 3 root root system_u:object_r:usr_t:s0 26 Oct 16 12:22 ..
drwxr-xr-x. 5 166446 166446 system_u:object_r:container_file_t:s0 153 Oct 20 15:21 config
Теперь нужно еще раз изменить владельца на каталоги /data/transmission/complete, /data/transmission/incomplete.
sudo chown 166446:166446 -R /data/transmission/complete /data/transmission/incomplete
ЕЩЕ РАЗ На вашем компьютере или сервере могут быть совершенно другие числа получится. Поэтому лучше начинать смотреть на /etc/subgid, /etc/subuid.