Giter Club home page Giter Club logo

docker-transmission's People

Contributors

0b100100 avatar aptalca avatar chbmb avatar drizuid avatar hacketiwack avatar j0nnymoe avatar jeff47 avatar johman10 avatar jonasalfredsson avatar lamarios avatar linuxserver-ci avatar nemchik avatar patsissons avatar phendryx avatar quexten avatar roxedus avatar sparklyballs avatar studioetrange avatar thelamer avatar thespad avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-transmission's Issues

Document support for custom web UI

We all know transmission web-ui is pretty terribad. This is a really nice Web-UI:

https://github.com/ronggang/transmission-web-control

Here's how I added it:

  1. Add environment variable TRANSMISSION_WEB_HOME and set it to /transmission-web-control
  2. Git clone that repo somewhere on the host where transmission container is running
  3. Add a volume mapping to the container, e.g. /apps/docker/transmission/transmission-web-control/src:/transmission-web-control
  4. Start container
  5. ?
  6. Much success, enjoy a better transmission web experience.

memory leaking?

linuxserver.io

Synology NAS, DSM 6.2.2-24922 (INTEL Atom C2538)

linuxserver-transmission.zip

The last several versions of the linuxserver docker/transmission require a lot of RAM and slow down terribly. After restarting the container, 1-2 days work fine, then repeats. Also found that an additional process transmission-daemon is being added every day. This is normal?

linuxserver RAM leaking

Thanks, team linuxserver.io

Docker compose configuration

It works with version 48 and lower.

docker info
Client:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 22:00:43 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   3a84010
 Built:        Thu Sep 22 15:56:00 2016
 OS/Arch:      linux/amd64

Logs look normal :

Creating transmission
Attaching to transmission
transmission    | [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
transmission    | [s6-init] ensuring user provided files have correct perms...exited 0.
transmission    | [fix-attrs.d] applying ownership & permissions fixes...
transmission    | [fix-attrs.d] done.
transmission    | [cont-init.d] executing container initialization scripts...
transmission    | [cont-init.d] 10-adduser: executing... 
transmission    | 
transmission    | -------------------------------------
transmission    |           _     _ _
transmission    |          | |___| (_) ___
transmission    |          | / __| | |/ _ \ 
transmission    |          | \__ \ | | (_) |
transmission    |          |_|___/ |_|\___/
transmission    |                |_|
transmission    | 
transmission    | Brought to you by linuxserver.io
transmission    | We gratefully accept donations at:
transmission    | https://www.linuxserver.io/donations/
transmission    | -------------------------------------
transmission    | GID/UID
transmission    | -------------------------------------
transmission    | User uid:    0
transmission    | User gid:    0
transmission    | -------------------------------------
transmission    | 
transmission    | [cont-init.d] 10-adduser: exited 0.
transmission    | [cont-init.d] 20-config: executing... 
transmission    | [cont-init.d] 20-config: exited 0.
transmission    | [cont-init.d] done.
transmission    | [services.d] starting services

I have also similar issue with sickrage and couchpotato (radarr works fine) : for those images, the git clone fails (code 128).

ping @sparklyballs

./run: line 3: /usr/sbin/crond: No such file or directory

linuxserver.io

The line in the title is scrolling in the logs non-stop every second. I could map /sbin/crond as a volume to the container, but that would just be a bandaid. However, mapping it does remove the messages and the logs indicate crons being scheduled. Looks like crond is not being included in the image?

Synology DSM 6.1.4-15217 Update 5

Linux servername 3.10.102 #15217 SMP Wed Dec 20 18:19:08 CST 2017 x86_64 GNU/Linux

docker create \

-a stdout -a stderr
-i
--name=transmission
-t
--restart=always
-e PUID=1026
-e PGID=101
-e TZ=US/Central
-v /volume1/docker/transmission/config:/config
-v /volume1/docker/transmission/scripts:/scripts
-v /volume1/Download-Temp/transmission:/transmission-downloads
-v /volume1/docker/OpenVPN-Client/scripts/pia_port:/tmp/transmission-peer-port:ro
-v /volume1/docker/transmission/scripts/cont-init.sh:/etc/cont-init.d/99-transmission-port
-v /etc/localtime:/etc/localtime:ro
-v /sbin/route:/sbin/route:ro
-v /sbin/ip:/sbin/ip:ro
--net=container:OpenVPN-Client
linuxserver/transmission:latest \

2018-02-13T14:26:32.662184234Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:33.663097667Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:34.664216216Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:35.665097554Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:36.666220121Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:37.667096025Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:38.667992142Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:39.669228478Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:40.670398402Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:41.671169404Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:42.672225306Z ./run: line 3: /usr/sbin/crond: No such file or directory
2018-02-13T14:26:43.673179772Z ./run: line 3: /usr/sbin/crond: No such file or directory

Issue with blocklist update script

copy blocklist-update script

[[ ! -f /config/blocklist-update.sh ]] && cp
/defaults/blocklist-update.sh /config/blocklist-update.sh

This is an issue if the script is updated.
The script wont be updated... this cause issue on client side.

When we are updating the images, we are not removing the mapped config folder so the script is not updated.

Kindly regards

Location of Transmission files

Where is the transmission install stored in transmission:latest?

Specifically where would I copy themes for the webui to by mapping them with volumes using docker-compose?

Transmission does not use "download-dir", default root folder instead

linuxserver.io

Host : Synology 918+

  • I stop the container
  • I update my settings.json to change incomplete-dir and download-dir (they are in my "Download" shared folder like this : "Downloads/done" and "Downloads/ongoing")
  • My "Downloads" shared folder is empty.
  • I start the container.
  • Starting a torrent : the incomplete-dir is created with .part files in it. Everything is fine.
  • When the download is finished, the download-dir is not created
  • Instead, i see my downloaded files at the root of "Downloads" shared folder

Interrestingly, when i access the transmission web interface, the download-dir is correct ("/downloads/test/done")

In my config, the 2 paths are absolute.

Nothing wrong in my logs. Nothing to tell me there's a permission problem or anything...

I have another server (archlinux home made) i wished to replace with the synology with transmission installed, and the configuration is the same.

This is my configuration file for reference :

{
    "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": true,
    "blocklist-url": "...",
    "cache-size-mb": 4,
    "dht-enabled": true,
    "download-dir": "/downloads/done",
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 2,
    "idle-seeding-limit": 1,
    "idle-seeding-limit-enabled": true,
    "incomplete-dir": "/downloads/ongoing",
    "incomplete-dir-enabled": true,
    "lpd-enabled": false,
    "message-level": 2,
    "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": true,
    "preallocation": 0,
    "prefetch-enabled": true,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 1,
    "ratio-limit-enabled": true,
    "rename-partial-files": true,
    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-host-whitelist": "",
    "rpc-host-whitelist-enabled": true,
    "rpc-password": "...",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "...",
    "rpc-whitelist": "127.0.0.1",
    "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-slots-per-torrent": 14,
    "utp-enabled": true,
    "watch-dir": "/watch",
    "watch-dir-enabled": true
}

Volumes mapped to mounted shares on the host don't work properly

linuxserver.io

When I run the transmission container on my compute host with volumes set to use mounted shares on a remote file server, the /config and /downloads/incomplete mounts work perfectly, but completed downloads are not added to the /mounted_share/transmission/downloads/complete folder - but they are visible inside the container's /downloads/complete folder.

If I change the volumes to use local folders on the host then it works fine, but I have to manually move the files to the share which is not ideal.

Centos 7.5

Docker-compose.yml contents:

version: "2"
services:
transmission:
image: linuxserver/transmission
container_name: transmission
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- TRANSMISSION_WEB_HOME=/combustion-release/ #optional
volumes:
- /mounted_share/transmission/config:/config
- /mounted_share/transmission/downloads:/downloads
- /mounted_share/transmission/watch:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped

The log contains nothing useful, no errors related to file moves at all.

Not using symlinks, but the host volume is a mounted CIFS share on a remote file server.

Thanks, team linuxserver.io

Python support

Is there any reason to keep out python support? I'd like to commit a patch for python as current version has no python support for post processing scripts.

Blocklists

See: https://github.com/transmission/transmission/wiki/Blocklists

It's generally good practice to run transmission with blocklists so I think it would be a good idea to setup a default blocklist in the settings.json (probably http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz) and enable it.

We'd then need to set it up to regularly update the blocklist by installing transmission-remote and setting up a daily cron job to run:
transmission-remote -n admin:password --blocklist-update

I would submit this as a pull request but I am not sure how to setup the cron job in docker.

Container starts and runs but never brings up interface

Expected Behavior

Navigate to http://10.0.1.2:9091/transmission/ and access the configuration/download interface

Current Behavior

Note: shouldn't need port forwarding whatsoever as i am going direct to the IP on my local network but this settings yielded different logs

  1. With port-forwarding setting to True
2020-01-06 04:19:00 stdout crond[253]: file root:
2020-01-06 04:19:00 stdout crond[253]: wakeup dt=55
2020-01-06 04:19:00 stdout crond[253]: user:root entry:0 3 * * * /config/blocklist-update.sh 2>&1
2020-01-06 04:19:00 stdout crond[253]: user:root entry:0       5       1       *       *       run-parts /etc/periodic/monthly
2020-01-06 04:19:00 stdout crond[253]: user:root entry:0       3       *       *       6       run-parts /etc/periodic/weekly
2020-01-06 04:19:00 stdout crond[253]: user:root entry:0       2       *       *       *       run-parts /etc/periodic/daily
2020-01-06 04:19:00 stdout crond[253]: user:root entry:0       *       *       *       *       run-parts /etc/periodic/hourly
2020-01-06 04:19:00 stdout crond[253]: user:root entry:*/15    *       *       *       *       run-parts /etc/periodic/15min
2020-01-06 04:18:13 stdout [2020-01-05 23:18:13.521] Port Forwarding State changed from "Starting" to "???" (port-forwarding.c:90)
2020-01-06 04:18:12 stdout [2020-01-05 23:18:12.521] Port Forwarding State changed from "Not forwarded" to "Starting" (port-forwarding.c:90)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.530] Port Forwarding (NAT-PMP) sendpublicaddressrequest succeeded (2) (natpmp.c:70)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.530] Port Forwarding (NAT-PMP) initnatpmp succeeded (0) (natpmp.c:70)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.530] Watching "/watch" for new .torrent files (daemon.c:573)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.530] transmission-daemon requiring authentication (daemon.c:554)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.530] Saved "/config/settings.json" (variant.c:1266)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.529] Using settings from "/config" (daemon.c:528)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.529] DHT Bootstrapping from 48 IPv4 nodes (tr-dht.c:156)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.529] DHT Reusing old id (tr-dht.c:307)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.529] RPC Server Password required (rpc-server.c:1220)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.529] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
2020-01-06 04:18:06 stdout [2020-01-05 23:18:06.529] Transmission 2.94 (d8e60ee44f) started (session.c:740)
  1. With port-forwarding setting to False
2020-01-06 04:25:01 stdout crond[254]: file root:
2020-01-06 04:25:01 stdout crond[254]: wakeup dt=14
2020-01-06 04:25:01 stdout crond[254]: user:root entry:0 3 * * * /config/blocklist-update.sh 2>&1
2020-01-06 04:25:01 stdout crond[254]: user:root entry:0       5       1       *       *       run-parts /etc/periodic/monthly
2020-01-06 04:25:01 stdout crond[254]: user:root entry:0       3       *       *       6       run-parts /etc/periodic/weekly
2020-01-06 04:25:01 stdout crond[254]: user:root entry:0       2       *       *       *       run-parts /etc/periodic/daily
2020-01-06 04:25:00 stdout crond[254]: user:root entry:0       *       *       *       *       run-parts /etc/periodic/hourly
2020-01-06 04:25:00 stdout crond[254]: user:root entry:*/15    *       *       *       *       run-parts /etc/periodic/15min
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.397] Watching "/watch" for new .torrent files (daemon.c:573)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] transmission-daemon requiring authentication (daemon.c:554)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] Saved "/config/settings.json" (variant.c:1266)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] Using settings from "/config" (daemon.c:528)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] DHT Bootstrapping from 48 IPv4 nodes (tr-dht.c:156)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] DHT Reusing old id (tr-dht.c:307)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] Port Forwarding Stopped (port-forwarding.c:180)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] RPC Server Password required (rpc-server.c:1220)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
2020-01-06 04:24:47 stdout [2020-01-05 23:24:47.396] Transmission 2.94 (d8e60ee44f) started (session.c:740)

Steps to Reproduce

  1. Download image from registry
  2. Click launch -> set advanced settings -> set PGID and PUID & Map volumes
  3. Run
  4. Logs appear to show that the launch was successful
  5. Accessing 10.0.1.2:9091 or 10.0.1.2:9091/transmission/ yields connection refused error

Environment

  • DSM: 6.2.2-24922 Update 4
  • Hardware: DS916+ (8 GB RAM) (x64 Intel Pentium-based)
  • Docker Image: linuxserver/transmission:latest

Command used to create docker container (run/create/compose/screenshot)

SynologyDockerSettings
settings.json

Docker logs

docker_log_152020.txt

Unable to save resume file: permission denied

Transmission frequently stops downloading with the following error:
Unable to save resume file: permission denied

Folders in /config are set with the following permissions:
image

I set the /config/resume folder permissions to abc users and it solved the issue.

Host: Fedora release 29 (Twenty Nine)
Docker: 18.09.1

image

Image linux/transmission was pulled and ran w/o modification

UDP Failed

If you view the logs you will see the following errors:

transmission    | [2018-09-30 16:20:41.770] UDP Failed to set receive buffer: requested 4194304, got 425984 (tr-udp.c:84)
transmission    | [2018-09-30 16:20:41.770] UDP Please add the line "net.core.rmem_max = 4194304" to /etc/sysctl.conf (tr-udp.c:89)
transmission    | [2018-09-30 16:20:41.770] UDP Failed to set send buffer: requested 1048576, got 425984 (tr-udp.c:95)
transmission    | [2018-09-30 16:20:41.770] UDP Please add the line "net.core.wmem_max = 1048576" to /etc/sysctl.conf (tr-udp.c:100)

Is it worth adding these optimizations?
https://falkhusemann.de/blog/2012/07/transmission-utp-and-udp-buffer-optimizations/

Can't "remove and delete"

Expected Behavior

Seeded files should be deleted when "remove and delete data" is chosen in Transmission Remote

Current Behavior

Torrent is removed and paused but data is not deleted

Steps to Reproduce

  1. Bind a writeable location to the container (observed /media/ssda/sonarr/seeding not working)
  2. Download a torrent and begin seeding
  3. Choose "remove and delete data" on the torrent

Environment

OS: Ubuntu 18.04 (server and client, client using Transmission Remote 1.3.1)
CPU architecture: x86_64
How docker service was installed: Portainer

Command used to create docker container (run/create/compose/screenshot)

docker run --name transmission --runtime runc -v /media/ssda/docker_volumes/transmission/config:/config -v /media/ssda:/media/ssda -v /media/nelnet/seeds:/downloads -v /media/ssda/lidarr:/media/ssda/lidarr -v /media/nelnet:/media/nelnet -v /media/ssda/docker_volumes/transmission/watch:/watch -v /media/drobo:/media/drobo -v /media/ssda/docker_volumes/transmission/postscript:/postscript -p 51413:51413/tcp -p 51413:51413/udp -p 9091:9091/tcp --net bridge --restart unless-stopped -h 7f1539fa72c4 --expose 51413/tcp --expose 51413/udp --expose 9091/tcp -e 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' -e 'PS1=$(whoami)@$(hostname):$(pwd)\$ ' -e 'HOME=/root' -e 'TERM=xterm' -e 'PUID=1000' -e 'PGID=1000' -e 'TZ=US/Central' -e 'USER=ben' -e 'PASS=foobar' -d --entrypoint "/init" linuxserver/transmission:latest

Docker logs

[2020-01-12 18:04:52.403] My.Torrent Pausing (torrent.c:1856)

Directory creation on startup

Is it possible to modify the way the directories are created, or should I say, is it possible to not have them hardcoded.

I'm not very savy with Docker just yet, so I'll have to be told if it is at all possible.
Since the config file for Transmission can be edited at any time (transmission only saves when shutting down if I recall correctly), can 30_set_config.sh be updated with those values?

The reason I bring this up, is that if you are not saving in the directory complete, then you'll be creating said directory any time the container is started.

My only workaround to this at the moment is a fork with those values set to my current environment, but I am looking for alternatives as well.

UID and GID doesn't work as expected

I'm trying to map a user from my host machine, let's say user foo with uid = 1000 and pid = 1000. I'm using the following command for creating container :

docker run --name transmission -d -e "USERNAME=foo" -e "PASSWORD=pass" -e PUID=1000 -e PGID=1000 -e TZ=Europe/Paris -p 9091:9091 -p 51413:51413 -p 51413:51413/udp -v /home/foo/transmission/config:/config -v /home/foo/data:/downloads -v /home/foo/transmission/watch:/watch --restart unless-stopped transmission

When I add a new torrent, it doesn't give the right user permission. I have always user root on my downloaded files. What can I do, so my downloaded files have permission of foo user ?

Additional transmission-daemon processes spawned for each blocklist updates

linuxserver.io

If you are new to Docker or this application our issue tracker is ONLY used for reporting bugs or requesting features. Please use our discord server for general support.


Expected Behavior

There is an optional feature to periodically update the blocklist, which (when enabled) would happen once a day at 3AM. The /config/blocklist-update.sh script downloads the current blocklist file, extracts it, then makes an attempt to have transmission-daemon reload its configs.

Current Behavior

As it looks, whenever the updater script is executed, a new transmission-daemon process is spawned, with the previously existing ones kept.

Steps to Reproduce

magrathea:/docker/transmission$ docker-compose up -d
Creating network "transmission_default" with the default driver
Creating transmission ... done
magrathea:
/docker/transmission$ docker exec -it transmission /bin/bash
root@7538d656c2c3:/# ps
PID USER TIME COMMAND
1 root 0:00 s6-svscan -t0 /var/run/s6/services
32 root 0:00 s6-supervise s6-fdholderd
247 root 0:00 s6-supervise cron
248 root 0:00 s6-supervise transmission
250 root 0:00 bash ./run
251 root 0:00 /usr/sbin/crond -f -S -l 0 -c /etc/crontabs
** 257 abc 0:00 /usr/bin/transmission-daemon -g /config -c /watch -f **
273 root 0:00 /bin/bash
281 root 0:00 ps
root@7538d656c2c3:/# /config/blocklist-update.sh
root@7538d656c2c3:/# ps
PID USER TIME COMMAND
1 root 0:00 s6-svscan -t0 /var/run/s6/services
32 root 0:00 s6-supervise s6-fdholderd
247 root 0:00 s6-supervise cron
248 root 0:00 s6-supervise transmission
251 root 0:00 /usr/sbin/crond -f -S -l 0 -c /etc/crontabs
** 257 abc 0:01 /usr/bin/transmission-daemon -g /config -c /watch -f **
273 root 0:00 /bin/bash
360 root 0:00 bash ./run
** 362 abc 0:02 /usr/bin/transmission-daemon -g /config -c /watch -f **
366 root 0:00 ps
root@7538d656c2c3:/# /config/blocklist-update.sh
root@7538d656c2c3:/# ps
PID USER TIME COMMAND
1 root 0:00 s6-svscan -t0 /var/run/s6/services
32 root 0:00 s6-supervise s6-fdholderd
247 root 0:00 s6-supervise cron
248 root 0:00 s6-supervise transmission
251 root 0:00 /usr/sbin/crond -f -S -l 0 -c /etc/crontabs
** 257 abc 0:17 /usr/bin/transmission-daemon -g /config -c /watch -f **
273 root 0:00 /bin/bash
** 362 abc 0:09 /usr/bin/transmission-daemon -g /config -c /watch -f **
689 root 0:00 bash ./run
** 691 abc 0:01 /usr/bin/transmission-daemon -g /config -c /watch -f **
698 root 0:00 ps

I don't exactly know where/when the bug was introduced. Image #5682f5743e70 (14 months old according to Docker), as one example, didn't show this problem.

As it looks, the problem happens with this line in /config/blocklist-update.sh :

s6-svc -h /var/run/s6/services/transmission

The problem (ie. spawning an extra transmission-daemon process) can be triggered by executing this command alone.

Environment

OS: Alpine 3.10.3
CPU architecture: x86_64
How docker service was installed: apk
magrathea:~# apk list|grep docker|grep installed
docker-bash-completion-18.09.8-r0 x86_64 {docker} (Apache-2.0) [installed]
docker-cli-18.09.8-r0 x86_64 {docker} (Apache-2.0) [installed]
docker-openrc-18.09.8-r0 x86_64 {docker} (Apache-2.0) [installed]
docker-doc-18.09.8-r0 x86_64 {docker} (Apache-2.0) [installed]
docker-engine-18.09.8-r0 x86_64 {docker} (Apache-2.0) [installed]
docker-18.09.8-r0 x86_64 {docker} (Apache-2.0) [installed]

I think the problem is not specific to any particular versions of docker. This machine has been kept updated regularly. The mentioned (14 months old) image has run flawlessly, at any given time. Updated versions of the transmission image that I had tried (I don't know exact specifics) after #5682f5743e70 all showed this problem.

Command used to create docker container (run/create/compose/screenshot)

UIDs, user/pass, IP addresses, local paths etc. all censored.

version: "3"
services:
transmission:
image: linuxserver/transmission:latest
container_name: transmission
volumes:
- //_config:/config
- /
/foo:/downloads
- //_watch:/watch
ports:
- "9091:9091"
- "
:"
- "
:/udp"
environment:
PGID: "
"
PUID: ""
TZ: "Europe/Budapest"
TRANSMISSION_WEB_HOME: "/transmission/"
USER: "
"
PASS: "
***"
S6_KILL_GRACETIME: "30000"
restart:
unless-stopped

Docker logs

Specific IDs have been censored.

Syslog is used to collect docker's logs, thus the seemingly unusual format.

I have filtered the log snippet through grep -vE 'announce|variant|torrent|verify.c|net.c' as to get rid of any irrelevant junk.

I spun up the container at 23:45:06, executed /config/blocklist-update.sh from inside at around 23:46:05, then shut down the container (by docker-compose down) at 23:46:49.

2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [s6-init] making user provided files available at /var/run/s6/etc...exited 0.
2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [s6-init] ensuring user provided files have correct perms...exited 0.
2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [fix-attrs.d] applying ownership & permissions fixes...
2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [fix-attrs.d] done.
2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] executing container initialization scripts...
2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 01-envfile: executing...
2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 01-envfile: exited 0.
2020-01-01T23:45:06+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 10-adduser: executing...
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]:
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: -------------------------------------
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: _ ()
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: | | ___ _ __
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: | | / | | | / \
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: | | _
\ | | | () |
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: || |
/ || __/
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]:
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]:
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: Brought to you by linuxserver.io
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: We gratefully accept donations at:
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: https://www.linuxserver.io/donate/
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: -------------------------------------
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: GID/UID
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: -------------------------------------
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]:
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: User uid: ***
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: User gid: ***
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: -------------------------------------
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]:
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 10-adduser: exited 0.
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 20-config: executing...
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 20-config: exited 0.
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 99-custom-files: executing...
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [custom-init] no custom files found exiting...
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] 99-custom-files: exited 0.
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [cont-init.d] done.
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [services.d] starting services
2020-01-01T23:45:07+01:00 localhost.hq 564356623c6f[2656]: [services.d] done.
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.916] Transmission 2.94 (d8e60ee44f) started (session.c:740)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.917] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:971)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.918] RPC Server Adding address to whitelist: *** (rpc-server.c:971)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.919] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.920] RPC Server Whitelist enabled (rpc-server.c:1217)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.921] RPC Server Password required (rpc-server.c:1220)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.921] DHT Reusing old id (tr-dht.c:307)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.922] DHT Bootstrapping from 111 IPv4 nodes (tr-dht.c:156)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.923] Using settings from "/config" (daemon.c:528)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.925] transmission-daemon requiring authentication (daemon.c:554)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.926] Blocklist "blocklist.bin" contains 409833 entries (blocklist.c:100)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.931] Changed open file limit from 1048576 to 1024 (fdlimit.c:380)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.931] Port Forwarding (NAT-PMP) initnatpmp succeeded (0) (natpmp.c:70)
2020-01-01T23:45:08+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:08.931] Port Forwarding (NAT-PMP) sendpublicaddressrequest succeeded (2) (natpmp.c:70)
2020-01-01T23:45:16+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:16.916] Port Forwarding State changed from "Not forwarded" to "Starting" (port-forwarding.c:92)
2020-01-01T23:45:16+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:45:16.917] Port Forwarding State changed from "Starting" to "???" (port-forwarding.c:92)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.083] blocklist skipped invalid address at line 1 (blocklist.c:352)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.084] blocklist skipped invalid address at line 2 (blocklist.c:352)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.085] blocklist skipped invalid address at line 25378 (blocklist.c:352)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.085] blocklist skipped invalid address at line 25379 (blocklist.c:352)
...
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.101] blocklist skipped invalid address at line 513052 (blocklist.c:352)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.101] Blocklist "blocklist.bin" updated with 409833 entries (blocklist.c:408)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.101] Blocklist "blocklist.bin" contains 409833 entries (blocklist.c:100)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.101] Transmission 2.94 (d8e60ee44f) started (session.c:740)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.101] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:971)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.101] RPC Server Adding address to whitelist: *** (rpc-server.c:971)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.102] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.102] RPC Server Whitelist enabled (rpc-server.c:1217)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.102] RPC Server Password required (rpc-server.c:1220)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.102] UDP Couldn't bind IPv4 socket (tr-udp.c:271)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.102] DHT Reusing old id (tr-dht.c:307)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.103] Using settings from "/config" (daemon.c:528)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.103] transmission-daemon requiring authentication (daemon.c:554)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.103] Blocklist "blocklist.bin" contains 409833 entries (blocklist.c:100)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.104] Port Forwarding (NAT-PMP) initnatpmp succeeded (0) (natpmp.c:70)
2020-01-01T23:46:05+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:05.105] Port Forwarding (NAT-PMP) sendpublicaddressrequest succeeded (2) (natpmp.c:70)
2020-01-01T23:46:12+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:12.079] Port Forwarding State changed from "Not forwarded" to "Starting" (port-forwarding.c:92)
2020-01-01T23:46:13+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:13.079] Port Forwarding State changed from "Starting" to "???" (port-forwarding.c:92)
2020-01-01T23:46:49+01:00 localhost.hq 564356623c6f[2656]: Caught SIGTERM signal!
2020-01-01T23:46:49+01:00 localhost.hq 564356623c6f[2656]: localhost:9091/transmission/rpc/ responded: "success"
2020-01-01T23:46:49+01:00 localhost.hq 564356623c6f[2656]: [cont-finish.d] executing container finish scripts...
2020-01-01T23:46:49+01:00 localhost.hq 564356623c6f[2656]: [cont-finish.d] done.
2020-01-01T23:46:49+01:00 localhost.hq 564356623c6f[2656]: [s6-finish] waiting for services.
2020-01-01T23:46:49+01:00 localhost.hq 564356623c6f[2656]: s6-svwait: fatal: supervisor died
2020-01-01T23:46:49+01:00 localhost.hq 564356623c6f[2656]: [s6-finish] sending all processes the TERM signal.
2020-01-01T23:46:50+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:50.081] Reloading settings from "/config" (daemon.c:472)
2020-01-01T23:46:50+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:50.082] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:971)
2020-01-01T23:46:50+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:50.083] RPC Server Adding address to whitelist: **** (rpc-server.c:971)
2020-01-01T23:46:50+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:50.083] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
2020-01-01T23:46:50+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:50.084] RPC Server Whitelist enabled (rpc-server.c:1217)
2020-01-01T23:46:50+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:50.084] RPC Server Password required (rpc-server.c:1220)
2020-01-01T23:46:50+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:50.085] Blocklist "blocklist.bin" contains 409833 entries (blocklist.c:100)
2020-01-01T23:46:54+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:54.301] DHT Not saving nodes, DHT not ready (tr-dht.c:359)
2020-01-01T23:46:54+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:54.302] Port Forwarding Stopped (port-forwarding.c:180)
2020-01-01T23:46:54+01:00 localhost.hq 564356623c6f[2656]: [2020-01-01 23:46:54.304] Changed open file limit from 1048576 to 1024 (fdlimit.c:380)
2020-01-01T23:46:54+01:00 localhost.hq 564356623c6f[2656]: Closing transmission session... done.

Thanks in advance :-) .

Ubuntu mirrors seem to be wrong

$ docker exec -i -t transmission /bin/bash 
root@901c2eeaf64f:/# cat /etc/apt/sources.list
#Thees Mirrors should be used for DockerBuild only. It will get replaced with a faster image from local sources on build.
deb http://apt.linuxserver.io/ubuntu/ trusty main restricted universe multiverse
deb-src http://apt.linuxserver.io/ubuntu/ trusty main restricted universe multiverse
deb http://apt.linuxserver.io/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://apt.linuxserver.io/ubuntu/ trusty-updates main restricted universe multiverse
deb http://apt.linuxserver.io/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://apt.linuxserver.io/ubuntu/ trusty-security main restricted universe multiverse

Environment variables not working

environment:
  - PUID=1000
  - PGID=1000
  - TZ=Europe/London
  - TRANSMISSION_WEB_HOME=/combustion-release/ #optional
  - USER=username #optional
  - PASS=password #optional
  1. PUID and PGID are not working, had to chown the folder as it was created as root.

  2. USER and PASS are not working.
    Is this for the webgui at all?
    The documentation then further down says to change it in the settings.json

Securing the webui with a username/password.
this requires 3 settings to be changed in the settings.json file.

Make sure the container is stopped before editing these settings.

"rpc-authentication-required": true, - check this, the default is false, change to true.

"rpc-username": "transmission", substitute transmission for your chosen user name, this is just an example.

rpc-password will be a hash starting with {, replace everything including the { with your chosen password, keeping the quotes.

Transmission will convert it to a hash when you restart the container after making the above edits.

Update to Transmission 2.94

The image is running Transmission 2.92

Transmission 2.94 was released on May 1 2018
Transmission 2.93 was released on Jan 24 2018

Can we get an update? Thank you!

Is the EXPOSE directive really needed in the Dockerfile?

Don't know if this the right channel for this, but here goes. Is the EXPOSE directive really needed in the Docker file? I.e. EXPOSE 9091 51413. We need to expose ports when we do docker create anyway. When configuring the transmission daemon i wanted to use another peer port and exposed that port like this -p 26433:26433 when doing docker create. Isn't the EXPOSE directive in the Dockerfile redundant and a bit wrong?

Unable to customize settings.json at build-time

linuxserver.io

I am trying to build a customized image with the following Dockerfile content

FROM linuxserver/transmission

ARG rpc_username=transmissionuser
ARG rpc_password=transmissionpwd
ARG peer_port=50000

RUN sed -i "/rpc-username/c\    \"rpc-username\": \"${rpc_username}\"," /defaults/settings.json
RUN sed -i "/rpc-password/c\    \"rpc-password\": \"${rpc_password}\"," /defaults/settings.json
RUN sed -i "/peer-port\":/c\    \"peer-port\": ${peer_port}," /defaults/settings.json

What I notice after a build is that the /defaults/settings.json will, as it should, contain the modifications, but when starting a docker run or docker-compose up, with the provided arguments, the /config/settings.json will contain none of the edits, except a totally different username that I have not specified anywhere (happens to be the host OS's username).

COPY-ing the final settings.json to /config at build time got replaced as well.

Is there a way to really customize the settings.json at build time?
Is there any use to the /defaults/settings.json?

Thanks, team linuxserver.io

Don't find settings.json on Synology

linuxserver.io

Docker on Synology

Thanks, team linuxserver.io

My problem is simple.
I would like to add a login / password to the transmission GUI but I can not find the settings.json file in /config.
I close the docker I go to /config, but nothing.
Can you give me the full path to the fihcier settings.json location on a synology?

Thx for your help

Why doesn't it download without an interactive terminal?

When I run docker-transmission with:
docker run -it linuxserver/docker-transmission /bin/bash
and then start a download like this

transmission-remote -a "magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel&tr=udp%3A%2F%2Fexplodie.org%3A6969"

It works fine!

But, when I run it non-interactively:

docker run linuxserver/docker-transmission transmission-remote -a "magnet:?xt=urn:btih:08ada5a7a6183aae1e09d831df6748d566095a10&dn=Sintel&tr=udp%3A%2F%2Fexplodie.org%3A6969"

I get this error: error log

What am I doing wrong?

Host OS:
Ubuntu 18.04

Configuration file not save

When the container is stop/kill, the configuration file is not save and we loose all the modifications done with the GUI.

Can't exit transmission cleanly when using custom RPC settings

I noticed my transmission won't save setting changes made via the GUI to the settings.json file when stopping the container.

After some digging, I found out it's because I have some custom RPC settings in my settings.json.

This container uses /usr/bin/transmission-remote --exit command to exit transmission cleanly via RPC protocol. But it won't work if the default related RPC settings have changed.

  1. Change rpc-port from 9091 to something else:

Screen Shot 2019-08-21 at 12 52 31

  1. Enable rpc-authentication-required:

Screen Shot 2019-08-21 at 12 53 37

Have to disable rpc-authentication-required to make it work:

Screen Shot 2019-08-21 at 13 02 37

Resume

linuxserver.io

Host OS: Ubuntu Server 16.04

I do not get the resume function in Transmission to work.
When restarting the Docker container I expect the ongoing torrent transactions to be resumed. Instead every torrent is removed. I can se that the resume directory contains multiple *.resume files. The files and directory are read and writable for everyone.

HTTPS issues connecting to tracker

In trying to connect to a private tracker to download a .torrent file, Transmission returns:

Error adding "https://______"
gotMetadataFromURL: http error 0: No Response

Likewise if I download the .torrent file through my browser and then upload it to Transmission, the torrent adds itself but then errors out:

Tracker returned an error: Tracker gave HTTP response code 0 (No Response)'. 

I tested whether I can wget the file through ssh directly on my Synology and that works fine.
If I wget inside the docker-transmission container, it errors out:

Connecting to ____                                                                                                                       
wget: error getting response: Connection reset by peer 

The issue seems to be related to HTTPS connections through this Transmission docker only. Any help here would be hot.

Environment

OS: DSM 6.2.2 Update 4
CPU architecture: x64
How docker service was installed: Docker GUI on DSM

Command used to create docker container (run/create/compose/screenshot)

The equivalent of this in GUI form:

docker create \
  --name=transmission \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -v <path to data>:/config \
  -v <path to downloads>:/downloads \
  -v <path to watch folder>:/watch \
  --restart unless-stopped \
  linuxserver/transmission

With the Bridge Network checkbox enabled.

You're my only hope.

blocklist updater script broken for HTTPS uri's

If you attempt to refresh an https blocklist, you will see this error message in the logs:
wget: can't execute 'ssl_helper': No such file or directory

If we include openssl in the installed packages list, this error should go away.

linuxserver.io

Thanks, team linuxserver.io

Please disable autobuild every 7 days!

Currently project has Jenkins auto build every 7 days that create new docker image without any changes!
Please setup Jenkins to build new image only if any changes occur.

port closed using second ip

Expected Behavior

I want to bind the peer-port on a second ip (-p ip2:51413:51413 & udp )

Current Behavior

The peer-port (not ui) are always closed if i specify the second ip. (ip1 works) (checked with trans port test - and as result by tracker)

Steps to Reproduce

create a container of this image with second or not main ip (not sure about the technically correct description)

Environment

OS: debian 10
CPU architecture: x86_64/arm32/arm64
How docker service was installed:

Command used to create docker container

Port open (all fine)
docker create
--name=transmission
-e PUID=1000
-e PGID=1000
-e TZ='Europe/Berlin'
-p 9091:9091
-p 51413:51413
-p 51413:51413/udp
-v /home/user/log:/log
-v /home/user/config:/config
-v /home/user/Downloads:/downloads
linuxserver/transmission

Port closed (not working)
docker create
--name=transmission
-e PUID=1000
-e PGID=1000
-e TZ='Europe/Berlin'
-p ip2:9091:9091
-p ip2:51413:51413
-p ip2:51413:51413/udp
-v /home/user/log:/log
-v /home/user/config:/config
-v /home/user/Downloads:/downloads
linuxserver/transmission

Test: Port open (all fine - browser testpage)
docker run -d -p ip2:51413:80 tutum/apache-php

Addition Infos

  • some other interesting fact: the ui is available at ip2.
  • i also tried some diff ports to exclude 51413-Issues
  • all tests are done remote (home-client -> remote-root-server)
  • without docker, ip2 works fine with transmission (configured as "bind-address-ipv4" in settings.json [of course not configured while using docker])

netstat -tuplen | grep 51413 # looks good
tcp 0 0 ip2:51413 0.0.0.0:* LISTEN 0 3239823 7307/docker-proxy
udp 0 0 ip2:51413 0.0.0.0:* 0 3244174 7321/docker-proxy

ideas

There is something with the "bind-address-ipv4" or the "peer-port" logic that does not work with with docker-mapped ips

config overwritten settings.json

using the following setup:

docker run -d
--name=transmission
-v //f/docker/transmission/config:/config
-v //f/docker/transmission/downloads:/transmission/downloads
-v //f/docker/transmission/watch:/watch
-e PGID=0 -e PUID=0
--net container:openvpn-client
--health-cmd "curl --fail https://www.google.ca || exit 1"
--restart=always
linuxserver/transmission

it seems from time to time my settings.json in /config is overwritten with the default settings.json. As a temporary fix I have manually modified the /defaults/settings.json to contain my changes but there should be a better way of doing this. My suggestion would be changes to /config/settings.json should persist to /defaults/settings.json

I haven't located the root cause of the issue, the container is only ever stopped and started but the image is never deleted.

Multi daemon spawned on blocklist refresh when authentication is enabled

linuxserver.io

If you are new to Docker or this application our issue tracker is ONLY used for reporting bugs or requesting features. Please use our discord server for general support.


Expected Behavior

There shouldn't be multiple daemons running at the same time

Current Behavior

At night, when blocklist-update.sh script is being executed, a new daemon is spawned but the old one never dies.

As we can see in the logs, the issue occurs because on SIGTERM being sent to the daemon, where the authentication is missing.

Steps to Reproduce

  1. In transmission config, enable rpc-auth with username and password
...
"blocklist-enabled": true,
"blocklist-url": "http://john.bitsurge.net/public/biglist.p2p.gz",
...
"rpc-authentication-required": true,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-password": "some-password",
"rpc-port": 9091,
"rpc-url": "/transmission/",
"rpc-username": "some-username",
"rpc-whitelist": "127.0.0.1",
"rpc-whitelist-enabled": false,
...
  1. Shell into the running container
  2. Execute blocklist-update.sh
  3. ps -a shows now 2 running daemons

Environment

OS: Linux Ubuntu
CPU architecture: x86_64
How docker service was installed: Apt
linuxserver/transmission image SHA: 7465b15bcd1f

Command used to create docker container (run/create/compose/screenshot)

docker-compose.yml

version: '3'
services:
  transmission:
    image: linuxserver/transmission
    restart: unless-stopped
    ports:
      - 55032:55032/udp
      - 55032:55032
    environment:
      - TZ=Europe/Brussels
      - PUID=10000
      - PGID=10000
    volumes:
      - ./transmission-settings.json:/config/settings.json:ro
      - /storage:/downloads
      - transmission-config:/config
$ docker-compose up -d

Docker logs

transmission_1  | Caught SIGTERM signal!
transmission_1  | Unexpected response: <h1>401: Unauthorized</h1>Unauthorized User
transmission_1  | [cont-finish.d] executing container finish scripts...
transmission_1  | [cont-finish.d] done.
transmission_1  | [s6-finish] waiting for services.
transmission_1  | [s6-finish] sending all processes the TERM signal.
transmission_1  | [2020-03-17 00:39:18.808] Reloading settings from "/config" (daemon.c:472)
transmission_1  | [2020-03-17 00:39:18.808] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:971)
transmission_1  | [2020-03-17 00:39:18.808] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
transmission_1  | [2020-03-17 00:39:18.808] RPC Server Password required (rpc-server.c:1220)
transmission_1  | [2020-03-17 00:39:18.808] Port Forwarding Stopped (port-forwarding.c:180)
transmission_1  | [2020-03-17 00:39:18.900] Reloading settings from "/config" (daemon.c:472)
transmission_1  | [2020-03-17 00:39:18.900] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:971)
transmission_1  | [2020-03-17 00:39:18.900] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
transmission_1  | [2020-03-17 00:39:18.900] RPC Server Password required (rpc-server.c:1220)
transmission_1  | [2020-03-17 00:39:18.900] Couldn't bind port 55032 on 0.0.0.0: Address in use (Is another copy of Transmission already running?) (net.c:379)
transmission_1  | [2020-03-17 00:39:18.901] Couldn't bind port 55032 on ::: Address in use (Is another copy of Transmission already running?) (net.c:379)

Use single /download directory

linuxserver.io

Would you agree to get rid of the /downloads/complete and /downloads/incomplete directories and stick to single /downloads directory by default ?. Having incomplete directory is excessive to rename-partial-files: true and requires manual coping to medial library.
Of course everyone could edit the settings manually but it would be nice to have it simple in default configuration.
If you agree, I could do a PR with necessary changes ?

Thanks, team linuxserver.io

Can't connect to tracker

Hi,
I'm trying to use the docker image to have a torrent client on my server.
The server runs Fedora 28, SELinux permissive

When I add a torrent (official Ubuntu torrent) via web interface (access through proxy), I get Could not connect to tracker in the log files and the torrent won't start downloading. Network access is working as I can ping Google from inside the container.

I'm relatively new to Docker so I don't quite know how to debug the problem. Are any more steps required to get transmission working?
Any suggestions would be highly appreciated!

P.S: Here is my docker-compose.yml:

services:
  ...
  transmission:
    image: "linuxserver/transmission:latest"
    volumes:
      - /mnt/data/transmission/config:/config
      - /mnt/data/transmission/watch:/watch
      - /mnt/data/transmission/downloads:/downloads
    environment:
      - TZ="Europe/Vienna"
    restart: always
    ports:
      - 51413:51413

Help with post completion unrar script

So this might end up being more a a feature request/discussion

I've scoured the interwebz and figured out the best unrar script for post completion:

#!/bin/bash
find ${TR_TORRENT_DIR}/${TR_TORRENT_NAME} -name '*.rar' -execdir unrar e -o- {} \;

Works perfectly with a transmission-daemon on it's own.

I had 3 issues with this on docker:

  1. couldn't figure out the best way to add the script. so i ended up putting it in the config folder, but is still had perms issues so i chmod 777 and it worked. i would imagine there is a better way
  2. the version of find in the container is old(?) or custom(?), not too sure. but i do know that it s does NOT have the -execdir option, which i think might be necessary to keep the unpacked file in the correct dir. i tried using -exec option which i think leads to #3
  3. permission denied when extracting:
UNRAR 5.40 freeware      Copyright (c) 1993-2016 Alexander Roshal

Extracting from /downloads/complete/example_show/example_show.rar

Cannot create Example_show.mkv
Permission denied

linuxserver.io

Thanks, team linuxserver.io

Cannot change watch folder via settings.json


Expected Behavior

You should be able to change settings via the settings.json file, only modifying it after stopping the container.

Current Behavior

All modified settings are present EXCEPT watch-dir, it's value is back to default "/watch".

Steps to Reproduce

  1. Stop the container.
  2. Wait until it is stopped.
  3. Edit the config file via the folder that was mounted during container creation, ie: /$home/docker/transmission/config/settings.json
  4. Edit multiple values including watch-dir.
  5. Save.
  6. Start the container, wait till its started.
  7. Open webUI to check if its running.
  8. Open settings.json again to verify modifications persisted.

Environment

OS: Ubuntu 19.10
CPU architecture: x86_64
How docker service was installed:docker-compose.yml

Command used to create docker container)

  transmission:
    image: linuxserver/transmission
    container_name: transmission
    network_mode: service:vpn-proxy
    depends_on:
      - vpn-proxy
    restart: unless-stopped
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=Europe/Amsterdam
      - TRANSMISSION_WEB_HOME=/transmission-web-control/
      - USER=admin
      - PASS=removed
    volumes:
      - ${USERDIR}/docker/transmission/config:/config
      - ${USERDIR}/Media:/media

transmission creates unused directories in /downloads

linuxserver.io

Thanks, team linuxserver.io

Host OS:

Centos 7 - 3.10.0-862.9.1.el7.x86_64

Docker run command:

docker run -d --name transmission --network bridge1 \
--restart unless-stopped -v /docker-data/transmission:/config \
-v /common/downloads:/downloads -v /common/downloads/.torrents:/watch \
-v /etc/localtime:/etc/localtime:ro -e PGID=1015 -e PUID=1015 \
-p 9091:9091 -p 51413:51413 -p 51413:51413/udp \
linuxserver/transmission:latest

Related logs:

[fix-attrs.d] applying ownership & permissions fixes...,
[fix-attrs.d] done.,
[cont-init.d] executing container initialization scripts...,
[cont-init.d] 10-adduser: executing... ,
usermod: no changes,
-------------------------------------,
_ (),
| | ___ _ __,
| | / __| | | / \ ,
| | \__ \ | | | () |,
|_| |___/ |_| \__/,
Brought to you by linuxserver.io,
We gratefully accept donations at:,
https://www.linuxserver.io/donations/,
-------------------------------------,
GID/UID,
-------------------------------------,
User uid: 1015,
User gid: 1015,
-------------------------------------,
[cont-init.d] 10-adduser: exited 0.,
[cont-init.d] 20-config: executing... ,
[cont-init.d] 20-config: exited 0.,
[cont-init.d] done.,
[services.d] starting services,
[services.d] done.,
[2018-08-13 04:37:31.260] Transmission 2.94 (d8e60ee44f) started (session.c:740),
[2018-08-13 04:37:31.260] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:971),
[2018-08-13 04:37:31.260] RPC Server Adding address to whitelist: 192.168.20.* (rpc-server.c:971),
[2018-08-13 04:37:31.260] RPC Server Adding address to whitelist: 172.20.0.* (rpc-server.c:971),
[2018-08-13 04:37:31.260] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213),
[2018-08-13 04:37:31.260] RPC Server Whitelist enabled (rpc-server.c:1217),
[2018-08-13 04:37:31.260] UDP Failed to set receive buffer: requested 4194304, got 425984 (tr-udp.c:84),
[2018-08-13 04:37:31.260] UDP Please add the line "net.core.rmem_max = 4194304" to /etc/sysctl.conf (tr-udp.c:89),
[2018-08-13 04:37:31.260] UDP Failed to set send buffer: requested 1048576, got 425984 (tr-udp.c:95),
[2018-08-13 04:37:31.260] UDP Please add the line "net.core.wmem_max = 1048576" to /etc/sysctl.conf (tr-udp.c:100),
[2018-08-13 04:37:31.260] DHT Reusing old id (tr-dht.c:307),
[2018-08-13 04:37:31.260] DHT Bootstrapping from 58 IPv4 nodes (tr-dht.c:156),
[2018-08-13 04:37:31.260] Using settings from "/config" (daemon.c:528),
[2018-08-13 04:37:31.260] Saved "/config/settings.json" (variant.c:1266),
[2018-08-13 04:37:31.260] Watching "/watch" for new .torrent files (daemon.c:573),
[2018-08-13 04:37:31.260] Blocklist "blocklist.bin" contains 411416 entries (blocklist.c:100),
[2018-08-13 04:37:31.260] Loaded 1 torrents (session.c:2034),
[2018-08-13 04:37:31.260] Port Forwarding (NAT-PMP) initnatpmp succeeded (0) (natpmp.c:70),
[2018-08-13 04:37:31.260] Port Forwarding (NAT-PMP) sendpublicaddressrequest succeeded (2) (natpmp.c:70),
[2018-08-13 04:37:39.258] Port Forwarding State changed from "Not forwarded" to "Starting" (port-forwarding.c:92),
[2018-08-13 04:37:39.258] Port Forwarding State changed from "Starting" to "???" (port-forwarding.c:92),
[2018-08-13 04:37:39.258] Changed open file limit from 1048576 to 1024 (fdlimit.c:380),

Symlinks: no symlinks used on the bind mount.

Issue: This container creates unused directories in /downloads if you don't use default download/incomplete locations provided in settings.json.

If I shutdown the container, then remove the unused directories from the persistent data stored on the host, when I start the container back up, it recreates the directories (/downloads/complete & /downloads/incomplete). Even though it is specified in the /config/settings.json to use /downloads/done and /downloads/in_progress. (attached is a copy of my settings.json - settings.txt)

This isn't a huge problem, I just like to keep my filesystem free of unused files/directories. I could always change my directories to use the defaults provided by this container but that would required rewriting scripts that I have running on other machines that also access this same network share.

Include Avahi for easy discovery

It would be nice to have Avahi running in the container, so it can be accessed locally using a domain in .local.

Even better would be to have a redirect from port 80 (maybe with a uhttpd server) so we don't have to remember that transmission runs on port 9091.

Expected Behavior

Being able to access Transmission with http://transmission.local:9091 (or even better http://transmission.local)

Current Behavior

I have to access Transmission with http://192.168.1.42:9091

I could try a PR but is it something you would likely accept?

Theme disable login prompt?

I'm using linuxserver/docker-transmission on my host OS Ubuntu 18.04 and I can't turn on rpc login somehow even try to turn off container first and edit config file later.

Port always closed

linuxserver.io

Host OS: Windows 10
Virtualbox in Bridge mode
Ubuntu 18.04 server

docker-compose code:

  transmission:
    image: "linuxserver/transmission"
    container_name: "transmission"
    ports:
      - "55650:9091"
      - "55651:51413"
      - "55651:51413/udp"
    volumes:
      - ${DOCKERDIR}/transmission:/config
      - ${DOCKERDIR}/shared:/shared
      - ${WATCHDIR}:/watch
      - ${DOWNLOADSDIR}:/downloads
    environment:
      - TZ= ${TZ}
      - PUID=${PUID}
      - PGID=${PGID}

This is the log file from the last restart

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 10-adduser: executing... 
-------------------------------------
          _         ()
         | |  ___   _    __
         | | / __| | |  /  \ 
         | | \__ \ | | | () |
         |_| |___/ |_|  \__/

Brought to you by linuxserver.io
We gratefully accept donations at:
https://www.linuxserver.io/donate/
-------------------------------------
GID/UID
-------------------------------------
User uid:    1000
User gid:    999
-------------------------------------

[cont-init.d] 10-adduser: exited 0.
[cont-init.d] 20-config: executing... 
usermod: no changes
[cont-init.d] 20-config: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
[2018-08-28 10:50:20.295] Transmission 2.94 (d8e60ee44f) started (session.c:740)
[2018-08-28 10:50:20.295] RPC Server Adding address to whitelist: 127.0.0.1 (rpc-server.c:971)
[2018-08-28 10:50:20.295] RPC Server Serving RPC and Web requests on port 127.0.0.1:9091/transmission/ (rpc-server.c:1213)
[2018-08-28 10:50:20.295] RPC Server Password required (rpc-server.c:1220)
[2018-08-28 10:50:20.295] Port Forwarding Stopped (port-forwarding.c:180)
[2018-08-28 10:50:20.295] DHT Reusing old id (tr-dht.c:307)
[2018-08-28 10:50:20.295] DHT Bootstrapping from 75 IPv4 nodes (tr-dht.c:156)
[2018-08-28 10:50:20.295] Using settings from "/config" (daemon.c:528)
[2018-08-28 10:50:20.295] Saved "/config/settings.json" (variant.c:1266)
[2018-08-28 10:50:20.295] transmission-daemon requiring authentication (daemon.c:554)
[2018-08-28 10:50:20.295] Watching "/watch" for new .torrent files (daemon.c:573)
[2018-08-28 10:50:20.295] Blocklist "blocklist.bin" contains 411571 entries (blocklist.c:100)
[2018-08-28 10:50:20.295] Loaded 10 torrents (session.c:2034)
[2018-08-28 10:50:20.295] Changed open file limit from 4096 to 1024 (fdlimit.c:380)

I have opened port 55651 in my router (both TCP and UDP).
screen shot 2018-08-28 at 12 57 31

In settings.json I have the port 51413, and I can see that port in the settings window inside Transmission Web GUI, but it says "Port is closed".

What else do I need to do?

I also opened both ports (55651 and 51413 just in case) in Windows Defender Firewall.

ulimit -- limitation on number of files open

linuxserver.io

If you are new to Docker or this application our issue tracker is ONLY used for reporting bugs or requesting features. Please use our discord server for general support.


Expected Behavior

I should be able to accept a lot of seeds and downloads without hitting /etc/limits.conf limits.

Current Behavior

Participating in a large torrent, like archlinux ISO, causes system to essentially shutdown due to resource starvation

Steps to Reproduce

  1. Download an archlinux ISO.

Environment

OS: Linux
CPU architecture: x86_64
How docker service was installed:
Synology

Command used to create docker container (run/create/compose/screenshot)

image

Docker logs

[2020-03-21 01:19:18.624] Couldn't create socket: No file descriptors available (fdlimit.c:523)
[2020-03-21 01:19:18.624] Couldn't create socket: No file descriptors available (fdlimit.c:523)
[2020-03-21 01:19:18.624] Couldn't create socket: No file descriptors available (fdlimit.c:523)
[2020-03-21 01:19:18.625] Couldn't create socket: No file descriptors available (fdlimit.c:523)
[2020-03-21 01:19:18.625] Couldn't create socket: No file descriptors available (fdlimit.c:523)
[2020-03-21 01:19:19.625] Couldn't create socket: No file descriptors available (fdlimit.c:523)
[2020-03-21 01:19:19.625] Couldn't create socket: No file descriptors available (fdlimit.c:523)
[2020-03-21 01:19:19.625] Couldn't read "/transmission-web-control//tr-web-control/style/images/checking.png": No file descriptors available (utils.c:258)
[2020-03-21 01:19:19.625] Couldn't create socket: No file descriptors available (fdlimit.c:523)

cron update error

linuxserver.io

HOST OS: QNAP 4.2.x Container Station v1.6

The container keeps saying

LOG
crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1 crond[210]: wakeup dt=60 crond[210]: file root: crond[210]: line run-parts /etc/periodic/15min crond[210]: line run-parts /etc/periodic/hourly crond[210]: line run-parts /etc/periodic/daily crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1 crond[210]: wakeup dt=60 crond[210]: file root: crond[210]: line run-parts /etc/periodic/15min crond[210]: line run-parts /etc/periodic/hourly crond[210]: line run-parts /etc/periodic/daily crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1 crond[210]: wakeup dt=60 crond[210]: file root: crond[210]: line run-parts /etc/periodic/15min crond[210]: line run-parts /etc/periodic/hourly crond[210]: line run-parts /etc/periodic/daily crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1 crond[210]: wakeup dt=60 crond[210]: file root: crond[210]: line run-parts /etc/periodic/15min crond[210]: line run-parts /etc/periodic/hourly crond[210]: line run-parts /etc/periodic/daily crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1 crond[210]: wakeup dt=60 crond[210]: file root: crond[210]: line run-parts /etc/periodic/15min crond[210]: line run-parts /etc/periodic/hourly crond[210]: line run-parts /etc/periodic/daily crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1 crond[210]: wakeup dt=60 crond[210]: file root: crond[210]: line run-parts /etc/periodic/15min crond[210]: job: 0 run-parts /etc/periodic/15min crond[210]: line run-parts /etc/periodic/hourly crond[210]: line run-parts /etc/periodic/daily crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1 crond[386]: child running /bin/sh crond[210]: USER root pid 386 cmd run-parts /etc/periodic/15min crond[210]: wakeup dt=10 crond[210]: wakeup dt=50 crond[210]: file root: crond[210]: line run-parts /etc/periodic/15min crond[210]: line run-parts /etc/periodic/hourly crond[210]: line run-parts /etc/periodic/daily crond[210]: line run-parts /etc/periodic/weekly crond[210]: line run-parts /etc/periodic/monthly crond[210]: line /config/blocklist-update.sh 2>&1

it never did before the container always worked on my qnap until I had to reinstall it yesterday because of a container station re installation

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.