Compare commits

...

210 Commits

Author SHA1 Message Date
LinuxServer-CI
5fc2eea996 Bot Updating Package Versions 2025-12-02 10:43:49 +00:00
LinuxServer-CI
e7d48fe356 Bot Updating Package Versions 2025-11-25 10:46:59 +00:00
LinuxServer-CI
86af821a03 Bot Updating Templated Files 2025-11-25 10:44:25 +00:00
LinuxServer-CI
7016a0e4e7 Bot Updating Package Versions 2025-11-18 10:43:28 +00:00
LinuxServer-CI
e9d194ef36 Bot Updating Package Versions 2025-11-11 10:43:22 +00:00
LinuxServer-CI
7a30592fca Bot Updating Package Versions 2025-11-04 10:43:53 +00:00
LinuxServer-CI
58b6478c2c Bot Updating Templated Files 2025-10-28 10:40:46 +00:00
LinuxServer-CI
9887cdcbe0 Bot Updating Package Versions 2025-10-21 10:41:38 +00:00
LinuxServer-CI
ad862d8406 Bot Updating Templated Files 2025-10-21 10:38:56 +00:00
LinuxServer-CI
950b8b98c9 Bot Updating Package Versions 2025-10-14 10:39:30 +00:00
LinuxServer-CI
09e0ed6728 Bot Updating Package Versions 2025-10-07 10:37:46 +00:00
LinuxServer-CI
9013f1b551 Bot Updating Package Versions 2025-09-30 10:39:33 +00:00
LinuxServer-CI
df00bc1995 Bot Updating Package Versions 2025-09-23 10:38:39 +00:00
LinuxServer-CI
ddeea3fc6a Bot Updating Package Versions 2025-09-16 10:37:44 +00:00
LinuxServer-CI
787fa45993 Bot Updating Package Versions 2025-09-09 10:40:02 +00:00
LinuxServer-CI
89c38bcff0 Bot Updating Package Versions 2025-08-26 10:42:20 +00:00
LinuxServer-CI
7f8d6b2122 Bot Updating Package Versions 2025-08-19 10:41:23 +00:00
LinuxServer-CI
ba5848adb1 Bot Updating Package Versions 2025-08-12 10:44:07 +00:00
LinuxServer-CI
6b3500a710 Bot Updating Package Versions 2025-08-05 10:46:36 +00:00
LinuxServer-CI
a4f703ce23 Bot Updating Package Versions 2025-07-29 10:46:04 +00:00
LinuxServer-CI
8426201f56 Bot Updating Package Versions 2025-07-22 10:45:33 +00:00
LinuxServer-CI
556f938946 Bot Updating Package Versions 2025-07-15 10:44:55 +00:00
LinuxServer-CI
5396b05953 Bot Updating Package Versions 2025-07-08 10:47:16 +00:00
LinuxServer-CI
2121759d85 Bot Updating Templated Files 2025-07-08 10:44:34 +00:00
LinuxServer-CI
9d7f5b8fc2 Bot Updating Templated Files 2025-07-08 10:42:45 +00:00
LinuxServer-CI
b13ea92136 Bot Updating Package Versions 2025-07-01 10:43:55 +00:00
LinuxServer-CI
26611c9803 Bot Updating Package Versions 2025-06-24 10:44:16 +00:00
Adam
2fbe193446 Merge pull request #307 from stavros-k/patch-1 2025-06-20 14:40:32 +01:00
LinuxServer-CI
2b0e4243fc Bot Updating Package Versions 2025-06-17 10:43:17 +00:00
LinuxServer-CI
d9d11b3d3f Bot Updating Package Versions 2025-06-10 10:45:34 +00:00
LinuxServer-CI
c5c77adaf7 Bot Updating Templated Files 2025-06-10 10:42:41 +00:00
LinuxServer-CI
0c3b360ff1 Bot Updating Package Versions 2025-06-03 10:43:43 +00:00
LinuxServer-CI
a68085138b Bot Updating Package Versions 2025-05-27 10:43:02 +00:00
LinuxServer-CI
b18d88a011 Bot Updating Package Versions 2025-05-20 10:44:56 +00:00
LinuxServer-CI
2424de4ae2 Bot Updating Templated Files 2025-05-20 10:42:08 +00:00
LinuxServer-CI
ce44e98db1 Bot Updating Package Versions 2025-05-13 10:43:02 +00:00
LinuxServer-CI
0b493643b5 Bot Updating Package Versions 2025-05-06 10:42:39 +00:00
LinuxServer-CI
54f6391848 Bot Updating Package Versions 2025-04-29 10:43:11 +00:00
Stavros Kois
52fc6098ff account for changed port 2025-04-24 19:30:13 +03:00
LinuxServer-CI
2c2f302bb7 Bot Updating Package Versions 2025-04-22 10:40:12 +00:00
LinuxServer-CI
06402dac36 Bot Updating Package Versions 2025-04-15 10:42:46 +00:00
LinuxServer-CI
376ada4699 Bot Updating Package Versions 2025-04-10 21:19:08 +00:00
LinuxServer-CI
d406a62e8d Bot Updating Package Versions 2025-03-18 10:38:39 +00:00
LinuxServer-CI
89eefd98f1 Bot Updating Package Versions 2025-03-11 10:39:22 +00:00
LinuxServer-CI
a021304dd5 Bot Updating Package Versions 2025-03-04 10:39:34 +00:00
LinuxServer-CI
06cea3bf41 Bot Updating Package Versions 2025-02-25 10:37:38 +00:00
LinuxServer-CI
0c3ef76e9a Bot Updating Package Versions 2025-02-17 10:21:27 +00:00
LinuxServer-CI
870b650316 Bot Updating Package Versions 2025-02-11 10:42:41 +00:00
LinuxServer-CI
b09379a882 Bot Updating Templated Files 2025-02-11 10:39:03 +00:00
LinuxServer-CI
66316f1a0f Bot Updating Package Versions 2025-02-04 10:35:29 +00:00
LinuxServer-CI
8aea6f6d67 Bot Updating Package Versions 2025-01-29 15:23:04 +00:00
LinuxServer-CI
c1f7c7da44 Bot Updating Templated Files 2025-01-29 15:20:13 +00:00
LinuxServer-CI
f2f110774b Bot Updating Templated Files 2025-01-29 15:18:34 +00:00
quietsy
f6e29f5352 Merge pull request #302 from linuxserver/add-project-categories
Add categories to readme-vars.yml
2025-01-23 09:39:37 +02:00
quietsy
858c3aff7e Add categories to readme-vars.yml 2025-01-22 22:51:53 +02:00
LinuxServer-CI
25a7630ee5 Bot Updating Package Versions 2025-01-21 10:36:06 +00:00
Adam
fb101e5b40 Merge pull request #300 from linuxserver/nonroot 2025-01-14 10:39:23 +00:00
LinuxServer-CI
a8ab7adc6d Bot Updating Package Versions 2025-01-14 10:35:24 +00:00
thespad
a21d375281 Support nonroot and RO operation 2025-01-12 22:00:05 +00:00
LinuxServer-CI
e465f05167 Bot Updating Package Versions 2025-01-07 10:37:56 +00:00
LinuxServer-CI
d5950b26e3 Bot Updating Package Versions 2024-12-31 10:35:40 +00:00
LinuxServer-CI
79c867a1ed Bot Updating Package Versions 2024-12-25 19:19:19 +00:00
LinuxServer-CI
fdfef16f33 Bot Updating Package Versions 2024-12-17 10:46:35 +00:00
LinuxServer-CI
904d4dc3bb Bot Updating Templated Files 2024-12-17 10:41:36 +00:00
LinuxServer-CI
bf24b381a6 Bot Updating Templated Files 2024-12-17 10:40:03 +00:00
LinuxServer-CI
c7b64ddea3 Bot Updating Package Versions 2024-12-10 10:46:36 +00:00
LinuxServer-CI
e8ddb2f801 Bot Updating Templated Files 2024-12-10 10:41:17 +00:00
LinuxServer-CI
c39362988a Bot Updating Templated Files 2024-12-03 10:44:45 +00:00
LinuxServer-CI
565a03f117 Bot Updating Templated Files 2024-12-03 10:43:25 +00:00
LinuxServer-CI
cdab98e14d Bot Updating Templated Files 2024-12-03 10:41:56 +00:00
aptalca
32172fa838 Merge pull request #297 from linuxserver/peerport
Fix PEERPORT setting
2024-11-29 16:48:08 -05:00
aptalca
e40526e7da Fix PEERPORT setting 2024-11-29 16:07:03 -05:00
LinuxServer-CI
399cf97321 Bot Updating Package Versions 2024-11-26 10:41:31 +00:00
LinuxServer-CI
d2e8a1000a Bot Updating Package Versions 2024-11-22 16:27:29 +00:00
Eric Nemchik
42e8761c94 Merge pull request #294 from linuxserver/refactor-init
feat: refactor init and replace sed with jq
2024-11-22 10:25:07 -06:00
LinuxServer-CI
8d55ed33f3 Bot Updating Package Versions 2024-11-19 10:40:33 +00:00
Eric Nemchik
4ca680899e feat: refactor init and replace sed with jq
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2024-11-13 18:37:46 -06:00
Eric Nemchik
68c47d2e57 Merge pull request #293 from uhop/master
Forced `umask` to be a string.
2024-11-13 18:17:49 -06:00
Eugene Lazutkin
50c356ba66 Forced umask to be a string. 2024-11-13 15:44:35 -06:00
driz
409c4e29b4 Merge pull request #288 from uhop/master
Added the missing UMASK section.
2024-11-13 07:52:11 -05:00
LinuxServer-CI
7016756163 Bot Updating Package Versions 2024-11-12 10:39:38 +00:00
LinuxServer-CI
d0c0ae7618 Bot Updating Templated Files 2024-11-12 10:37:07 +00:00
LinuxServer-CI
aac8cfb790 Bot Updating Templated Files 2024-11-12 10:35:45 +00:00
LinuxServer-CI
ad901f73c6 Bot Updating Package Versions 2024-11-05 10:38:51 +00:00
LinuxServer-CI
d8c01632d1 Bot Updating Package Versions 2024-10-29 10:38:23 +00:00
LinuxServer-CI
10d5f56917 Bot Updating Package Versions 2024-10-22 10:36:03 +00:00
LinuxServer-CI
2178304e18 Bot Updating Package Versions 2024-10-15 10:39:23 +00:00
LinuxServer-CI
ae38e8f243 Bot Updating Package Versions 2024-10-08 10:37:49 +00:00
LinuxServer-CI
277c3212ff Bot Updating Package Versions 2024-10-01 10:44:02 +00:00
LinuxServer-CI
396b3964c6 Bot Updating Templated Files 2024-10-01 10:42:11 +00:00
LinuxServer-CI
0a5b09c781 Bot Updating Templated Files 2024-10-01 10:40:24 +00:00
LinuxServer-CI
1d5b57712b Bot Updating Templated Files 2024-10-01 10:39:10 +00:00
LinuxServer-CI
655e8c79ac Bot Updating Package Versions 2024-09-24 10:38:28 +00:00
LinuxServer-CI
4b77b1cec4 Bot Updating Package Versions 2024-09-17 10:35:52 +00:00
LinuxServer-CI
b33616a846 Bot Updating Package Versions 2024-09-10 10:36:48 +00:00
LinuxServer-CI
474d935853 Bot Updating Package Versions 2024-09-03 10:35:19 +00:00
LinuxServer-CI
59b4095cf2 Bot Updating Package Versions 2024-08-27 10:35:17 +00:00
Eugene Lazutkin
20cf81ec2e Added the missing UMASK section.
See https://github.com/linuxserver/docker-transmission/issues/272
2024-08-20 11:34:39 -05:00
LinuxServer-CI
a63cd602e6 Bot Updating Package Versions 2024-08-20 10:38:44 +00:00
LinuxServer-CI
eb794378a8 Bot Updating Templated Files 2024-08-20 10:36:03 +00:00
LinuxServer-CI
f342e8f85e Bot Updating Templated Files 2024-08-20 10:34:01 +00:00
LinuxServer-CI
d7a929c643 Bot Updating Package Versions 2024-08-13 10:36:10 +00:00
LinuxServer-CI
66588bb0c7 Bot Updating Package Versions 2024-08-09 12:21:04 +00:00
LinuxServer-CI
80ed2aebb0 Bot Updating Package Versions 2024-08-09 10:17:32 +00:00
LinuxServer-CI
a1a8556f28 Bot Updating Package Versions 2024-08-06 10:36:19 +00:00
LinuxServer-CI
6367901db7 Bot Updating Package Versions 2024-07-30 10:35:45 +00:00
LinuxServer-CI
2aaa5fb095 Bot Updating Package Versions 2024-07-23 10:36:38 +00:00
LinuxServer-CI
3856459b15 Bot Updating Package Versions 2024-07-16 10:33:54 +00:00
LinuxServer-CI
361d87862f Bot Updating Templated Files 2024-07-16 10:31:45 +00:00
LinuxServer-CI
208f36ac8f Bot Updating Templated Files 2024-07-16 10:29:43 +00:00
LinuxServer-CI
9a66877360 Bot Updating Package Versions 2024-07-09 10:33:26 +00:00
LinuxServer-CI
5930ba888c Bot Updating Package Versions 2024-07-02 10:34:24 +00:00
Adam
f379f9aebc Merge pull request #281 from linuxserver/print-version
Print version on init
2024-06-25 19:26:00 +01:00
LinuxServer-CI
0af7946af1 Bot Updating Package Versions 2024-06-25 10:33:40 +00:00
thespad
78bcde2706 Print version on init 2024-06-24 20:42:22 +01:00
LinuxServer-CI
015b1ddfc0 Bot Updating Package Versions 2024-06-15 06:21:51 +00:00
LinuxServer-CI
b78e6966a3 Bot Updating Package Versions 2024-06-13 21:16:40 +00:00
LinuxServer-CI
10277f6ab8 Bot Updating Package Versions 2024-06-11 10:36:11 +00:00
LinuxServer-CI
a4cfb9ba00 Bot Updating Package Versions 2024-05-28 10:34:52 +00:00
LinuxServer-CI
b5a49c95b9 Bot Updating Package Versions 2024-05-21 10:53:15 +00:00
LinuxServer-CI
3e3513ee1f Bot Updating Templated Files 2024-05-21 10:50:47 +00:00
LinuxServer-CI
d076799e74 Bot Updating Templated Files 2024-05-21 10:49:09 +00:00
LinuxServer-CI
de4f2e06d9 Bot Updating Templated Files 2024-05-21 10:32:00 +00:00
LinuxServer-CI
c41139d8b0 Bot Updating Package Versions 2024-05-14 21:14:46 +00:00
LinuxServer-CI
13d281cddd Bot Updating Package Versions 2024-05-14 10:36:01 +00:00
LinuxServer-CI
897c15f760 Bot Updating Templated Files 2024-05-14 10:33:40 +00:00
LinuxServer-CI
49165bf633 Bot Updating Package Versions 2024-05-07 10:37:37 +00:00
LinuxServer-CI
69f85214d5 Bot Updating Templated Files 2024-05-07 10:33:27 +00:00
LinuxServer-CI
e931494071 Bot Updating Package Versions 2024-04-30 10:32:10 +00:00
LinuxServer-CI
841d52fc86 Bot Updating Package Versions 2024-04-23 10:32:29 +00:00
LinuxServer-CI
cb5c9b8111 Bot Updating Package Versions 2024-04-16 12:26:46 +00:00
LinuxServer-CI
be30a606d9 Bot Updating Package Versions 2024-04-16 10:31:08 +00:00
LinuxServer-CI
776bb25bf7 Bot Updating Package Versions 2024-04-09 10:35:55 +00:00
LinuxServer-CI
7f98ad2352 Bot Updating Package Versions 2024-03-29 20:04:16 +00:00
LinuxServer-CI
e5108b6b9a Bot Updating Package Versions 2024-03-26 10:33:45 +00:00
LinuxServer-CI
9d746b7a58 Bot Updating Package Versions 2024-03-19 10:32:43 +00:00
LinuxServer-CI
7f0a11f194 Bot Updating Templated Files 2024-03-19 10:30:15 +00:00
LinuxServer-CI
361c224810 Bot Updating Package Versions 2024-03-12 10:34:27 +00:00
LinuxServer-CI
2b98bc1130 Bot Updating Package Versions 2024-03-05 10:33:07 +00:00
LinuxServer-CI
f29dd4a2d2 Bot Updating Templated Files 2024-02-27 10:33:49 +00:00
LinuxServer-CI
0891066012 Bot Updating Templated Files 2024-02-27 10:31:15 +00:00
LinuxServer-CI
1d9d237ac6 Bot Updating Package Versions 2024-02-20 10:33:40 +00:00
LinuxServer-CI
96b4f67778 Bot Updating Package Versions 2024-02-13 10:32:31 +00:00
LinuxServer-CI
33d58cc41f Bot Updating Package Versions 2024-02-06 10:32:39 +00:00
LinuxServer-CI
651d26fd9e Bot Updating Package Versions 2024-01-30 10:32:37 +00:00
LinuxServer-CI
ad00ae6b25 Bot Updating Package Versions 2024-01-23 10:34:17 +00:00
LinuxServer-CI
1d8e6ded34 Bot Updating Package Versions 2024-01-16 10:39:01 +00:00
LinuxServer-CI
c94de7d060 Bot Updating Templated Files 2024-01-16 10:36:37 +00:00
LinuxServer-CI
fab1d0578a Bot Updating Templated Files 2024-01-16 10:33:31 +00:00
LinuxServer-CI
1dde688650 Bot Updating Package Versions 2024-01-09 10:33:33 +00:00
LinuxServer-CI
43569603c8 Bot Updating Package Versions 2024-01-02 10:32:21 +00:00
LinuxServer-CI
548d62e5fe Bot Updating Package Versions 2023-12-26 10:33:32 +00:00
LinuxServer-CI
0d5a224ccc Bot Updating Package Versions 2023-12-19 10:34:16 +00:00
LinuxServer-CI
9d3b2caa2f Bot Updating Package Versions 2023-12-12 10:34:31 +00:00
LinuxServer-CI
928cb57631 Bot Updating Package Versions 2023-12-08 18:19:47 +00:00
LinuxServer-CI
6bfae65164 Bot Updating Package Versions 2023-12-05 10:35:07 +00:00
LinuxServer-CI
17bfb9a85b Bot Updating Package Versions 2023-11-28 10:34:38 +00:00
LinuxServer-CI
8441fac1cd Bot Updating Package Versions 2023-11-21 10:42:32 +00:00
LinuxServer-CI
97ac2d0759 Bot Updating Templated Files 2023-11-21 10:39:08 +00:00
LinuxServer-CI
24b82ae1bb Bot Updating Package Versions 2023-11-12 17:52:48 +00:00
Eric Nemchik
108f4677b0 Merge pull request #254 from linuxserver/standard-cron
standard cron
2023-11-12 11:49:49 -06:00
LinuxServer-CI
94238ec4b1 Bot Updating Package Versions 2023-11-07 10:32:20 +00:00
LinuxServer-CI
8c094ee356 Bot Updating Package Versions 2023-10-31 10:35:18 +00:00
LinuxServer-CI
1f4eec76d5 Bot Updating Package Versions 2023-10-24 10:33:54 +00:00
LinuxServer-CI
b62dd78598 Bot Updating Package Versions 2023-10-17 10:34:16 +00:00
LinuxServer-CI
4f62144bdb Bot Updating Package Versions 2023-10-10 10:33:05 +00:00
LinuxServer-CI
d4f8db4f1f Bot Updating Package Versions 2023-10-08 02:37:57 +00:00
LinuxServer-CI
86e448c624 Bot Updating Templated Files 2023-10-08 02:34:44 +00:00
LinuxServer-CI
8549393003 Bot Updating Templated Files 2023-10-08 02:33:20 +00:00
Roxedus
920e7de968 Merge pull request #259 from linuxserver/unrar 2023-10-08 04:30:53 +02:00
aptalca
c52be375b3 remove obsolete arg 2023-10-07 20:52:37 -04:00
aptalca
c755500a5a install unrar from lsio repo 2023-10-07 20:51:56 -04:00
LinuxServer-CI
882a787357 Bot Updating Package Versions 2023-10-03 10:34:04 +00:00
LinuxServer-CI
ed573643f1 Bot Updating Package Versions 2023-09-26 10:32:48 +00:00
LinuxServer-CI
d2ba673849 Bot Updating Package Versions 2023-09-19 10:34:13 +00:00
LinuxServer-CI
c854898c22 Bot Updating Package Versions 2023-09-12 10:32:23 +00:00
LinuxServer-CI
965c79c3e8 Bot Updating Package Versions 2023-09-05 10:31:42 +00:00
LinuxServer-CI
1ac66ddc8c Bot Updating Package Versions 2023-08-30 06:19:00 +00:00
LinuxServer-CI
b9c5cec111 Bot Updating Package Versions 2023-08-29 10:31:52 +00:00
Eric Nemchik
e20c68e5f6 Move crontabs to etc
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-08-19 10:17:49 -05:00
Eric Nemchik
540a30a245 cron in base
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-08-18 23:21:50 -05:00
Eric Nemchik
4b6dcf748c cron in base
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-08-18 23:07:49 -05:00
LinuxServer-CI
3a1ad52e23 Bot Updating Package Versions 2023-08-15 10:31:39 +00:00
LinuxServer-CI
302cb6137a Bot Updating Templated Files 2023-08-10 21:05:32 +00:00
Adam
11d2e3b61a Merge pull request #255 from linuxserver/master-unrar 2023-08-10 22:03:19 +01:00
TheSpad
0ff8ff04d5 Bump unrar to 6.2.10 2023-08-10 17:54:17 +01:00
LinuxServer-CI
38859997aa Bot Updating Package Versions 2023-08-08 10:32:44 +00:00
LinuxServer-CI
3cb761689c Bot Updating Package Versions 2023-07-31 20:15:32 +00:00
LinuxServer-CI
bae31afddb Bot Updating Package Versions 2023-07-31 18:19:34 +00:00
Eric Nemchik
bed6a80004 Fix perms
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-07-30 09:50:28 -05:00
Eric Nemchik
c73d76e4c6 standard cron
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-07-30 01:18:19 -05:00
LinuxServer-CI
4fbe981509 Bot Updating Package Versions 2023-07-30 01:10:49 +00:00
LinuxServer-CI
bb807f43d5 Bot Updating Package Versions 2023-07-25 10:33:53 +00:00
LinuxServer-CI
8b00f02b3b Bot Updating Package Versions 2023-07-18 10:34:56 +00:00
LinuxServer-CI
a23c29e5d8 Bot Updating Package Versions 2023-07-11 10:37:16 +00:00
LinuxServer-CI
e68202edfb Bot Updating Package Versions 2023-07-04 10:40:41 +00:00
LinuxServer-CI
0eb180ec99 Bot Updating Templated Files 2023-07-04 10:36:31 +00:00
LinuxServer-CI
d24cfa8d46 Bot Updating Package Versions 2023-06-27 10:35:27 +00:00
LinuxServer-CI
01d76f7ec4 Bot Updating Package Versions 2023-06-20 10:32:02 +00:00
LinuxServer-CI
444a192db3 Bot Updating Package Versions 2023-06-16 22:10:06 +00:00
Adam
df164befd6 Merge pull request #251 from linuxserver/extras 2023-06-16 23:06:23 +01:00
LinuxServer-CI
f6d8d0fb14 Bot Updating Package Versions 2023-06-13 10:31:24 +00:00
TheSpad
0927fd018f Bump unrar to 6.8.2, add transmission-extra 2023-06-10 21:00:43 +01:00
TheSpad
ac9057e0d6 Allow custom ports for readiness check 2023-06-10 21:00:27 +01:00
LinuxServer-CI
eadd9e0ece Bot Updating Package Versions 2023-06-06 10:30:41 +00:00
Eric Nemchik
121ec74e4b Merge pull request #247 from linuxserver/3.18
Rebase to Alpine 3.18, deprecate armhf
2023-05-30 11:08:20 -05:00
LinuxServer-CI
4c0d2c7257 Bot Updating Package Versions 2023-05-30 10:31:50 +00:00
Eric Nemchik
c2f66d318b Rebase to Alpine 3.18, deprecate armhf 2023-05-29 11:06:16 -05:00
LinuxServer-CI
e1225f7bdb Bot Updating Package Versions 2023-05-23 10:33:32 +00:00
LinuxServer-CI
cddbf7886d Bot Updating Templated Files 2023-05-23 10:30:14 +00:00
35 changed files with 1153 additions and 881 deletions

View File

@@ -6,7 +6,7 @@
* Read, and fill the Pull Request template
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn)
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord)
## Common files
@@ -105,10 +105,10 @@ docker build \
-t linuxserver/transmission:latest .
```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.

View File

@@ -1,7 +1,7 @@
blank_issues_enabled: false
contact_links:
- name: Discord chat support
url: https://discord.gg/YWrKVTn
url: https://linuxserver.io/discord
about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum

View File

@@ -53,7 +53,6 @@ body:
options:
- x86-64
- arm64
- armhf
validations:
required: true
- type: textarea
@@ -68,10 +67,10 @@ body:
- type: textarea
attributes:
description: |
Provide a full docker log, output of "docker logs linuxserver.io"
Provide a full docker log, output of "docker logs transmission"
label: Container logs
placeholder: |
Output of `docker logs linuxserver.io`
Output of `docker logs transmission`
render: bash
validations:
required: true

View File

@@ -8,6 +8,9 @@ on:
pull_request_review:
types: [submitted,edited,dismissed]
permissions:
contents: read
jobs:
manage-project:
permissions:

View File

@@ -4,6 +4,9 @@ on:
- cron: '5 19 * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
stale:
permissions:

View File

@@ -3,27 +3,43 @@ name: External Trigger Main
on:
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-master:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/checkout@v4.1.1
- name: External Trigger
if: github.ref == 'refs/heads/master'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_TRANSMISSION_MASTER }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_TRANSMISSION_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_TRANSMISSION_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
printf "# External trigger for docker-transmission\n\n" >> $GITHUB_STEP_SUMMARY
if grep -q "^transmission_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`transmission_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^transmission_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`transmission_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_TRANSMISSION_MASTER\". ****"
echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_TRANSMISSION_MASTER\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****"
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> External trigger running off of master branch. To disable this trigger, add \`transmission_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
&& awk '/^P:'"transmission-daemon"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://')
echo "Type is \`alpine_repo\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^transmission_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "**** Can't retrieve external version, exiting ****"
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve external version for transmission branch master"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-transmission/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
@@ -31,25 +47,43 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****"
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY
echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
image="linuxserver/transmission"
tag="latest"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Ftransmission%3Apull" \
| jq -r '.token')
multidigest=$(curl -s \
multidigest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.index.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}")
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# If there's a layer element it's a single-arch manifest so just get that digest
digest=$(jq -r '.config.digest' <<< "${multidigest}")
else
# Otherwise it's multi-arch or has manifest annotations
if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# Check for manifest annotations and delete if found
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
fi
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
# If there's still more than one digest, it's multi-arch
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
else
# Otherwise it's single arch
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
fi
if digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}" \
| jq -r 'first(.manifests[].digest)')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
| jq -r '.config.digest')
"https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
digest=$(jq -r '.config.digest' <<< "${digest}");
fi
fi
image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}")
@@ -61,53 +95,61 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then
echo "**** Can't retrieve last pushed version, exiting ****"
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve last pushed version for transmission tag latest"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****"
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0
elif [[ $(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/aarch64/APKINDEX.tar.gz" | tar -xz -C /tmp && awk '/^P:'"transmission-daemon"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://') != "${EXT_RELEASE}" ]] || [[ $(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/armv7/APKINDEX.tar.gz" | tar -xz -C /tmp && awk '/^P:'"transmission-daemon"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://') != "${EXT_RELEASE}" ]]; then
echo "**** New version ${EXT_RELEASE} found; but not all arch repos updated yet; exiting ****"
echo "New version ${EXT_RELEASE} found; but not all arch repos updated yet; exiting" >> $GITHUB_STEP_SUMMARY
elif [[ $(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/aarch64/APKINDEX.tar.gz" | tar -xz -C /tmp && awk '/^P:'"transmission-daemon"'$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://') != "${EXT_RELEASE}" ]]; then
echo "New version \`${EXT_RELEASE}\` found; but not all arch repos updated yet; exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for transmission tag latest is detected, however not all arch repos are updated yet. Will try again later."
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-transmission/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
echo "New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0
else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-transmission/job/master/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for transmission tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
if [[ "${artifacts_found}" == "false" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="New version ${EXT_RELEASE} for transmission tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
else
printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
if [[ "${artifacts_found}" == "true" ]]; then
echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
fi
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-transmission/job/master/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for transmission tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
fi

View File

@@ -5,41 +5,44 @@ on:
- cron: '1 * * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/checkout@v4.1.1
with:
fetch-depth: '0'
- name: External Trigger Scheduler
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
printf "# External trigger scheduler for docker-transmission\n\n" >> $GITHUB_STEP_SUMMARY
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
if [[ "${br}" == "HEAD" ]]; then
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-transmission/${br}/jenkins-vars.yml)
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****"
echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-transmission/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****."
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-transmission/actions/workflows/external_trigger.yml/dispatches
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi
else
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi
done

View File

@@ -2,8 +2,14 @@ name: Greetings
on: [pull_request_target, issues]
permissions:
contents: read
jobs:
greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1

View File

@@ -1,42 +0,0 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-master:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- name: Package Trigger
if: github.ref == 'refs/heads/master'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_TRANSMISSION_MASTER }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_TRANSMISSION_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_TRANSMISSION_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-transmission/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****"
echo "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** Package trigger running off of master branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_TRANSMISSION_MASTER\". ****"
echo "Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_TRANSMISSION_MASTER\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-transmission/job/master/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"

View File

@@ -5,46 +5,99 @@ on:
- cron: '15 10 * * 2'
workflow_dispatch:
permissions:
contents: read
jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/checkout@v4.1.1
with:
fetch-depth: '0'
- name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
printf "# Package trigger scheduler for docker-transmission\n\n" >> $GITHUB_STEP_SUMMARY
printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-transmission/${br}/jenkins-vars.yml | yq -r '.ls_branch')
if [ "${br}" == "${ls_branch}" ]; then
echo "**** Branch ${br} appears to be live; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-transmission/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****"
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-transmission/actions/workflows/package_trigger.yml/dispatches
sleep 30
if [[ "${br}" == "HEAD" ]]; then
printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-transmission/${br}/jenkins-vars.yml)
if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-transmission/${br}/Jenkinsfile >/dev/null 2>&1; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-transmission/${br}/readme-vars.yml)
if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif grep -q "^transmission_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`transmission_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-transmission/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
printf "> To disable, add \`transmission_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-transmission/job/${br}/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
if [[ -z "${response}" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Jenkins build could not be triggered. Skipping branch."
continue
fi
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
if ! curl -ifX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Unable to change the Jenkins job description."
fi
sleep 20
fi
else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi
done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) Triggered for transmission** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-transmission/activity/"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
if [[ -n "${triggered_branches}" ]]; then
NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-transmission/activity/ \n"
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) for transmission** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi

View File

@@ -5,6 +5,8 @@ on:
- '**/run'
- '**/finish'
- '**/check'
- 'root/migrations/*'
jobs:
permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1

View File

@@ -1,8 +1,9 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/unrar:latest AS unrar
FROM ghcr.io/linuxserver/baseimage-alpine:edge
ARG UNRAR_VERSION=6.1.7
ARG BUILD_DATE
ARG VERSION
ARG TRANSMISSION_VERSION
@@ -11,43 +12,37 @@ LABEL maintainer="aptalca"
RUN \
echo "**** install build packages ****" && \
apk add --no-cache --upgrade --virtual=build-dependencies \
apk add --no-cache --virtual=build-dependencies \
build-base && \
echo "**** install packages ****" && \
apk add --no-cache --upgrade \
apk add --no-cache \
findutils \
p7zip \
python3 && \
echo "**** install unrar from source ****" && \
mkdir /tmp/unrar && \
curl -o \
/tmp/unrar.tar.gz -L \
"https://www.rarlab.com/rar/unrarsrc-${UNRAR_VERSION}.tar.gz" && \
tar xf \
/tmp/unrar.tar.gz -C \
/tmp/unrar --strip-components=1 && \
cd /tmp/unrar && \
make && \
install -v -m755 unrar /usr/local/bin && \
echo "**** install transmission ****" && \
if [ -z ${TRANSMISSION_VERSION+x} ]; then \
TRANSMISSION_VERSION=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
&& awk '/^P:transmission$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://'); \
fi && \
apk add --no-cache --upgrade \
apk add --no-cache \
transmission-cli==${TRANSMISSION_VERSION} \
transmission-daemon==${TRANSMISSION_VERSION} \
transmission-extra==${TRANSMISSION_VERSION} \
transmission-remote==${TRANSMISSION_VERSION} && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/*
/tmp/* \
$HOME/.cache
# copy local files
COPY root/ /
# add unrar
COPY --from=unrar /usr/bin/unrar-alpine /usr/bin/unrar
# ports and volumes
EXPOSE 9091 51413/tcp 51413/udp
VOLUME /config

View File

@@ -1,8 +1,9 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-edge
ARG UNRAR_VERSION=6.1.7
ARG BUILD_DATE
ARG VERSION
ARG TRANSMISSION_VERSION
@@ -11,43 +12,37 @@ LABEL maintainer="aptalca"
RUN \
echo "**** install build packages ****" && \
apk add --no-cache --upgrade --virtual=build-dependencies \
apk add --no-cache --virtual=build-dependencies \
build-base && \
echo "**** install packages ****" && \
apk add --no-cache --upgrade \
apk add --no-cache \
findutils \
p7zip \
python3 && \
echo "**** install unrar from source ****" && \
mkdir /tmp/unrar && \
curl -o \
/tmp/unrar.tar.gz -L \
"https://www.rarlab.com/rar/unrarsrc-${UNRAR_VERSION}.tar.gz" && \
tar xf \
/tmp/unrar.tar.gz -C \
/tmp/unrar --strip-components=1 && \
cd /tmp/unrar && \
make && \
install -v -m755 unrar /usr/local/bin && \
echo "**** install transmission ****" && \
if [ -z ${TRANSMISSION_VERSION+x} ]; then \
TRANSMISSION_VERSION=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
&& awk '/^P:transmission$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://'); \
fi && \
apk add --no-cache --upgrade \
apk add --no-cache \
transmission-cli==${TRANSMISSION_VERSION} \
transmission-daemon==${TRANSMISSION_VERSION} \
transmission-extra==${TRANSMISSION_VERSION} \
transmission-remote==${TRANSMISSION_VERSION} && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/*
/tmp/* \
$HOME/.cache
# copy local files
COPY root/ /
# add unrar
COPY --from=unrar /usr/bin/unrar-alpine /usr/bin/unrar
# ports and volumes
EXPOSE 9091 51413/tcp 51413/udp
VOLUME /config

View File

@@ -1,53 +0,0 @@
# syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-edge
ARG UNRAR_VERSION=6.1.7
ARG BUILD_DATE
ARG VERSION
ARG TRANSMISSION_VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="aptalca"
RUN \
echo "**** install build packages ****" && \
apk add --no-cache --upgrade --virtual=build-dependencies \
build-base && \
echo "**** install packages ****" && \
apk add --no-cache --upgrade \
findutils \
p7zip \
python3 && \
echo "**** install unrar from source ****" && \
mkdir /tmp/unrar && \
curl -o \
/tmp/unrar.tar.gz -L \
"https://www.rarlab.com/rar/unrarsrc-${UNRAR_VERSION}.tar.gz" && \
tar xf \
/tmp/unrar.tar.gz -C \
/tmp/unrar --strip-components=1 && \
cd /tmp/unrar && \
make && \
install -v -m755 unrar /usr/local/bin && \
echo "**** install transmission ****" && \
if [ -z ${TRANSMISSION_VERSION+x} ]; then \
TRANSMISSION_VERSION=$(curl -sL "http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz" | tar -xz -C /tmp \
&& awk '/^P:transmission$/,/V:/' /tmp/APKINDEX | sed -n 2p | sed 's/^V://'); \
fi && \
apk add --no-cache --upgrade \
transmission-cli==${TRANSMISSION_VERSION} \
transmission-daemon==${TRANSMISSION_VERSION} \
transmission-remote==${TRANSMISSION_VERSION} && \
echo "**** cleanup ****" && \
apk del --purge \
build-dependencies && \
rm -rf \
/root/.cache \
/tmp/*
# copy local files
COPY root/ /
# ports and volumes
EXPOSE 9091 51413/tcp 51413/udp
VOLUME /config

893
Jenkinsfile vendored

File diff suppressed because it is too large Load Diff

189
README.md
View File

@@ -1,12 +1,10 @@
<!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read the https://github.com/linuxserver/docker-transmission/blob/master/.github/CONTRIBUTING.md -->
<!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read https://github.com/linuxserver/docker-transmission/blob/master/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.")
[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.")
[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
[![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.")
[![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
@@ -21,15 +19,14 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum.
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
# [linuxserver/transmission](https://github.com/linuxserver/docker-transmission)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Ftransmission?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Ftransmission)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Ftransmission?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-transmission.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-transmission)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-transmission.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-transmission/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-transmission/packages)
@@ -46,7 +43,7 @@ Find us at:
## Supported Architectures
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/transmission:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
@@ -56,7 +53,6 @@ The architectures supported by this image are:
| :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ✅ | arm32v7-\<version tag\> |
## Application Setup
@@ -84,15 +80,25 @@ Use `HOST_WHITELIST` to enable an list of dns names as host-whitelist. This enab
Use `PEERPORT` to specify the port(s) Transmission should listen on. This disables random port selection. This should be the same as the port mapped in your docker configuration.
## Read-Only Operation
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
## Non-Root Operation
This image can be run with a non-root user. For details please [read the docs](https://docs.linuxserver.io/misc/non-root/).
## Usage
Here are some example snippets to help you get started creating a container.
To help you get started creating a container from this image you can either use docker-compose or the docker cli.
>[!NOTE]
>Unless a parameter is flaged as 'optional', it is *mandatory* and a value must be provided.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml
---
version: "2.1"
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
@@ -108,9 +114,9 @@ services:
- PEERPORT= #optional
- HOST_WHITELIST= #optional
volumes:
- /path/to/data:/config
- /path/to/downloads:/downloads
- /path/to/watch/folder:/watch
- /path/to/transmission/data:/config
- /path/to/downloads:/downloads #optional
- /path/to/watch/folder:/watch #optional
ports:
- 9091:9091
- 51413:51413
@@ -135,23 +141,22 @@ docker run -d \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-v /path/to/data:/config \
-v /path/to/downloads:/downloads \
-v /path/to/watch/folder:/watch \
-v /path/to/transmission/data:/config \
-v /path/to/downloads:/downloads `#optional` \
-v /path/to/watch/folder:/watch `#optional` \
--restart unless-stopped \
lscr.io/linuxserver/transmission:latest
```
## Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function |
| :----: | --- |
| `-p 9091` | WebUI |
| `-p 51413` | Torrent Port TCP |
| `-p 51413/udp` | Torrent Port UDP |
| `-p 9091:9091` | WebUI |
| `-p 51413:51413` | Torrent Port TCP |
| `-p 51413:51413/udp` | Torrent Port UDP |
| `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
@@ -164,6 +169,8 @@ Container images are configured using parameters passed at runtime (such as thos
| `-v /config` | Where transmission should store config files and logs. |
| `-v /downloads` | Local path for downloads. |
| `-v /watch` | Watch folder for torrent files. |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
| `--user=1000:1000` | Run container with a non-root user. Please [read the docs](https://docs.linuxserver.io/misc/non-root/). |
## Environment variables from files (Docker secrets)
@@ -172,10 +179,10 @@ You can set any environment variable from a file by using a special prepend `FIL
As an example:
```bash
-e FILE__PASSWORD=/run/secrets/mysecretpassword
-e FILE__MYVAR=/run/secrets/mysecretvariable
```
Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file.
Will set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file.
## Umask for running applications
@@ -184,15 +191,20 @@ Keep in mind umask is not chmod it subtracts from permissions based on it's valu
## User / Group Identifiers
When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
When using volumes (`-v` flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below:
```bash
$ id username
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
id your_user
```
Example output:
```text
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
```
## Docker Mods
@@ -203,53 +215,101 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
## Support Info
* Shell access whilst the container is running: `docker exec -it transmission /bin/bash`
* To monitor the logs of the container in realtime: `docker logs -f transmission`
* container version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' transmission`
* image version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/transmission:latest`
* Shell access whilst the container is running:
```bash
docker exec -it transmission /bin/bash
```
* To monitor the logs of the container in realtime:
```bash
docker logs -f transmission
```
* Container version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' transmission
```
* Image version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/transmission:latest
```
## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers:
### Via Docker Compose
* Update all images: `docker-compose pull`
* or update a single image: `docker-compose pull transmission`
* Let compose update all containers as necessary: `docker-compose up -d`
* or update a single container: `docker-compose up -d transmission`
* You can also remove the old dangling images: `docker image prune`
* Update images:
* All images:
```bash
docker-compose pull
```
* Single image:
```bash
docker-compose pull transmission
```
* Update containers:
* All containers:
```bash
docker-compose up -d
```
* Single container:
```bash
docker-compose up -d transmission
```
* You can also remove the old dangling images:
```bash
docker image prune
```
### Via Docker Run
* Update the image: `docker pull lscr.io/linuxserver/transmission:latest`
* Stop the running container: `docker stop transmission`
* Delete the container: `docker rm transmission`
* Update the image:
```bash
docker pull lscr.io/linuxserver/transmission:latest
```
* Stop the running container:
```bash
docker stop transmission
```
* Delete the container:
```bash
docker rm transmission
```
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* You can also remove the old dangling images: `docker image prune`
* You can also remove the old dangling images:
### Via Watchtower auto-updater (only use if you don't remember the original parameters)
* Pull the latest image at its tag and replace it with the same env variables in one run:
```bash
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once transmission
```
* You can also remove the old dangling images: `docker image prune`
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
```bash
docker image prune
```
### Image Update Notifications - Diun (Docker Image Update Notifier)
* We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
>[!TIP]
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally
@@ -264,16 +324,21 @@ docker build \
-t lscr.io/linuxserver/transmission:latest .
```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions
* **29.11.24:** - Fix PEERPORT setting.
* **07.10.23:** - Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar).
* **10.08.23:** - Bump unrar to 6.2.10.
* **10.06.23:** - Bump unrar to 6.2.8, install transmission-extra.
* **25.05.23:** - Deprecate armhf.
* **14.05.23:** - Explicitly install transmission-remote.
* **02.03.23:** - Add cron init to allow user customizable crontabs.
* **08.02.23:** - Rebase to Alpine Edge to get access to most up to date builds of Transmission. Remove bundled 3rd party UI packages.

View File

@@ -24,6 +24,6 @@ repo_vars:
- CI_PORT='9091'
- CI_SSL='false'
- CI_DELAY='120'
- CI_DOCKERENV='TZ=US/Pacific'
- CI_AUTH='user:password'
- CI_DOCKERENV=''
- CI_AUTH=''
- CI_WEBPATH=''

View File

@@ -1,68 +1,74 @@
NAME VERSION TYPE
7zip 22.01-r5 apk
alpine-baselayout 3.4.3-r1 apk
alpine-baselayout-data 3.4.3-r1 apk
alpine-keys 2.4-r1 apk
apk-tools 2.14.0-r5 apk
bash 5.2.15-r3 apk
brotli-libs 1.0.9-r15 apk
busybox 1.36.0 binary
busybox 1.36.0-r11 apk
busybox-binsh 1.36.0-r11 apk
ca-certificates 20230506-r0 apk
ca-certificates-bundle 20230506-r0 apk
coreutils 9.3-r1 apk
curl 8.0.1-r3 apk
findutils 4.9.0-r5 apk
gdbm 1.23-r1 apk
jq 1.6-r3 apk
libacl 2.3.1-r4 apk
libattr 2.5.1-r5 apk
libbsd 0.11.7-r2 apk
libbz2 1.0.8-r6 apk
libc-utils 0.7.2-r5 apk
libcrypto3 3.1.0-r5 apk
libcurl 8.0.1-r3 apk
libdeflate 1.18-r1 apk
libevent 2.1.12-r7 apk
libexpat 2.5.0-r2 apk
libffi 3.4.4-r3 apk
libgcc 13.1.1_git20230513-r1 apk
libidn2 2.3.4-r2 apk
libintl 0.21.1-r6 apk
libmd 1.0.4-r2 apk
libncursesw 6.4_p20230514-r0 apk
libpanelw 6.4_p20230514-r0 apk
libproc2 4.0.3-r2 apk
libpsl 0.21.2-r1 apk
libssl3 3.1.0-r5 apk
libstdc++ 13.1.1_git20230513-r1 apk
libunistring 1.1-r2 apk
linux-pam 1.5.3-r1 apk
miniupnpc 2.2.4-r0 apk
mpdecimal 2.5.1-r2 apk
musl 1.2.4-r0 apk
musl-utils 1.2.4-r0 apk
ncurses-terminfo-base 6.4_p20230514-r0 apk
netcat-openbsd 1.219-r1 apk
nghttp2-libs 1.53.0-r1 apk
oniguruma 6.9.8-r1 apk
procps-ng 4.0.3-r2 apk
pyc 0.1-r0 apk
python 3.11.3 binary
python3 3.11.3-r11 apk
python3-pyc 3.11.3-r11 apk
python3-pycache-pyc0 3.11.3-r11 apk
readline 8.2.1-r2 apk
scanelf 1.3.7-r1 apk
shadow 4.13-r2 apk
skalibs 2.13.1.1-r2 apk
sqlite-libs 3.41.2-r3 apk
ssl_client 1.36.0-r11 apk
transmission-cli 4.0.3-r2 apk
transmission-daemon 4.0.3-r2 apk
transmission-remote 4.0.3-r2 apk
tzdata 2023c-r1 apk
utmps-libs 0.1.2.1-r2 apk
xz-libs 5.4.3-r1 apk
zlib 1.2.13-r2 apk
NAME VERSION TYPE
7zip 25.01-r0 apk
acl-libs 2.3.2-r1 apk
alpine-baselayout 3.7.1-r8 apk
alpine-baselayout-data 3.7.1-r8 apk
alpine-keys 2.6-r0 apk
apk-tools 3.0.0_rc9-r1 apk
bash 5.3.3-r1 apk
brotli-libs 1.1.0-r2 apk
busybox 1.37.0-r29 apk
busybox-binsh 1.37.0-r29 apk
c-ares 1.34.5-r0 apk
ca-certificates 20251003-r0 apk
ca-certificates-bundle 20251003-r0 apk
catatonit 0.2.1-r0 apk
coreutils 9.8-r1 apk
coreutils-env 9.8-r1 apk
coreutils-fmt 9.8-r1 apk
coreutils-sha512sum 9.8-r1 apk
curl 8.17.0-r1 apk
findutils 4.10.0-r0 apk
gdbm 1.26-r0 apk
jq 1.8.1-r0 apk
libapk 3.0.0_rc9-r1 apk
libattr 2.5.2-r2 apk
libbsd 0.12.2-r0 apk
libbz2 1.0.8-r6 apk
libcrypto3 3.5.4-r0 apk
libcurl 8.17.0-r1 apk
libdeflate 1.25-r0 apk
libevent 2.1.12-r8 apk
libexpat 2.7.3-r0 apk
libffi 3.5.2-r0 apk
libgcc 15.2.0-r2 apk
libidn2 2.3.8-r0 apk
libintl 0.24.1-r1 apk
libmd 1.1.0-r0 apk
libncursesw 6.5_p20251123-r0 apk
libpanelw 6.5_p20251123-r0 apk
libproc2 4.0.5-r0 apk
libpsl 0.21.5-r3 apk
libssl3 3.5.4-r0 apk
libstdc++ 15.2.0-r2 apk
libunistring 1.4.1-r0 apk
linux-pam 1.7.1-r1 apk
miniupnpc 2.3.2-r0 apk
mpdecimal 4.0.1-r0 apk
musl 1.2.5-r21 apk
musl-utils 1.2.5-r21 apk
ncurses-terminfo-base 6.5_p20251123-r0 apk
netcat-openbsd 1.234.1-r0 apk
nghttp2-libs 1.68.0-r0 apk
nghttp3 1.13.1-r0 apk
oniguruma 6.9.10-r0 apk
procps-ng 4.0.5-r0 apk
pyc 3.12.12-r0 apk
python3 3.12.12-r0 apk
python3-pyc 3.12.12-r0 apk
python3-pycache-pyc0 3.12.12-r0 apk
readline 8.3.1-r0 apk
scanelf 1.3.8-r2 apk
shadow 4.18.0-r0 apk
skalibs-libs 2.14.4.0-r0 apk
sqlite-libs 3.51.1-r0 apk
ssl_client 1.37.0-r29 apk
transmission-cli 4.0.6-r4 apk
transmission-daemon 4.0.6-r4 apk
transmission-extra 4.0.6-r4 apk
transmission-remote 4.0.6-r4 apk
tzdata 2025b-r0 apk
utmps-libs 0.1.3.1-r0 apk
xz-libs 5.8.1-r0 apk
zlib 1.3.1-r2 apk
zstd-libs 1.5.7-r2 apk

View File

@@ -6,52 +6,37 @@ project_url: "https://www.transmissionbt.com/"
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/transmission.png"
project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, µTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more."
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_blurb_optional_extras_enabled: false
project_categories: "Downloaders"
# supported architectures
available_architectures:
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- { arch: "{{ arch_armhf }}", tag: "arm32v7-latest"}
# development version
development_versions: false
- {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- {arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
# container parameters
common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}"
param_usage_include_net: false
param_usage_include_env: true
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
param_usage_include_vols: true
param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/data", desc: "Where transmission should store config files and logs." }
- { vol_path: "/downloads", vol_host_path: "/path/to/downloads", desc: "Local path for downloads." }
- { vol_path: "/watch", vol_host_path: "/path/to/watch/folder", desc: "Watch folder for torrent files." }
- {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/data", desc: "Where transmission should store config files and logs."}
opt_param_usage_include_vols: true
opt_param_volumes:
- {vol_path: "/downloads", vol_host_path: "/path/to/downloads", desc: "Local path for downloads."}
- {vol_path: "/watch", vol_host_path: "/path/to/watch/folder", desc: "Watch folder for torrent files."}
param_usage_include_ports: true
param_ports:
- { external_port: "9091", internal_port: "9091", port_desc: "WebUI" }
- { external_port: "51413", internal_port: "51413", port_desc: "Torrent Port TCP" }
- { external_port: "51413", internal_port: "51413/udp", port_desc: "Torrent Port UDP" }
param_device_map: false
cap_add_param: false
- {external_port: "9091", internal_port: "9091", port_desc: "WebUI"}
- {external_port: "51413", internal_port: "51413", port_desc: "Torrent Port TCP"}
- {external_port: "51413", internal_port: "51413/udp", port_desc: "Torrent Port UDP"}
# optional container parameters
opt_param_usage_include_env: true
opt_param_env_vars:
- { env_var: "TRANSMISSION_WEB_HOME", env_value: "", desc: "Specify the path to an alternative UI folder." }
- { env_var: "USER", env_value: "", desc: "Specify an optional username for the interface" }
- { env_var: "PASS", env_value: "", desc: "Specify an optional password for the interface" }
- { env_var: "WHITELIST", env_value: "", desc: "Specify an optional list of comma separated ip whitelist. Fills rpc-whitelist setting."}
- { env_var: "PEERPORT", env_value: "", desc: "Specify an optional port for torrent TCP/UDP connections. Fills peer-port setting."}
- { env_var: "HOST_WHITELIST", env_value: "", desc: "Specify an optional list of comma separated dns name whitelist. Fills rpc-host-whitelist setting."}
opt_param_usage_include_vols: false
opt_param_usage_include_ports: false
opt_param_device_map: false
opt_cap_add_param: false
optional_block_1: false
- {env_var: "TRANSMISSION_WEB_HOME", env_value: "", desc: "Specify the path to an alternative UI folder."}
- {env_var: "USER", env_value: "", desc: "Specify an optional username for the interface"}
- {env_var: "PASS", env_value: "", desc: "Specify an optional password for the interface"}
- {env_var: "WHITELIST", env_value: "", desc: "Specify an optional list of comma separated ip whitelist. Fills rpc-whitelist setting."}
- {env_var: "PEERPORT", env_value: "", desc: "Specify an optional port for torrent TCP/UDP connections. Fills peer-port setting."}
- {env_var: "HOST_WHITELIST", env_value: "", desc: "Specify an optional list of comma separated dns name whitelist. Fills rpc-host-whitelist setting."}
readonly_supported: true
nonroot_supported: true
# application setup block
app_setup_block_enabled: true
app_setup_block: |
@@ -74,52 +59,97 @@ app_setup_block: |
Use `WHITELIST` to enable a list of ip as whitelist. This enable support for `rpc-whitelist`. When `WHITELIST` is empty support for whitelist is disabled.
Use `HOST_WHITELIST` to enable an list of dns names as host-whitelist. This enable support for `rpc-host-whitelist`. When `HOST_WHITELIST` is empty support for host-whitelist is disabled.
## Use alternative Transmission torrent ports
Use `PEERPORT` to specify the port(s) Transmission should listen on. This disables random port selection. This should be the same as the port mapped in your docker configuration.
## Use alternative Transmission torrent ports
Use `PEERPORT` to specify the port(s) Transmission should listen on. This disables random port selection. This should be the same as the port mapped in your docker configuration.
# init diagram
init_diagram: |
"transmission:latest": {
docker-mods
base {
fix-attr +\nlegacy cont-init
}
docker-mods -> base
legacy-services
custom services
init-services -> legacy-services
init-services -> custom services
custom services -> legacy-services
legacy-services -> ci-service-check
init-migrations -> init-adduser
init-os-end -> init-config
init-config -> init-config-end
init-crontab-config -> init-config-end
init-transmission-config -> init-config-end
init-config -> init-crontab-config
init-mods-end -> init-custom-files
init-adduser -> init-device-perms
base -> init-envfile
base -> init-migrations
init-config-end -> init-mods
init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install
init-adduser -> init-os-end
init-device-perms -> init-os-end
init-envfile -> init-os-end
init-custom-files -> init-services
init-config -> init-transmission-config
init-services -> svc-cron
svc-cron -> legacy-services
init-services -> svc-transmission
svc-transmission -> legacy-services
}
Base Images: {
"baseimage-alpine:edge"
}
"transmission:latest" <- Base Images
# changelog
changelogs:
- { date: "14.05.23:", desc: "Explicitly install transmission-remote." }
- { date: "02.03.23:", desc: "Add cron init to allow user customizable crontabs." }
- { date: "08.02.23:", desc: "Rebase to Alpine Edge to get access to most up to date builds of Transmission. Remove bundled 3rd party UI packages." }
- { date: "05.01.23:", desc: "Rebase to Alpine 3.17, restore GNU findutils package." }
- { date: "02.11.22:", desc: "Rebase to Alpine 3.16, migrate to s6v3." }
- { date: "12.08.22:", desc: "Bump unrar to 6.1.7." }
- { date: "03.04.22:", desc: "Add Transmissionic as a UI option." }
- { date: "21.02.22:", desc: "Build unrar from source, rebase to Alpine 3.15, add symlinks neeeded for TWC. Credit @alexbelgium" }
- { date: "09.07.21:", desc: "Wait for the transmission-daemon termination after a caught sigterm." }
- { date: "06.03.21:", desc: "Add Flood for Transmission as a UI option." }
- { date: "23.01.21:", desc: "Rebasing to alpine 3.13." }
- { date: "02.11.20:", desc: "Add ca-certificates package to allow connecting to https trackers." }
- { date: "02.06.20:", desc: "Rebase to alpine 3.12, update to transmission 3.0, remove python2, add python3." }
- { date: "11.05.20:", desc: "Remove unnecessary chmod (remnant of previous change)." }
- { date: "28.04.20:", desc: "Use transmission-remote to update blocklist." }
- { date: "30.03.20:", desc: "Internalize blocklist-update.sh." }
- { date: "29.03.20:", desc: "Update auth info in readme." }
- { date: "19.12.19:", desc: "Rebasing to alpine 3.11." }
- { date: "04.10.19:", desc: "Update package label." }
- { date: "21.08.19:", desc: "Add optional user/pass environment variables, fix transmission shut down if user/pass are set." }
- { date: "19.07.19:", desc: "Send SIGTERM in blocklist update to properly close pid." }
- { date: "28.06.19:", desc: "Rebasing to alpine 3.10." }
- { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." }
- { date: "22.02.19:", desc: "Rebase to Alpine 3.9, add themes to baseimage, add python and findutils." }
- { date: "22.02.19:", desc: "Catch term and clean exit." }
- { date: "07.02.19:", desc: "Add pipeline logic and multi arch." }
- { date: "15.08.18:", desc: "Rebase to alpine linux 3.8." }
- { date: "12.02.18:", desc: "Pull transmission from edge repo." }
- { date: "10.01.18:", desc: "Rebase to alpine linux 3.7." }
- { date: "25.07.17:", desc: "Add rsync package." }
- { date: "27.05.17:", desc: "Rebase to alpine linux 3.6." }
- { date: "06.02.17:", desc: "Rebase to alpine linux 3.5." }
- { date: "15.01.17:", desc: "Add p7zip, tar, unrar, and unzip packages." }
- { date: "16.10.16:", desc: "Blocklist autoupdate with optional authentication." }
- { date: "14.10.16:", desc: "Add version layer informationE." }
- { date: "23.09.16:", desc: "Add information about securing the webui to README." }
- { date: "21.09.16:", desc: "Add curl package." }
- { date: "09.09.16:", desc: "Add layer badges to README." }
- { date: "28.08.16:", desc: "Add badges to README." }
- { date: "09.08.16:", desc: "Rebase to alpine linux." }
- { date: "06.12.15:", desc: "Separate mapping for watch folder." }
- { date: "16.11.15:", desc: "Initial Release." }
- {date: "29.11.24:", desc: "Fix PEERPORT setting."}
- {date: "07.10.23:", desc: "Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar)."}
- {date: "10.08.23:", desc: "Bump unrar to 6.2.10."}
- {date: "10.06.23:", desc: "Bump unrar to 6.2.8, install transmission-extra."}
- {date: "25.05.23:", desc: "Deprecate armhf."}
- {date: "14.05.23:", desc: "Explicitly install transmission-remote."}
- {date: "02.03.23:", desc: "Add cron init to allow user customizable crontabs."}
- {date: "08.02.23:", desc: "Rebase to Alpine Edge to get access to most up to date builds of Transmission. Remove bundled 3rd party UI packages."}
- {date: "05.01.23:", desc: "Rebase to Alpine 3.17, restore GNU findutils package."}
- {date: "02.11.22:", desc: "Rebase to Alpine 3.16, migrate to s6v3."}
- {date: "12.08.22:", desc: "Bump unrar to 6.1.7."}
- {date: "03.04.22:", desc: "Add Transmissionic as a UI option."}
- {date: "21.02.22:", desc: "Build unrar from source, rebase to Alpine 3.15, add symlinks neeeded for TWC. Credit @alexbelgium"}
- {date: "09.07.21:", desc: "Wait for the transmission-daemon termination after a caught sigterm."}
- {date: "06.03.21:", desc: "Add Flood for Transmission as a UI option."}
- {date: "23.01.21:", desc: "Rebasing to alpine 3.13."}
- {date: "02.11.20:", desc: "Add ca-certificates package to allow connecting to https trackers."}
- {date: "02.06.20:", desc: "Rebase to alpine 3.12, update to transmission 3.0, remove python2, add python3."}
- {date: "11.05.20:", desc: "Remove unnecessary chmod (remnant of previous change)."}
- {date: "28.04.20:", desc: "Use transmission-remote to update blocklist."}
- {date: "30.03.20:", desc: "Internalize blocklist-update.sh."}
- {date: "29.03.20:", desc: "Update auth info in readme."}
- {date: "19.12.19:", desc: "Rebasing to alpine 3.11."}
- {date: "04.10.19:", desc: "Update package label."}
- {date: "21.08.19:", desc: "Add optional user/pass environment variables, fix transmission shut down if user/pass are set."}
- {date: "19.07.19:", desc: "Send SIGTERM in blocklist update to properly close pid."}
- {date: "28.06.19:", desc: "Rebasing to alpine 3.10."}
- {date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag."}
- {date: "22.02.19:", desc: "Rebase to Alpine 3.9, add themes to baseimage, add python and findutils."}
- {date: "22.02.19:", desc: "Catch term and clean exit."}
- {date: "07.02.19:", desc: "Add pipeline logic and multi arch."}
- {date: "15.08.18:", desc: "Rebase to alpine linux 3.8."}
- {date: "12.02.18:", desc: "Pull transmission from edge repo."}
- {date: "10.01.18:", desc: "Rebase to alpine linux 3.7."}
- {date: "25.07.17:", desc: "Add rsync package."}
- {date: "27.05.17:", desc: "Rebase to alpine linux 3.6."}
- {date: "06.02.17:", desc: "Rebase to alpine linux 3.5."}
- {date: "15.01.17:", desc: "Add p7zip, tar, unrar, and unzip packages."}
- {date: "16.10.16:", desc: "Blocklist autoupdate with optional authentication."}
- {date: "14.10.16:", desc: "Add version layer informationE."}
- {date: "23.09.16:", desc: "Add information about securing the webui to README."}
- {date: "21.09.16:", desc: "Add curl package."}
- {date: "09.09.16:", desc: "Add layer badges to README."}
- {date: "28.08.16:", desc: "Add badges to README."}
- {date: "09.08.16:", desc: "Rebase to alpine linux."}
- {date: "06.12.15:", desc: "Separate mapping for watch folder."}
- {date: "16.11.15:", desc: "Initial Release."}

View File

@@ -2,11 +2,12 @@
# shellcheck shell=bash
BLOCKLIST_ENABLED=$(jq -r '.["blocklist-enabled"]' /config/settings.json)
PORT=$(jq '.["rpc-port"]' /config/settings.json)
if [[ "$BLOCKLIST_ENABLED" == true ]]; then
if [[ -n "$USER" ]] && [[ -n "$PASS" ]]; then
/usr/bin/transmission-remote -n "$USER":"$PASS" --blocklist-update
/usr/bin/transmission-remote 127.0.0.1:${PORT:-9091} -n "$USER":"$PASS" --blocklist-update
else
/usr/bin/transmission-remote --blocklist-update
/usr/bin/transmission-remote 127.0.0.1:${PORT:-9091} --blocklist-update
fi
fi

2
root/etc/crontabs/abc Normal file
View File

@@ -0,0 +1,2 @@
# min hour day month weekday command
0 3 * * * /app/blocklist-update.sh 2>&1

View File

@@ -1,10 +0,0 @@
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
# run daily blocklist update
0 3 * * * /app/blocklist-update.sh 2>&1

View File

@@ -1,22 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# make folders
mkdir -p \
/config/crontabs
## root
# if crontabs do not exist in config
if [[ ! -f /config/crontabs/root ]]; then
# copy crontab from system
if crontab -l -u root; then
crontab -l -u root >/config/crontabs/root
fi
# if crontabs still do not exist in config (were not copied from system)
# copy crontab from included defaults (using -n, do not overwrite an existing file)
cp -n /etc/crontabs/root /config/crontabs/
fi
# set permissions and import user crontabs
lsiown root:root /config/crontabs/root
crontab -u root /config/crontabs/root

View File

@@ -1 +0,0 @@
oneshot

View File

@@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-crontabs-config/run

View File

@@ -1,66 +1,69 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# make folders
mkdir -p \
/downloads/{complete,incomplete} /watch
# copy config
# copy config
if [[ ! -f /config/settings.json ]]; then
cp /defaults/settings.json /config/settings.json
fi
if [[ -n "$USER" ]] && [[ -n "$PASS" ]]; then
sed -i '/rpc-authentication-required/c\ "rpc-authentication-required": true,' /config/settings.json
sed -i "/rpc-username/c\ \"rpc-username\": \"$USER\"," /config/settings.json
sed -i "/rpc-password/c\ \"rpc-password\": \"$PASS\"," /config/settings.json
if [[ -n "${USER}" ]] && [[ -n "${PASS}" ]]; then
echo -E "$(jq -r '.["rpc-authentication-required"] = true' /config/settings.json)" >/config/settings.json
echo -E "$(jq -r --arg user "${USER}" '.["rpc-username"] = $user' /config/settings.json)" >/config/settings.json
echo -E "$(jq -r --arg pass "${PASS}" '.["rpc-password"] = $pass' /config/settings.json)" >/config/settings.json
else
sed -i '/rpc-authentication-required/c\ "rpc-authentication-required": false,' /config/settings.json
sed -i "/rpc-username/c\ \"rpc-username\": \"$USER\"," /config/settings.json
sed -i "/rpc-password/c\ \"rpc-password\": \"$PASS\"," /config/settings.json
echo -E "$(jq -r '.["rpc-authentication-required"] = false' /config/settings.json)" >/config/settings.json
fi
if [[ -n "$WHITELIST" ]]; then
sed -i '/rpc-whitelist-enabled/c\ "rpc-whitelist-enabled": true,' /config/settings.json
sed -i "/\"rpc-whitelist\"/c\ \"rpc-whitelist\": \"$WHITELIST\"," /config/settings.json
if [[ -n "${WHITELIST}" ]]; then
echo -E "$(jq -r '.["rpc-whitelist-enabled"] = true' /config/settings.json)" >/config/settings.json
echo -E "$(jq -r --arg whitelist "${WHITELIST}" '.["rpc-whitelist"] = $whitelist' /config/settings.json)" >/config/settings.json
else
sed -i '/rpc-whitelist-enabled/c\ "rpc-whitelist-enabled": false,' /config/settings.json
sed -i "/\"rpc-whitelist\"/c\ \"rpc-whitelist\": \"$WHITELIST\"," /config/settings.json
echo -E "$(jq -r '.["rpc-whitelist-enabled"] = false' /config/settings.json)" >/config/settings.json
fi
if [[ -n "$HOST_WHITELIST" ]]; then
sed -i '/rpc-host-whitelist-enabled/c\ "rpc-host-whitelist-enabled": true,' /config/settings.json
sed -i "/\"rpc-host-whitelist\"/c\ \"rpc-host-whitelist\": \"$HOST_WHITELIST\"," /config/settings.json
if [[ -n "${HOST_WHITELIST}" ]]; then
echo -E "$(jq -r '.["rpc-host-whitelist-enabled"] = true' /config/settings.json)" >/config/settings.json
echo -E "$(jq -r --arg host_whitelist "${HOST_WHITELIST}" '.["rpc-host-whitelist"] = $host_whitelist' /config/settings.json)" >/config/settings.json
else
sed -i '/rpc-host-whitelist-enabled/c\ "rpc-host-whitelist-enabled": false,' /config/settings.json
sed -i "/\"rpc-host-whitelist\"/c\ \"rpc-host-whitelist\": \"$HOST_WHITELIST\"," /config/settings.json
echo -E "$(jq -r '.["rpc-host-whitelist-enabled"] = false' /config/settings.json)" >/config/settings.json
fi
if [[ -n "${PEERPORT}" ]]; then
sed -i "/\"peer-port\"/c\ \"peer-port\": ${PEERPORT}," /config/settings.json
sed -i '/peer-port-random-on-start/c\ "peer-port-random-on-start": false,' /config/settings.json
echo -E "$(jq -r --argjson peerport "${PEERPORT}" '.["peer-port"] = $peerport' /config/settings.json)" >/config/settings.json
echo -E "$(jq -r '.["peer-port-random-on-start"] = false' /config/settings.json)" >/config/settings.json
fi
# Handle old theme locations
mkdir -p {/transmissionic,/combustion-release,/flood-for-transmission,/kettu,/transmission-web-control}
echo /transmissionic /combustion-release /flood-for-transmission /kettu /transmission-web-control | xargs -n1 ln -s /defaults/index.html
# permissions
lsiown abc:abc \
/config/settings.json
if [[ "$(stat -c '%U' /downloads)" != "abc" ]]; then
lsiown abc:abc /downloads
if [[ -n "${UMASK}" ]]; then
echo -E "$(jq -r --arg umask "${UMASK}" '.["umask"] = $umask' /config/settings.json)" >/config/settings.json
fi
if [[ "$(stat -c '%U' /downloads/complete)" != "abc" ]]; then
lsiown abc:abc /downloads/complete
if [[ -z ${LSIO_NON_ROOT_USER} ]] && [[ -z ${LSIO_READ_ONLY_FS} ]]; then
# Handle old theme locations
mkdir -p {/transmissionic,/combustion-release,/flood-for-transmission,/kettu,/transmission-web-control}
echo /transmissionic /combustion-release /flood-for-transmission /kettu /transmission-web-control | xargs -n1 ln -s /defaults/index.html
fi
if [[ "$(stat -c '%U' /downloads/incomplete)" != "abc" ]]; then
lsiown abc:abc /downloads/incomplete
fi
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
lsiown -R abc:abc \
/config
if [[ "$(stat -c '%U' /watch)" != "abc" ]]; then
lsiown abc:abc /watch
if grep -qe ' /downloads ' /proc/mounts; then
if [[ "$(stat -c '%U' /downloads)" != "abc" ]]; then
lsiown abc:abc /downloads
fi
if [[ "$(stat -c '%U' /downloads/complete)" != "abc" ]]; then
lsiown abc:abc /downloads/complete
fi
if [[ "$(stat -c '%U' /downloads/incomplete)" != "abc" ]]; then
lsiown abc:abc /downloads/incomplete
fi
fi
if grep -qe ' /watch ' /proc/mounts; then
if [[ "$(stat -c '%U' /watch)" != "abc" ]]; then
lsiown abc:abc /watch
fi
fi
fi

View File

@@ -1,4 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
exec /usr/sbin/crond -f -S -l 5

View File

@@ -1 +0,0 @@
longrun

View File

@@ -2,11 +2,12 @@
# shellcheck shell=bash
pid=$(pidof transmission-daemon)
PORT=$(jq '.["rpc-port"]' /config/settings.json)
if [[ -n "$USER" ]] && [[ -n "$PASS" ]]; then
/usr/bin/transmission-remote -n "$USER":"$PASS" --exit
/usr/bin/transmission-remote 127.0.0.1:${PORT:-9091} -n "$USER":"$PASS" --exit
else
/usr/bin/transmission-remote --exit
/usr/bin/transmission-remote 127.0.0.1:${PORT:-9091} --exit
fi
tail --pid=${pid} -f /dev/null

View File

@@ -1,6 +1,14 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 9091" \
s6-setuidgid abc /usr/bin/transmission-daemon \
-g /config -f
PORT=$(jq '.["rpc-port"]' /config/settings.json)
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost ${PORT:-9091}" \
s6-setuidgid abc /usr/bin/transmission-daemon \
-g /config -f
else
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost ${PORT:-9091}" \
/usr/bin/transmission-daemon \
-g /config -f
fi