Compare commits

..

198 commits

Author SHA1 Message Date
fej
492da39dea Update .forgejo/workflows/build.yml
All checks were successful
Build and push image / build (push) Successful in 41s
2026-05-09 10:34:17 +02:00
forgejo-runner
252e2b2b5c Merge remote-tracking branch 'upstream/master'
Some checks failed
Build and push image / build (push) Failing after 7s
2026-05-09 08:33:17 +00:00
BuildTools
2d16c92cb3 fix pipeline
Some checks failed
Build and push image / build (push) Has been cancelled
2026-05-09 10:30:50 +02:00
BuildTools
3faea15cf3 ci: add forgejo actions build workflow
Some checks failed
Build and push image / build (push) Failing after 21s
2026-05-09 10:03:33 +02:00
LinuxServer-CI
0a43190ac9
Bot Updating Package Versions 2026-05-04 11:10:31 +00:00
LinuxServer-CI
68fa685a3c
Bot Updating Package Versions 2026-04-27 11:10:30 +00:00
LinuxServer-CI
7378fb237d
Bot Updating Package Versions 2026-04-20 10:55:12 +00:00
LinuxServer-CI
1a7cf74b6e
Bot Updating Package Versions 2026-04-10 13:52:50 +00:00
LinuxServer-CI
e0048bb650
Bot Updating Package Versions 2026-04-08 15:46:39 +00:00
LinuxServer-CI
be4e12409d
Bot Updating Templated Files 2026-04-06 10:14:36 +00:00
BuildTools
302c6e5702 Merge remote-tracking branch 'upstream/master' 2026-04-05 17:00:27 +02:00
LinuxServer-CI
ecb66b1ca3
Bot Updating Package Versions 2026-03-30 10:23:10 +00:00
BuildTools
e3bbf927d8 Merge remote-tracking branch 'upstream/master' 2026-03-29 13:48:04 +02:00
LinuxServer-CI
ee772de585
Bot Updating Package Versions 2026-03-21 14:30:06 +00:00
Adam
468a4995e0
Merge pull request #448 from evan314159/readonly-tmpdir 2026-03-21 14:26:18 +00:00
Evan Champion
a56f4d3e85 Update readme-vars.yml 2026-03-17 06:34:26 +08:00
Evan Champion
094d2071e2 init-plex-chown/run: use TMPDIR instead of hardcoded /run/plex-temp
Changes init-plex-chown/run to use TMPDIR instead of hardcoded /run/plex-temp

Plex uses TMPDIR to store transcodes of music to WAV format for music
analysis (and maybe other things).

LS.io container sets TMPDIR=/run/plex-temp.  With read-only root this
means the /run tmpfs needs to have enough memory to store music analysis
transcodes.

LS.io container hardcoded /run/plex-temp in init so TMPDIR could not be
flexibly changed -- changed to use TMPDIR and clean on restart in case
of unclean shutdown.

Plex container is marked as supporting read-only root.
2026-03-16 06:05:53 +08:00
LinuxServer-CI
2186587d37
Bot Updating Templated Files 2026-03-15 21:47:12 +00:00
Adam
c1ab38b66e
Merge pull request #447 from evan314159/nonroot-init-plex-claim 2026-03-15 21:45:12 +00:00
BuildTools
8551fb88e9 Merge remote-tracking branch 'upstream/master' 2026-03-15 16:12:23 +01:00
Evan Champion
e64b2579d7 init-plex-claim/run: do not run s6-setuidgid on non-root containers
Fixes #422
2026-03-15 12:06:57 +08:00
LinuxServer-CI
cb3568d81a
Bot Updating Package Versions 2026-03-02 09:58:27 +00:00
LinuxServer-CI
4a4dc88e6c
Bot Updating Package Versions 2026-02-23 10:03:04 +00:00
BuildTools
9f0882a70e Merge remote-tracking branch 'upstream/master' 2026-02-22 11:05:46 +01:00
LinuxServer-CI
82cbb863bc
Bot Updating Package Versions 2026-02-11 16:23:50 +00:00
LinuxServer-CI
6374e18803
Bot Updating Templated Files 2026-02-11 16:20:09 +00:00
LinuxServer-CI
944fc560c6
Bot Updating Templated Files 2026-02-11 16:18:08 +00:00
LinuxServer-CI
c9ffa88637
Bot Updating Package Versions 2026-02-09 10:08:55 +00:00
BuildTools
d4262cc4e9 Merge remote-tracking branch 'upstream/master' 2026-02-07 11:57:53 +01:00
LinuxServer-CI
2d9cdff163
Bot Updating Package Versions 2026-01-28 20:54:07 +00:00
LinuxServer-CI
163c200dcb
Bot Updating Package Versions 2026-01-27 19:43:54 +00:00
LinuxServer-CI
77cca7947b
Bot Updating Package Versions 2026-01-19 09:41:26 +00:00
BuildTools
d63927007f Merge remote-tracking branch 'upstream/master' 2025-12-27 13:51:50 +01:00
LinuxServer-CI
8056a354f5
Bot Updating Package Versions 2025-12-22 09:35:14 +00:00
LinuxServer-CI
f32896aed4
Bot Updating Templated Files 2025-12-13 16:34:25 +00:00
aptalca
144b87d05b
Merge pull request #437 from linuxserver/dev-perms
use device perm fixer from baseimage
2025-12-13 11:32:46 -05:00
aptalca
64aed46150
use device perm fixer from baseimage 2025-12-09 12:58:58 -05:00
BuildTools
a1bac2c988 Merge remote-tracking branch 'upstream/master' 2025-12-08 16:37:58 +01:00
LinuxServer-CI
215506d3cd
Bot Updating Templated Files 2025-11-24 09:30:42 +00:00
LinuxServer-CI
7adf1b75ca
Bot Updating Package Versions 2025-11-10 09:30:19 +00:00
BuildTools
a5ad980f28 Merge remote-tracking branch 'upstream/master' 2025-11-08 10:19:16 +01:00
LinuxServer-CI
2e4d6ad903
Bot Updating Templated Files 2025-10-27 09:29:22 +00:00
BuildTools
806b88c37a Merge remote-tracking branch 'upstream/master' 2025-10-26 14:30:02 +01:00
LinuxServer-CI
dbc5f5c85b
Bot Updating Package Versions 2025-10-13 09:29:56 +00:00
LinuxServer-CI
c2b3335d4f
Bot Updating Package Versions 2025-10-06 09:29:43 +00:00
BuildTools
c0b54e8512 Merge remote-tracking branch 'upstream/master' 2025-10-04 15:16:38 +02:00
LinuxServer-CI
b36fa22efe
Bot Updating Package Versions 2025-09-29 09:29:13 +00:00
LinuxServer-CI
62d7a9ecfe
Bot Updating Package Versions 2025-09-22 18:45:02 +00:00
BuildTools
71640b3d41 Merge remote-tracking branch 'upstream/master' 2025-09-21 13:44:30 +02:00
LinuxServer-CI
65664b148a
Bot Updating Package Versions 2025-09-15 09:28:27 +00:00
BuildTools
3644491d23 Merge remote-tracking branch 'upstream/master' 2025-08-24 12:52:25 +02:00
LinuxServer-CI
86f90113e5
Bot Updating Package Versions 2025-08-11 17:38:38 +00:00
BuildTools
0f27fcacc2 Merge remote-tracking branch 'upstream/master' 2025-08-09 15:45:29 +02:00
LinuxServer-CI
5d98680464
Bot Updating Package Versions 2025-08-08 22:38:07 +00:00
LinuxServer-CI
b5d4cc7e71
Bot Updating Package Versions 2025-08-04 09:38:53 +00:00
BuildTools
727499b357 Merge remote-tracking branch 'upstream/master' 2025-08-03 12:31:06 +02:00
LinuxServer-CI
f0f381c0db
Bot Updating Package Versions 2025-07-28 09:35:03 +00:00
LinuxServer-CI
54bac1c3cf
Bot Updating Package Versions 2025-07-21 09:35:33 +00:00
BuildTools
c87f1010a7 Merge remote-tracking branch 'upstream/master' 2025-07-20 10:09:20 +02:00
LinuxServer-CI
3975f3f4ba
Bot Updating Package Versions 2025-07-15 15:37:49 +00:00
LinuxServer-CI
635f9ddf03
Bot Updating Package Versions 2025-07-14 09:34:45 +00:00
LinuxServer-CI
6987e66f3c
Bot Updating Templated Files 2025-07-07 09:30:48 +00:00
LinuxServer-CI
0900661b6f
Bot Updating Templated Files 2025-07-07 09:28:59 +00:00
BuildTools
c14dd5a47c Merge remote-tracking branch 'upstream/master' 2025-07-06 09:52:19 +02:00
LinuxServer-CI
b65ef27e65
Bot Updating Package Versions 2025-06-30 09:30:34 +00:00
BuildTools
70c49ef2d4 Merge remote-tracking branch 'upstream/master' 2025-06-19 15:31:30 +02:00
LinuxServer-CI
c27d92587e
Bot Updating Package Versions 2025-06-10 17:38:12 +00:00
LinuxServer-CI
0465b8095e
Bot Updating Templated Files 2025-06-10 17:34:04 +00:00
LinuxServer-CI
3044e621bf
Bot Updating Package Versions 2025-06-09 09:28:57 +00:00
BuildTools
303d122c01 Merge remote-tracking branch 'upstream/master' 2025-06-08 10:14:27 +02:00
LinuxServer-CI
3833657a3a
Bot Updating Package Versions 2025-06-02 09:28:17 +00:00
BuildTools
c35f69d4fa Merge remote-tracking branch 'upstream/master' 2025-05-31 11:35:19 +02:00
LinuxServer-CI
bf5b90a8e2
Bot Updating Package Versions 2025-05-27 19:31:29 +00:00
LinuxServer-CI
20c539447b
Bot Updating Package Versions 2025-05-20 15:41:18 +00:00
LinuxServer-CI
0c7513ed90
Bot Updating Templated Files 2025-05-19 09:27:26 +00:00
BuildTools
05ec76e7e9 Merge remote-tracking branch 'upstream/master' 2025-05-11 10:15:24 +00:00
LinuxServer-CI
5d77e8d8ba
Bot Updating Templated Files 2025-04-28 10:52:39 +00:00
LinuxServer-CI
12308d98c6
Bot Updating Package Versions 2025-04-21 09:27:54 +00:00
LinuxServer-CI
3ee08e388d
Bot Updating Package Versions 2025-04-10 16:42:11 +00:00
LinuxServer-CI
803ec8f8b6
Bot Updating Package Versions 2025-04-07 09:26:58 +00:00
BuildTools
97c9c78c0c Merge remote-tracking branch 'upstream/master' 2025-03-29 09:13:32 +00:00
LinuxServer-CI
60c1ec04cf
Bot Updating Package Versions 2025-03-24 09:28:15 +00:00
BuildTools
5be1cb4c1c Merge remote-tracking branch 'upstream/master' 2025-03-16 11:06:55 +00:00
LinuxServer-CI
d5127aff6d
Bot Updating Package Versions 2025-03-11 16:41:25 +00:00
LinuxServer-CI
a2e1bebb34
Bot Updating Package Versions 2025-03-10 09:21:30 +00:00
LinuxServer-CI
989f857351
Bot Updating Package Versions 2025-03-03 09:26:20 +00:00
LinuxServer-CI
3fbfd24ffa
Bot Updating Package Versions 2025-02-24 09:24:44 +00:00
BuildTools
dbabe2bee4 Merge remote-tracking branch 'upstream/master' 2025-02-15 09:20:18 +00:00
LinuxServer-CI
0a30a9391e
Bot Updating Package Versions 2025-02-12 17:32:49 +00:00
LinuxServer-CI
2d5bbae0dd
Bot Updating Package Versions 2025-02-10 09:28:25 +00:00
LinuxServer-CI
8a22d79bee
Bot Updating Templated Files 2025-02-10 09:23:43 +00:00
LinuxServer-CI
fa3f35a0f0
Bot Updating Package Versions 2025-02-03 09:29:25 +00:00
LinuxServer-CI
1faeb23abb
Bot Updating Templated Files 2025-02-03 09:24:30 +00:00
LinuxServer-CI
23a7477bd6
Bot Updating Templated Files 2025-02-03 09:23:16 +00:00
BuildTools
b9716badd9 Merge remote-tracking branch 'upstream/master' 2025-01-26 12:52:01 +00:00
quietsy
7577e696ce
Merge pull request #418 from linuxserver/add-project-categories
Add categories to readme-vars.yml
2025-01-22 19:44:31 +02:00
quietsy
8217b62d9a Add categories to readme-vars.yml 2025-01-22 17:13:12 +02:00
BuildTools
54de1404ca Merge remote-tracking branch 'upstream/master' 2025-01-03 14:10:00 +00:00
Adam
aa406f1496
Merge pull request #416 from linuxserver/nonroot 2025-01-01 22:45:59 +00:00
BuildTools
56d67a38c4 made wg a dependency for plex service 2024-12-27 13:00:23 +00:00
BuildTools
c8c020c491 Merge remote-tracking branch 'upstream/master' 2024-12-27 12:47:35 +00:00
LinuxServer-CI
875eb3dc41
Bot Updating Package Versions 2024-12-23 09:23:14 +00:00
BuildTools
bd368dfbf3 Merge remote-tracking branch 'upstream/master' 2024-12-22 11:32:26 +00:00
thespad
b29a1b8320
Support nonroot operation 2024-12-20 20:31:10 +00:00
LinuxServer-CI
5521df85df
Bot Updating Package Versions 2024-12-17 22:35:06 +00:00
LinuxServer-CI
af6901e341
Bot Updating Templated Files 2024-12-16 09:28:03 +00:00
LinuxServer-CI
025e5da7cb
Bot Updating Templated Files 2024-12-16 09:25:16 +00:00
LinuxServer-CI
25ff849152
Bot Updating Package Versions 2024-12-11 16:42:33 +00:00
LinuxServer-CI
ed26e879a2
Bot Updating Package Versions 2024-12-09 09:31:54 +00:00
LinuxServer-CI
57555832cd
Bot Updating Templated Files 2024-12-09 09:28:44 +00:00
LinuxServer-CI
1705b4cee7
Bot Updating Templated Files 2024-12-09 09:26:56 +00:00
LinuxServer-CI
3297c9b082
Bot Updating Templated Files 2024-12-02 09:29:49 +00:00
LinuxServer-CI
74f663120a
Bot Updating Templated Files 2024-12-02 09:28:07 +00:00
LinuxServer-CI
49fe7202e9
Bot Updating Templated Files 2024-12-02 09:26:22 +00:00
BuildTools
7c019750ce Merge remote-tracking branch 'upstream/master' 2024-11-16 08:56:01 +00:00
LinuxServer-CI
081ace2aee
Bot Updating Package Versions 2024-11-14 22:36:23 +00:00
LinuxServer-CI
0102ec4fa6
Bot Updating Templated Files 2024-11-11 09:25:06 +00:00
LinuxServer-CI
86c5c83041
Bot Updating Templated Files 2024-11-11 09:22:40 +00:00
BuildTools
a54fdfbce9 Merge remote-tracking branch 'upstream/master' 2024-11-09 11:02:57 +00:00
Roxedus
88b49cd0be
Merge pull request #413 from linuxserver/nvenc_cap 2024-11-04 17:01:31 +01:00
Roxedus
4dd0b7f2d2
Add graphics to capabilties 2024-11-04 16:27:13 +01:00
BuildTools
8e9b62b828 Merge remote-tracking branch 'upstream/master' 2024-11-02 12:42:42 +00:00
LinuxServer-CI
bb423a4d3b
Bot Updating Package Versions 2024-10-24 17:31:27 +00:00
Adam
877a9bd1a3
Fix RO update check 2024-10-14 17:47:55 +01:00
Adam
3b7c8dd08b
Merge pull request #410 from linuxserver/ro-update 2024-10-14 09:14:13 +01:00
thespad
9e313afccf
Add RO support 2024-10-13 16:59:17 +01:00
BuildTools
1a6eae12a2 Merge remote-tracking branch 'upstream/master' 2024-10-05 10:42:35 +00:00
LinuxServer-CI
4d1b0e164e
Bot Updating Templated Files 2024-09-30 09:28:28 +00:00
LinuxServer-CI
b3fae00aee
Bot Updating Templated Files 2024-09-30 09:27:13 +00:00
LinuxServer-CI
7e207423f3
Bot Updating Templated Files 2024-09-30 09:25:11 +00:00
BuildTools
fedcb7ae7a Merge remote-tracking branch 'upstream/master' 2024-09-28 08:33:03 +00:00
LinuxServer-CI
a420bdda82
Bot Updating Package Versions 2024-09-26 08:36:31 +00:00
LinuxServer-CI
42af1591d5
Bot Updating Package Versions 2024-09-23 09:26:04 +00:00
LinuxServer-CI
15a4ebbcfb
Bot Updating Package Versions 2024-09-12 11:27:07 +00:00
LinuxServer-CI
8d628cc4ff
Bot Updating Package Versions 2024-09-09 09:23:21 +00:00
BuildTools
5be889429b Merge remote-tracking branch 'upstream/master' 2024-09-08 09:23:27 +00:00
Adam
885401d6e4
Merge pull request #402 from darthShadow/patch-1 2024-09-03 10:04:48 +01:00
Anagh Kumar Baranwal
603e86d095
Fix ordering of options for lsiown 2024-09-03 12:43:30 +05:30
BuildTools
5c3b47763c Merge remote-tracking branch 'upstream/master' 2024-08-31 14:54:39 +00:00
LinuxServer-CI
4e96653f26
Bot Updating Package Versions 2024-08-28 12:51:03 +00:00
BuildTools
521b7d06d8 Merge remote-tracking branch 'upstream/master' 2024-08-26 19:11:38 +00:00
LinuxServer-CI
d5716af54b
Bot Updating Package Versions 2024-08-26 09:23:00 +00:00
LinuxServer-CI
a42349565e
Bot Updating Package Versions 2024-08-21 14:33:03 +00:00
LinuxServer-CI
cc4cae358a
Bot Updating Templated Files 2024-08-19 09:23:06 +00:00
LinuxServer-CI
c4de83bb82 Bot Updating Templated Files 2024-08-19 09:21:35 +00:00
BuildTools
2ca56eb1ce Merge remote-tracking branch 'upstream/master' 2024-08-16 15:16:14 +00:00
LinuxServer-CI
b646ebaabe Bot Updating Package Versions 2024-08-14 17:31:21 +00:00
LinuxServer-CI
409420813e Bot Updating Templated Files 2024-08-13 18:31:15 +00:00
Roxedus
7d865543ea
Merge pull request #398 from linuxserver/logo-url 2024-08-13 20:30:00 +02:00
thespad
c7717810ae
Fix logo URL 2024-08-13 17:25:28 +01:00
BuildTools
9fdb4a4894 Merge remote-tracking branch 'upstream/master' 2024-08-13 15:41:36 +00:00
LinuxServer-CI
29400873e3 Bot Updating Package Versions 2024-08-11 12:54:11 +00:00
Adam
aa902dd60b
Merge pull request #395 from linuxserver/master-noble 2024-08-11 13:51:29 +01:00
LinuxServer-CI
a2cb9a9595 Bot Updating Package Versions 2024-08-05 09:21:21 +00:00
LinuxServer-CI
64197c0cf8 Bot Updating Package Versions 2024-07-22 09:27:15 +00:00
thespad
259c06aaa9
Rebase to noble 2024-07-18 16:56:38 +01:00
LinuxServer-CI
c6e9645aab Bot Updating Templated Files 2024-07-15 09:22:43 +00:00
LinuxServer-CI
a3a21e9824 Bot Updating Templated Files 2024-07-15 09:21:05 +00:00
LinuxServer-CI
80fc8c4237 Bot Updating Package Versions 2024-07-10 17:29:34 +00:00
LinuxServer-CI
df28c3dffb Bot Updating Package Versions 2024-07-08 09:21:58 +00:00
LinuxServer-CI
35101cc180 Bot Updating Package Versions 2024-07-01 09:24:41 +00:00
BuildTools
34130ffa25 Merge remote-tracking branch 'upstream/master' 2024-06-15 08:53:43 +00:00
LinuxServer-CI
697a72fd75 Bot Updating Package Versions 2024-06-13 13:29:49 +00:00
LinuxServer-CI
49a138b64f Bot Updating Package Versions 2024-06-10 09:24:34 +00:00
LinuxServer-CI
c8f5da91ca Bot Updating Templated Files 2024-05-27 09:22:01 +00:00
LinuxServer-CI
1ff7b7ceee Bot Updating Templated Files 2024-05-27 09:20:07 +00:00
LinuxServer-CI
19113971c7 Bot Updating Package Versions 2024-05-13 09:22:11 +00:00
LinuxServer-CI
748b66a823 Bot Updating Templated Files 2024-05-13 09:19:01 +00:00
LinuxServer-CI
301c61cb09 Bot Updating Package Versions 2024-05-06 09:25:17 +00:00
LinuxServer-CI
a65f53bcdd Bot Updating Templated Files 2024-05-06 09:20:47 +00:00
BuildTools
c25a8e637e Merge remote-tracking branch 'upstream/master' 2024-05-05 09:30:32 +00:00
LinuxServer-CI
aa31fd17bf Bot Updating Package Versions 2024-04-29 09:22:57 +00:00
LinuxServer-CI
1d0b652eda Bot Updating Package Versions 2024-04-18 21:24:11 +00:00
LinuxServer-CI
0403f38ad4 Bot Updating Package Versions 2024-04-08 09:19:12 +00:00
LinuxServer-CI
7e8f9d6687 Bot Updating Package Versions 2024-03-25 09:18:03 +00:00
BuildTools
658c63714c Merge remote-tracking branch 'upstream/master' 2024-03-16 10:00:25 +00:00
LinuxServer-CI
31b4fbb6b7 Bot Updating Package Versions 2024-03-14 21:25:28 +00:00
LinuxServer-CI
fdf0d7700a Bot Updating Templated Files 2024-03-14 21:22:19 +00:00
LinuxServer-CI
90e8122203 Bot Updating Package Versions 2024-03-11 09:19:18 +00:00
LinuxServer-CI
53f70c08bc Bot Updating Package Versions 2024-03-04 11:11:30 +00:00
LinuxServer-CI
094a15b4aa Bot Updating Templated Files 2024-02-26 09:21:56 +00:00
LinuxServer-CI
2b397aa4b5 Bot Updating Templated Files 2024-02-26 09:18:23 +00:00
LinuxServer-CI
f561004964 Bot Updating Package Versions 2024-02-13 17:29:18 +00:00
Roxedus
7e17f74797
Merge pull request #389 from linuxserver/readme_hwaccel 2024-02-13 17:15:24 +01:00
Roxedus
c41c4b1815
Switch to readme_hwaccel 2024-02-12 19:07:45 +01:00
LinuxServer-CI
230cccde16 Bot Updating Package Versions 2024-02-12 09:20:18 +00:00
LinuxServer-CI
46f56aecf8 Bot Updating Package Versions 2024-02-05 09:18:09 +00:00
LinuxServer-CI
e3027d6d97 Bot Updating Package Versions 2024-01-29 09:18:09 +00:00
LinuxServer-CI
0ae63a4bc5 Bot Updating Package Versions 2024-01-22 09:20:00 +00:00
LinuxServer-CI
d20a2429e4 Bot Updating Package Versions 2024-01-13 02:06:22 +00:00
LinuxServer-CI
d7744c21df Bot Updating Templated Files 2024-01-13 02:03:34 +00:00
LinuxServer-CI
d3542cce19 Bot Updating Templated Files 2024-01-13 02:02:01 +00:00
Roxedus
ab02fd9fbd
Merge pull request #388 from linuxserver/nemchik-patch-1 2024-01-13 03:00:28 +01:00
Eric Nemchik
79f29db017
Update readme-vars.yml
Changelog for https://github.com/linuxserver/docker-plex/pull/387
2024-01-09 08:19:08 -06:00
BuildTools
d177f3a00e Merge remote-tracking branch 'upstream/master' 2023-12-05 15:37:00 +00:00
BuildTools
603a79335f removed wg0 at build 2023-11-01 10:50:50 +00:00
jaannnis
fa08911915 Update README.md 2023-11-01 10:50:47 +00:00
jaannnis
3cced1d334 Update Dockerfile
install wireguard
copy wireguard config

added wireguarg config

Update Dockerfile

Update Dockerfile

a

cleanup
2023-11-01 10:49:42 +00:00
34 changed files with 1201 additions and 751 deletions

View file

@ -0,0 +1,49 @@
name: Build and push image
on:
push:
branches: [master]
schedule:
- cron: '0 4 * * *' # daily, picks up LSIO base image updates
workflow_dispatch:
jobs:
build:
runs-on: docker
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: master
fetch-depth: 0
token: ${{ secrets.PUSH_TOKEN }}
- name: Merge upstream
run: |
git config user.name "forgejo-runner"
git config user.email "runner@forge.jannis.wtf"
git fetch origin master
git reset --hard origin/master
git remote add upstream https://github.com/linuxserver/docker-plex
git fetch upstream
git merge upstream/master --no-edit
git push origin master
- name: Set up Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Forgejo registry
uses: docker/login-action@v3
with:
registry: forge.jannis.wtf
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
forge.jannis.wtf/fej/plex-wireguard:latest
forge.jannis.wtf/fej/plex-wireguard:${{ github.sha }}

View file

@ -6,7 +6,7 @@
* Read, and fill the Pull Request template * 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 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 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 ## Common files
@ -105,10 +105,10 @@ docker build \
-t linuxserver/plex:latest . -t linuxserver/plex: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 ```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`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.

View file

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

View file

@ -67,10 +67,10 @@ body:
- type: textarea - type: textarea
attributes: attributes:
description: | description: |
Provide a full docker log, output of "docker logs linuxserver.io" Provide a full docker log, output of "docker logs plex"
label: Container logs label: Container logs
placeholder: | placeholder: |
Output of `docker logs linuxserver.io` Output of `docker logs plex`
render: bash render: bash
validations: validations:
required: true required: true

View file

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

View file

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

View file

@ -3,26 +3,42 @@ name: External Trigger Main
on: on:
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-master: external-trigger-master:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
- name: External Trigger - name: External Trigger
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: | run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_PLEX_MASTER }}" ]; then printf "# External trigger for docker-plex\n\n" >> $GITHUB_STEP_SUMMARY
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_PLEX_MASTER is set; skipping trigger. ****" if grep -q "^plex_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_PLEX_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`plex_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^plex_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`plex_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
echo "**** External trigger running off of master branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_PLEX_MASTER\". ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "External trigger running off of master branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_PLEX_MASTER\`" >> $GITHUB_STEP_SUMMARY echo "> External trigger running off of master branch. To disable this trigger, add \`plex_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****" printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -s "https://plex.tv/api/downloads/5.json" | jq -r '. | .computer.Linux.version') EXT_RELEASE=$(curl -s "https://plex.tv/api/downloads/5.json" | jq -r '. | .computer.Linux.version')
echo "Type is \`custom_json\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^plex_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 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 plex branch master" FAILURE_REASON="Can't retrieve external version for plex branch master"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-plex/actions/runs/${{ github.run_id }}" GHA_TRIGGER_URL="https://github.com/linuxserver/docker-plex/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, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
@ -30,25 +46,43 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****" echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
image="linuxserver/plex" image="linuxserver/plex"
tag="latest" tag="latest"
token=$(curl -sX GET \ token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fplex%3Apull" \ "https://ghcr.io/token?scope=repository%3Alinuxserver%2Fplex%3Apull" \
| jq -r '.token') | 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.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}" \ "https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
| jq -r 'first(.manifests[].digest)') digest=$(jq -r '.config.digest' <<< "${digest}");
digest=$(curl -s \ fi
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ fi
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
| jq -r '.config.digest')
image_info=$(curl -sL \ image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}") "https://ghcr.io/v2/${image}/blobs/${digest}")
@ -60,45 +94,54 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}') IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}') IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then 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 plex tag latest" FAILURE_REASON="Can't retrieve last pushed version for plex tag latest"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, 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"}], "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****" echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-plex/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-plex/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 exit 0
else else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****" if [[ "${artifacts_found}" == "false" ]]; then
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \ echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-plex/job/master/buildWithParameters?PACKAGE_CHECK=false \ FAILURE_REASON="New version ${EXT_RELEASE} for plex tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
echo "**** Jenkins job queue url: ${response%$'\r'} ****" "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
echo "**** Sleeping 10 seconds until job starts ****" "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
sleep 10 else
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
buildurl="${buildurl%$'\r'}" echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
echo "**** Jenkins job build url: ${buildurl} ****" if [[ "${artifacts_found}" == "true" ]]; then
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****" fi
curl -iX POST \ response=$(curl -iX POST \
"${buildurl}submitDescription" \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-plex/job/master/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
--data-urlencode "Submit=Submit" echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
echo "**** Notifying Discord ****" sleep 10
TRIGGER_REASON="A version change was detected for plex tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, buildurl="${buildurl%$'\r'}"
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} 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 plex 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 fi

View file

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

View file

@ -2,8 +2,14 @@ name: Greetings
on: [pull_request_target, issues] on: [pull_request_target, issues]
permissions:
contents: read
jobs: jobs:
greeting: greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/first-interaction@v1 - 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_PLEX_MASTER }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_PLEX_MASTER is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_PLEX_MASTER\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-plex/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_PLEX_MASTER\". ****"
echo "Package trigger running off of master branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_PLEX_MASTER\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-plex/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: '0 9 * * 1' - cron: '0 9 * * 1'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
with: with:
fetch-depth: '0' fetch-depth: '0'
- name: Package Trigger Scheduler - name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: | run: |
echo "**** Branches found: ****" printf "# Package trigger scheduler for docker-plex\n\n" >> $GITHUB_STEP_SUMMARY
git for-each-ref --format='%(refname:short)' refs/remotes 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:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') if [[ "${br}" == "HEAD" ]]; then
echo "**** Evaluating branch ${br} ****" printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-plex/${br}/jenkins-vars.yml | yq -r '.ls_branch') continue
if [ "${br}" == "${ls_branch}" ]; then fi
echo "**** Branch ${br} appears to be live; checking workflow. ****" printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-plex/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-plex/${br}/jenkins-vars.yml)
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****" if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-plex/${br}/Jenkinsfile >/dev/null 2>&1; then
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} " echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
curl -iX POST \ skipped_branches="${skipped_branches}${br} "
-H "Authorization: token ${{ secrets.CR_PAT }}" \ elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
-H "Accept: application/vnd.github.v3+json" \ echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
-d "{\"ref\":\"refs/heads/${br}\"}" \ README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-plex/${br}/readme-vars.yml)
https://api.github.com/repos/linuxserver/docker-plex/actions/workflows/package_trigger.yml/dispatches if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
sleep 30 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 "^plex_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`plex_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-plex/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 else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
printf "> To disable, add \`plex_%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-plex/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 fi
else 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 echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi fi
done done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****" if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
echo "**** Notifying Discord ****" if [[ -n "${triggered_branches}" ]]; then
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
"description": "**Package Check Build(s) Triggered for plex** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-plex/activity/"' \n"}], NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-plex/activity/ \n"
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} 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 plex** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi

View file

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

2
.gitignore vendored
View file

@ -1,3 +1,5 @@
# Wireguard configs, you never know
wg*.conf
# Windows image file caches # Windows image file caches
Thumbs.db Thumbs.db
ehthumbs.db ehthumbs.db

View file

@ -1,8 +1,8 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/unrar:latest as unrar FROM ghcr.io/linuxserver/unrar:latest AS unrar
FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy FROM ghcr.io/linuxserver/baseimage-ubuntu:noble
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -12,7 +12,7 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA
LABEL maintainer="thelamer" LABEL maintainer="thelamer"
#Add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker #Add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker
ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility,graphics"
# global environment settings # global environment settings
ENV DEBIAN_FRONTEND="noninteractive" \ ENV DEBIAN_FRONTEND="noninteractive" \
@ -23,19 +23,22 @@ ENV DEBIAN_FRONTEND="noninteractive" \
PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS="6" \ PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS="6" \
PLEX_MEDIA_SERVER_USER="abc" \ PLEX_MEDIA_SERVER_USER="abc" \
PLEX_MEDIA_SERVER_INFO_VENDOR="Docker" \ PLEX_MEDIA_SERVER_INFO_VENDOR="Docker" \
PLEX_MEDIA_SERVER_INFO_DEVICE="Docker Container (LinuxServer.io)" PLEX_MEDIA_SERVER_INFO_DEVICE="Docker Container (LinuxServer.io)" \
TMPDIR=/run/plex-temp \
ATTACHED_DEVICES_PERMS="/dev/dri /dev/dvb -type c"
RUN \ RUN \
echo "**** install runtime packages ****" && \ echo "**** install runtime packages & wireguard ****" && \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
jq \
udev \ udev \
wget && \ wget \
iproute2 \
wireguard-tools &&\
echo "**** install plex ****" && \ echo "**** install plex ****" && \
if [ -z ${PLEX_RELEASE+x} ]; then \ if [ -z ${PLEX_RELEASE+x} ]; then \
PLEX_RELEASE=$(curl -sX GET 'https://plex.tv/api/downloads/5.json' \ PLEX_RELEASE=$(curl -sX GET 'https://plex.tv/api/downloads/5.json' \
| jq -r '.computer.Linux.version'); \ | jq -r '.computer.Linux.version'); \
fi && \ fi && \
curl -o \ curl -o \
/tmp/plexmediaserver.deb -L \ /tmp/plexmediaserver.deb -L \
@ -43,6 +46,7 @@ RUN \
dpkg -i /tmp/plexmediaserver.deb && \ dpkg -i /tmp/plexmediaserver.deb && \
echo "**** ensure abc user's home folder is /app ****" && \ echo "**** ensure abc user's home folder is /app ****" && \
usermod -d /app abc && \ usermod -d /app abc && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \
@ -54,6 +58,7 @@ RUN \
# add local files # add local files
COPY root/ / COPY root/ /
# add unrar # add unrar
COPY --from=unrar /usr/bin/unrar-ubuntu /usr/bin/unrar COPY --from=unrar /usr/bin/unrar-ubuntu /usr/bin/unrar

View file

@ -1,8 +1,8 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/unrar:arm64v8-latest as unrar FROM ghcr.io/linuxserver/unrar:arm64v8-latest AS unrar
FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-noble
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
@ -20,20 +20,20 @@ ENV DEBIAN_FRONTEND="noninteractive" \
PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS="6" \ PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS="6" \
PLEX_MEDIA_SERVER_USER="abc" \ PLEX_MEDIA_SERVER_USER="abc" \
PLEX_MEDIA_SERVER_INFO_VENDOR="Docker" \ PLEX_MEDIA_SERVER_INFO_VENDOR="Docker" \
PLEX_MEDIA_SERVER_INFO_DEVICE="Docker Container (LinuxServer.io)" PLEX_MEDIA_SERVER_INFO_DEVICE="Docker Container (LinuxServer.io)" \
TMPDIR=/run/plex-temp \
ATTACHED_DEVICES_PERMS="/dev/dri /dev/dvb -type c"
RUN \ RUN \
echo "**** install runtime packages ****" && \ echo "**** install runtime packages ****" && \
apt-get update && \ apt-get update && \
apt-get install -y \ apt-get install -y \
jq \
udev \ udev \
unrar \
wget && \ wget && \
echo "**** install plex ****" && \ echo "**** install plex ****" && \
if [ -z ${PLEX_RELEASE+x} ]; then \ if [ -z ${PLEX_RELEASE+x} ]; then \
PLEX_RELEASE=$(curl -sX GET 'https://plex.tv/api/downloads/5.json' \ PLEX_RELEASE=$(curl -sX GET 'https://plex.tv/api/downloads/5.json' \
| jq -r '.computer.Linux.version'); \ | jq -r '.computer.Linux.version'); \
fi && \ fi && \
curl -o \ curl -o \
/tmp/plexmediaserver.deb -L \ /tmp/plexmediaserver.deb -L \
@ -41,6 +41,7 @@ RUN \
dpkg -i /tmp/plexmediaserver.deb && \ dpkg -i /tmp/plexmediaserver.deb && \
echo "**** ensure abc user's home folder is /app ****" && \ echo "**** ensure abc user's home folder is /app ****" && \
usermod -d /app abc && \ usermod -d /app abc && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
apt-get clean && \ apt-get clean && \
rm -rf \ rm -rf \

868
Jenkinsfile vendored

File diff suppressed because it is too large Load diff

111
README.md
View file

@ -1,11 +1,24 @@
<<<<<<< HEAD
<!-- DO NOT EDIT THIS FILE MANUALLY --> <!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read https://github.com/linuxserver/docker-plex/blob/master/.github/CONTRIBUTING.md --> <!-- Please read https://github.com/linuxserver/docker-plex/blob/master/.github/CONTRIBUTING.md -->
=======
due to the recent purge of Hosters by plex, this fork adds wireguard functionallity to the plex container as a quick workaround. all traffic gets tunneled.
wireguard onfig file has to be mounted in /etc/wireguard/wg0.conf. e.g.:
```
volumes:
- ./wg0.conf:/etc/wireguard/wg0.conf
```
<!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read the https://github.com/linuxserver/docker-plex/blob/master/.github/CONTRIBUTING.md -->
>>>>>>> 72bdfaa (Update README.md)
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![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!") [![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.") [![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.") [![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") [![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")
@ -20,15 +33,14 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
Find us at: 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! * [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. * [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. * [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 * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
# [linuxserver/plex](https://github.com/linuxserver/docker-plex) # [linuxserver/plex](https://github.com/linuxserver/docker-plex)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fplex?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fplex) [![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fplex?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-plex.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-plex) [![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-plex.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-plex)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-plex.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-plex/releases) [![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-plex.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-plex/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-plex/packages) [![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-plex/packages)
@ -41,7 +53,7 @@ Find us at:
[Plex](https://plex.tv) organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. Straightforward design and bulk actions mean getting things done faster. [Plex](https://plex.tv) organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. Straightforward design and bulk actions mean getting things done faster.
[![plex](http://the-gadgeteer.com/wp-content/uploads/2015/10/plex-logo-e1446990678679.png)](https://plex.tv) [![plex](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/plex-logo.png)](https://plex.tv)
## Supported Architectures ## Supported Architectures
@ -55,54 +67,81 @@ The architectures supported by this image are:
| :----: | :----: | ---- | | :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
## Application Setup ## Application Setup
Webui can be found at `<your-ip>:32400/web` Webui can be found at `<your-ip>:32400/web`
** Note about updates, if there is no value set for the VERSION variable, then no updates will take place.** >[!NOTE]
>If there is no value set for the VERSION variable, then no updates will take place.
** For new users, no updates will take place on the first run of the container as there is no preferences file to read your token from, to update restart the Docker container after logging in through the webui** >[!NOTE]
>For new users, no updates will take place on the first run of the container as there is no preferences file to read your token from, to update restart the Docker container after logging in through the webui.
Valid settings for VERSION are:- Valid settings for VERSION are:-
`IMPORTANT NOTE:- YOU CANNOT UPDATE TO A PLEXPASS ONLY (BETA) VERSION IF YOU ARE NOT LOGGED IN WITH A PLEXPASS ACCOUNT` >[!NOTE]
>YOU CANNOT UPDATE TO A PLEXPASS ONLY (BETA) VERSION IF YOU ARE NOT LOGGED IN WITH A PLEXPASS ACCOUNT.
+ **`docker`**: Let Docker handle the Plex Version, we keep our Dockerhub Endpoint up to date with the latest public builds. This is the same as leaving this setting out of your create command. + **`docker`**: Let Docker handle the Plex Version, we keep our Dockerhub Endpoint up to date with the latest public builds. This is the same as leaving this setting out of your create command.
+ **`latest`**: will update plex to the latest version available that you are entitled to. + **`latest`**: will update plex to the latest version available that you are entitled to.
+ **`public`**: will update plexpass users to the latest public version, useful for plexpass users that don't want to be on the bleeding edge but still want the latest public updates. + **`public`**: will update plexpass users to the latest public version, useful for plexpass users that don't want to be on the bleeding edge but still want the latest public updates.
+ **`<specific-version>`**: will select a specific version (eg 0.9.12.4.1192-9a47d21) of plex to install, note you cannot use this to access plexpass versions if you do not have plexpass. + **`<specific-version>`**: will select a specific version (eg 0.9.12.4.1192-9a47d21) of plex to install, note you cannot use this to access plexpass versions if you do not have plexpass.
## Hardware Acceleration ### Hardware Acceleration
### Intel Many desktop applications need access to a GPU to function properly and even some Desktop Environments have compositor effects that will not function without a GPU. However this is not a hard requirement and all base images will function without a video device mounted into the container.
Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container: #### Intel/ATI/AMD
``` To leverage hardware acceleration you will need to mount /dev/dri video device inside of the container.
```text
--device=/dev/dri:/dev/dri --device=/dev/dri:/dev/dri
``` ```
We will automatically ensure the abc user inside of the container has the proper permissions to access this device. We will automatically ensure the abc user inside of the container has the proper permissions to access this device.
### Nvidia #### Nvidia
Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here:
https://github.com/NVIDIA/nvidia-container-toolkit
https://github.com/NVIDIA/nvidia-docker We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-container-toolkit is installed on your host you will need to re/create the docker container with the nvidia container runtime `--runtime=nvidia` and add an environment variable `-e NVIDIA_VISIBLE_DEVICES=all` (can also be set to a specific gpu's UUID, this can be discovered by running `nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv` ). NVIDIA automatically mounts the GPU and drivers from your host into the container.
We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime `--runtime=nvidia` and add an environment variable `-e NVIDIA_VISIBLE_DEVICES=all` (can also be set to a specific gpu's UUID, this can be discovered by running `nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv` ). NVIDIA automatically mounts the GPU and drivers from your host into the plex docker. #### Arm Devices
Best effort is made to install tools to allow mounting in /dev/dri on Arm devices. In most cases if /dev/dri exists on the host it should just work. If running a Raspberry Pi 4 be sure to enable `dtoverlay=vc4-fkms-v3d` in your usercfg.txt.
## 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/).
### Caveats
* Runtime update of Plex (and thus Plexpass builds) is not supported.
* Transcode directory must be mounted to a host path or tmpfs.
## 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/).
### Caveats
* Runtime update of Plex (and thus Plexpass builds) is not supported.
* Transcode directory must be mounted to a host path or tmpfs.
## Usage ## Usage
To help you get started creating a container from this image you can either use docker-compose or the docker cli. 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 flagged 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)) ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml ```yaml
--- ---
version: "2.1"
services: services:
plex: plex:
image: lscr.io/linuxserver/plex:latest image: lscr.io/linuxserver/plex:latest
@ -115,7 +154,7 @@ services:
- VERSION=docker - VERSION=docker
- PLEX_CLAIM= #optional - PLEX_CLAIM= #optional
volumes: volumes:
- /path/to/library:/config - /path/to/plex/library:/config
- /path/to/tvseries:/tv - /path/to/tvseries:/tv
- /path/to/movies:/movies - /path/to/movies:/movies
restart: unless-stopped restart: unless-stopped
@ -132,7 +171,7 @@ docker run -d \
-e TZ=Etc/UTC \ -e TZ=Etc/UTC \
-e VERSION=docker \ -e VERSION=docker \
-e PLEX_CLAIM= `#optional` \ -e PLEX_CLAIM= `#optional` \
-v /path/to/library:/config \ -v /path/to/plex/library:/config \
-v /path/to/tvseries:/tv \ -v /path/to/tvseries:/tv \
-v /path/to/movies:/movies \ -v /path/to/movies:/movies \
--restart unless-stopped \ --restart unless-stopped \
@ -154,6 +193,8 @@ Containers are configured using parameters passed at runtime (such as those abov
| `-v /config` | Plex library location. *This can grow very large, 50gb+ is likely for a large collection.* | | `-v /config` | Plex library location. *This can grow very large, 50gb+ is likely for a large collection.* |
| `-v /tv` | Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc. | | `-v /tv` | Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc. |
| `-v /movies` | Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc. | | `-v /movies` | Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc. |
| `--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) ## Environment variables from files (Docker secrets)
@ -251,7 +292,7 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
## Updating Info ## 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: Below are the instructions for updating containers:
@ -316,24 +357,10 @@ Below are the instructions for updating containers:
docker image prune docker image prune
``` ```
### 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 plex
```
* You can also remove the old dangling images: `docker image prune`
**warning**: 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).
### Image Update Notifications - Diun (Docker Image Update Notifier) ### Image Update Notifications - Diun (Docker Image Update Notifier)
**tip**: 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 ## Building locally
@ -348,16 +375,22 @@ docker build \
-t lscr.io/linuxserver/plex:latest . -t lscr.io/linuxserver/plex: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 ```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`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions ## Versions
* **15.03.26:** - Allow TMPDIR to be changed to better support read-only containers
* **15.03.26:** - Fix initial claim setup on non-root containers
* **04.11.24:** - Add Nvidia capability needed for h265
* **18.07.24:** - Rebase to Ubuntu Noble.
* **12.02.24:** - Use universal hardware acceleration blurb
* **09.01.24:** - Set ownership on TranscoderTempDirectory when it's been saved in Preferences.
* **16.08.23:** - Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar). * **16.08.23:** - Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar).
* **03.07.23:** - Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf) * **03.07.23:** - Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)
* **16.10.22:** - Rebase to jammy. Update to s6v3. Remove opencl packages (bundled with plex). * **16.10.22:** - Rebase to jammy. Update to s6v3. Remove opencl packages (bundled with plex).

View file

@ -23,6 +23,6 @@ repo_vars:
- CI_PORT='32400' - CI_PORT='32400'
- CI_SSL='false' - CI_SSL='false'
- CI_DELAY='120' - CI_DELAY='120'
- CI_DOCKERENV='TZ=US/Pacific' - CI_DOCKERENV=''
- CI_AUTH='user:password' - CI_AUTH=''
- CI_WEBPATH='/web/index.html' - CI_WEBPATH='/web/index.html'

View file

@ -1,151 +1,148 @@
NAME VERSION TYPE NAME VERSION TYPE
adduser 3.118ubuntu5 deb adduser 3.137ubuntu1 deb
apt 2.4.11 deb apt 2.8.3 deb
apt-utils 2.4.11 deb apt-utils 2.8.3 deb
base-files 12ubuntu4.3 deb base-files 13ubuntu10.4 deb
base-passwd 3.5.52build1 deb base-passwd 3.6.3build1 deb
bash 5.1-6ubuntu1 deb bash 5.2.21-2ubuntu4 deb
bash 5.1.16 binary bsdutils 1:2.39.3-9ubuntu6.5 deb
bsdutils 1:2.37.2-4ubuntu3 deb ca-certificates 20240203 deb
ca-certificates 20230311ubuntu0.22.04.1 deb catatonit 0.1.7-1 deb
coreutils 8.32-4.1ubuntu1 deb coreutils 9.4-3ubuntu6.2 deb
cron 3.0pl1-137ubuntu3 deb cron 3.0pl1-184ubuntu2 deb
curl 7.81.0-1ubuntu1.15 deb cron-daemon-common 3.0pl1-184ubuntu2 deb
dash 0.5.11+git20210903+057cd650a4ed-3build1 deb curl 8.5.0-2ubuntu10.8 deb
debconf 1.5.79ubuntu1 deb dash 0.5.12-6ubuntu5 deb
debianutils 5.5-1ubuntu2 deb debconf 1.5.86ubuntu1 deb
diffutils 1:3.8-0ubuntu2 deb debianutils 5.17build1 deb
dirmngr 2.2.27-3ubuntu2.1 deb diffutils 1:3.10-1build1 deb
dpkg 1.21.1ubuntu2.2 deb dirmngr 2.4.4-2ubuntu17.4 deb
e2fsprogs 1.46.5-2ubuntu1.1 deb dpkg 1.22.6ubuntu6.5 deb
findutils 4.8.0-1ubuntu3 deb e2fsprogs 1.47.0-2.4~exp1ubuntu4.1 deb
gcc-12-base 12.1.0-2ubuntu1~22.04 deb findutils 4.9.0-5build1 deb
gnupg 2.2.27-3ubuntu2.1 deb gcc-14-base 14.2.0-4ubuntu2~24.04.1 deb
gnupg-l10n 2.2.27-3ubuntu2.1 deb gnupg 2.4.4-2ubuntu17.4 deb
gnupg-utils 2.2.27-3ubuntu2.1 deb gnupg-l10n 2.4.4-2ubuntu17.4 deb
gpg 2.2.27-3ubuntu2.1 deb gnupg-utils 2.4.4-2ubuntu17.4 deb
gpg-agent 2.2.27-3ubuntu2.1 deb gpg 2.4.4-2ubuntu17.4 deb
gpg-wks-client 2.2.27-3ubuntu2.1 deb gpg-agent 2.4.4-2ubuntu17.4 deb
gpg-wks-server 2.2.27-3ubuntu2.1 deb gpg-wks-client 2.4.4-2ubuntu17.4 deb
gpgconf 2.2.27-3ubuntu2.1 deb gpgconf 2.4.4-2ubuntu17.4 deb
gpgsm 2.2.27-3ubuntu2.1 deb gpgsm 2.4.4-2ubuntu17.4 deb
gpgv 2.2.27-3ubuntu2.1 deb gpgv 2.4.4-2ubuntu17.4 deb
grep 3.7-1build1 deb grep 3.11-4build1 deb
gzip 1.10-4ubuntu4.1 deb gzip 1.12-1ubuntu3.1 deb
hostname 3.23ubuntu2 deb hostname 3.23+nmu2ubuntu2 deb
init-system-helpers 1.62 deb init-system-helpers 1.66ubuntu1 deb
jq 1.6-2.1ubuntu3 deb jq 1.7.1-3ubuntu0.24.04.2 deb
libacl1 2.3.1-1 deb keyboxd 2.4.4-2ubuntu17.4 deb
libapt-pkg6.0 2.4.11 deb krb5-locales 1.20.1-6ubuntu2.6 deb
libassuan0 2.5.5-1build1 deb libacl1 2.3.2-1build1.1 deb
libattr1 1:2.5.1-1build1 deb libapt-pkg6.0t64 2.8.3 deb
libaudit-common 1:3.0.7-1build1 deb libassuan0 2.5.6-1build1 deb
libaudit1 1:3.0.7-1build1 deb libattr1 1:2.5.2-1build1.1 deb
libblkid1 2.37.2-4ubuntu3 deb libaudit-common 1:3.1.2-2.1build1.1 deb
libbrotli1 1.0.9-2build6 deb libaudit1 1:3.1.2-2.1build1.1 deb
libbsd0 0.11.5-1 deb libblkid1 2.39.3-9ubuntu6.5 deb
libbz2-1.0 1.0.8-5build1 deb libbrotli1 1.1.0-2build2 deb
libc-bin 2.35-0ubuntu3.1 deb libbsd0 0.12.1-1build1.1 deb
libc6 2.35-0ubuntu3.1 deb libbz2-1.0 1.0.8-5.1build0.1 deb
libcap-ng0 0.7.9-2.2build3 deb libc-bin 2.39-0ubuntu8.7 deb
libcap2 1:2.44-1ubuntu0.22.04.1 deb libc6 2.39-0ubuntu8.7 deb
libcom-err2 1.46.5-2ubuntu1.1 deb libcap-ng0 0.8.4-2build2 deb
libcrypt1 1:4.4.27-1 deb libcap2 1:2.66-5ubuntu2.4 deb
libcurl4 7.81.0-1ubuntu1.15 deb libcom-err2 1.47.0-2.4~exp1ubuntu4.1 deb
libdb5.3 5.3.28+dfsg1-0.8ubuntu3 deb libcrypt1 1:4.4.36-4build1 deb
libdebconfclient0 0.261ubuntu1 deb libcurl4t64 8.5.0-2ubuntu10.8 deb
libext2fs2 1.46.5-2ubuntu1.1 deb libdb5.3t64 5.3.28+dfsg2-7 deb
libffi8 3.4.2-4 deb libdebconfclient0 0.271ubuntu3 deb
libgcc-s1 12.1.0-2ubuntu1~22.04 deb libext2fs2t64 1.47.0-2.4~exp1ubuntu4.1 deb
libgcrypt20 1.9.4-3ubuntu3 deb libffi8 3.4.6-1build1 deb
libgmp10 2:6.2.1+dfsg-3ubuntu1 deb libgcc-s1 14.2.0-4ubuntu2~24.04.1 deb
libgnutls30 3.7.3-4ubuntu1.2 deb libgcrypt20 1.10.3-2build1 deb
libgpg-error0 1.43-3 deb libgmp10 2:6.3.0+dfsg-2ubuntu6.1 deb
libgssapi-krb5-2 1.19.2-2ubuntu0.2 deb libgnutls30t64 3.8.3-1.1ubuntu3.5 deb
libhogweed6 3.7.3-1build2 deb libgpg-error0 1.47-3build2.1 deb
libidn2-0 2.3.2-2build1 deb libgssapi-krb5-2 1.20.1-6ubuntu2.6 deb
libjq1 1.6-2.1ubuntu3 deb libhogweed6t64 3.9.1-2.2build1.1 deb
libk5crypto3 1.19.2-2ubuntu0.2 deb libidn2-0 2.3.7-2build1.1 deb
libkeyutils1 1.6.1-2ubuntu3 deb libjq1 1.7.1-3ubuntu0.24.04.2 deb
libkmod2 29-1ubuntu1 deb libk5crypto3 1.20.1-6ubuntu2.6 deb
libkrb5-3 1.19.2-2ubuntu0.2 deb libkeyutils1 1.6.3-3build1 deb
libkrb5support0 1.19.2-2ubuntu0.2 deb libkmod2 31+20240202-2ubuntu7.2 deb
libksba8 1.6.0-2ubuntu0.2 deb libkrb5-3 1.20.1-6ubuntu2.6 deb
libldap-2.5-0 2.5.16+dfsg-0ubuntu0.22.04.1 deb libkrb5support0 1.20.1-6ubuntu2.6 deb
libldap-common 2.5.16+dfsg-0ubuntu0.22.04.1 deb libksba8 1.6.6-1build1 deb
liblz4-1 1.9.3-2build2 deb libldap-common 2.6.10+dfsg-0ubuntu0.24.04.1 deb
liblzma5 5.2.5-2ubuntu1 deb libldap2 2.6.10+dfsg-0ubuntu0.24.04.1 deb
libmd0 1.0.4-1build1 deb liblz4-1 1.9.4-1build1.1 deb
libmount1 2.37.2-4ubuntu3 deb liblzma5 5.6.1+really5.4.5-1ubuntu0.2 deb
libncurses6 6.3-2ubuntu0.1 deb libmd0 1.1.0-2build1.1 deb
libncursesw6 6.3-2ubuntu0.1 deb libmount1 2.39.3-9ubuntu6.5 deb
libnettle8 3.7.3-1build2 deb libncursesw6 6.4+20240113-1ubuntu2 deb
libnghttp2-14 1.43.0-1ubuntu0.1 deb libnettle8t64 3.9.1-2.2build1.1 deb
libnpth0 1.6-3build2 deb libnghttp2-14 1.59.0-1ubuntu0.2 deb
libnsl2 1.3.0-2build2 deb libnpth0t64 1.6-3.1build1 deb
libonig5 6.9.7.1-2build1 deb libonig5 6.9.9-1build1 deb
libp11-kit0 0.24.0-6build1 deb libp11-kit0 0.25.3-4ubuntu2.1 deb
libpam-modules 1.4.0-11ubuntu2.3 deb libpam-modules 1.5.3-5ubuntu5.5 deb
libpam-modules-bin 1.4.0-11ubuntu2.3 deb libpam-modules-bin 1.5.3-5ubuntu5.5 deb
libpam-runtime 1.4.0-11ubuntu2.3 deb libpam-runtime 1.5.3-5ubuntu5.5 deb
libpam0g 1.4.0-11ubuntu2.3 deb libpam0g 1.5.3-5ubuntu5.5 deb
libpcre2-8-0 10.39-3ubuntu0.1 deb libpcre2-8-0 10.42-4ubuntu2.1 deb
libpcre3 2:8.39-13ubuntu0.22.04.1 deb libproc2-0 2:4.0.4-4ubuntu3.2 deb
libprocps8 2:3.3.17-6ubuntu2 deb libpsl5t64 0.21.2-1.1build1 deb
libpsl5 0.21.0-1.2build2 deb libreadline8t64 8.2-4build1 deb
libreadline8 8.1.2-1 deb librtmp1 2.4+20151223.gitfa8646d.1-2build7 deb
librtmp1 2.4+20151223.gitfa8646d.1-2build4 deb libsasl2-2 2.1.28+dfsg1-5ubuntu3.1 deb
libsasl2-2 2.1.27+dfsg2-3ubuntu1.2 deb libsasl2-modules 2.1.28+dfsg1-5ubuntu3.1 deb
libsasl2-modules 2.1.27+dfsg2-3ubuntu1.2 deb libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1 deb
libsasl2-modules-db 2.1.27+dfsg2-3ubuntu1.2 deb libseccomp2 2.5.5-1ubuntu3.1 deb
libseccomp2 2.5.3-2ubuntu2 deb libselinux1 3.5-2ubuntu2.1 deb
libselinux1 3.3-1build2 deb libsemanage-common 3.5-1build5 deb
libsemanage-common 3.3-1build2 deb libsemanage2 3.5-1build5 deb
libsemanage2 3.3-1build2 deb libsepol2 3.5-2build1 deb
libsepol2 3.3-1build1 deb libsmartcols1 2.39.3-9ubuntu6.5 deb
libsmartcols1 2.37.2-4ubuntu3 deb libsqlite3-0 3.45.1-1ubuntu2.5 deb
libsqlite3-0 3.37.2-2ubuntu0.1 deb libss2 1.47.0-2.4~exp1ubuntu4.1 deb
libss2 1.46.5-2ubuntu1.1 deb libssh-4 0.10.6-2ubuntu0.4 deb
libssh-4 0.9.6-2ubuntu0.22.04.2 deb libssl3t64 3.0.13-0ubuntu3.9 deb
libssl3 3.0.2-0ubuntu1.10 deb libstdc++6 14.2.0-4ubuntu2~24.04.1 deb
libstdc++6 12.1.0-2ubuntu1~22.04 deb libsystemd0 255.4-1ubuntu8.15 deb
libsystemd0 249.11-0ubuntu3.9 deb libtasn1-6 4.19.0-3ubuntu0.24.04.2 deb
libtasn1-6 4.18.0-4build1 deb libtinfo6 6.4+20240113-1ubuntu2 deb
libtinfo6 6.3-2ubuntu0.1 deb libudev1 255.4-1ubuntu8.15 deb
libtirpc-common 1.3.2-2ubuntu0.1 deb libunistring5 1.1-2build1.1 deb
libtirpc3 1.3.2-2ubuntu0.1 deb libuuid1 2.39.3-9ubuntu6.5 deb
libudev1 249.11-0ubuntu3.11 deb libxxhash0 0.8.2-2build1 deb
libunistring2 1.0-1 deb libzstd1 1.5.5+dfsg2-2build1.1 deb
libuuid1 2.37.2-4ubuntu3 deb locales 2.39-0ubuntu8.7 deb
libxxhash0 0.8.1-1 deb login 1:4.13+dfsg1-4ubuntu3.2 deb
libzstd1 1.4.8+dfsg-3build1 deb logsave 1.47.0-2.4~exp1ubuntu4.1 deb
locales 2.35-0ubuntu3.5 deb mawk 1.3.4.20240123-1build1 deb
login 1:4.8.1-2ubuntu2.1 deb mount 2.39.3-9ubuntu6.5 deb
logsave 1.46.5-2ubuntu1.1 deb ncurses-base 6.4+20240113-1ubuntu2 deb
lsb-base 11.1.0ubuntu4 deb ncurses-bin 6.4+20240113-1ubuntu2 deb
mawk 1.3.4.20200120-3 deb netcat-openbsd 1.226-1ubuntu2 deb
mount 2.37.2-4ubuntu3 deb openssl 3.0.13-0ubuntu3.9 deb
ncurses-base 6.3-2ubuntu0.1 deb passwd 1:4.13+dfsg1-4ubuntu3.2 deb
ncurses-bin 6.3-2ubuntu0.1 deb perl-base 5.38.2-3.2ubuntu0.2 deb
netcat 1.218-4ubuntu1 deb pinentry-curses 1.2.1-3ubuntu5 deb
netcat-openbsd 1.218-4ubuntu1 deb plexmediaserver 1.43.1.10611-1e34174b1 deb
openssl 3.0.2-0ubuntu1.12 deb procps 2:4.0.4-4ubuntu3.2 deb
passwd 1:4.8.1-2ubuntu2.1 deb publicsuffix 20231001.0357-0.1 deb
perl-base 5.34.0-3ubuntu1.2 deb readline-common 8.2-4build1 deb
pinentry-curses 1.1.1-1build2 deb sed 4.9-2build1 deb
plexmediaserver 1.32.8.7639-fb6452ebf deb sensible-utils 0.0.22 deb
procps 2:3.3.17-6ubuntu2 deb systemd-dev 255.4-1ubuntu8.15 deb
publicsuffix 20211207.1025-1 deb systemd-hwe-hwdb 255.1.7 deb
readline-common 8.1.2-1 deb systemd-standalone-sysusers 255.4-1ubuntu8.15 deb
sed 4.8-1ubuntu2 deb sysvinit-utils 3.08-6ubuntu3 deb
sensible-utils 0.0.17 deb tar 1.35+dfsg-3build1 deb
systemd-hwe-hwdb 249.11.4 deb tzdata 2026a-0ubuntu0.24.04.1 deb
sysvinit-utils 3.01-1ubuntu1 deb ubuntu-keyring 2023.11.28.1 deb
tar 1.34+dfsg-1ubuntu0.1.22.04.1 deb udev 255.4-1ubuntu8.15 deb
tzdata 2023c-0ubuntu0.22.04.2 deb unminimize 0.2.1 deb
ubuntu-keyring 2021.03.26 deb util-linux 2.39.3-9ubuntu6.5 deb
udev 249.11-0ubuntu3.11 deb wget 1.21.4-1ubuntu4.1 deb
usrmerge 25ubuntu2 deb zlib1g 1:1.3.dfsg-3.1ubuntu2.1 deb
util-linux 2.37.2-4ubuntu3 deb
wget 1.21.2-2ubuntu1 deb
zlib1g 1:1.2.11.dfsg-2ubuntu9.2 deb

View file

@ -3,24 +3,22 @@
# project information # project information
project_name: plex project_name: plex
project_url: "https://plex.tv" project_url: "https://plex.tv"
project_logo: "http://the-gadgeteer.com/wp-content/uploads/2015/10/plex-logo-e1446990678679.png" project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/plex-logo.png"
project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. Straightforward design and bulk actions mean getting things done faster." project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. Straightforward design and bulk actions mean getting things done faster."
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "Media Servers,Music,Audiobooks"
# supported architectures # supported architectures
available_architectures: available_architectures:
- {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} - {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- {arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} - {arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
# development version
development_versions: false
# container parameters # container parameters
common_param_env_vars_enabled: true #PGID, PUID, etc common_param_env_vars_enabled: true #PGID, PUID, etc
param_container_name: "{{ project_name }}" param_container_name: "{{ project_name }}"
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: param_volumes:
- {vol_path: "/config", vol_host_path: "/path/to/library", desc: "Plex library location. *This can grow very large, 50gb+ is likely for a large collection.*"} - {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/library", desc: "Plex library location. *This can grow very large, 50gb+ is likely for a large collection.*"}
- {vol_path: "/tv", vol_host_path: "/path/to/tvseries", desc: "Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc."} - {vol_path: "/tv", vol_host_path: "/path/to/tvseries", desc: "Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc."}
- {vol_path: "/movies", vol_host_path: "/path/to/movies", desc: "Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc."} - {vol_path: "/movies", vol_host_path: "/path/to/movies", desc: "Media goes here. Add as many as needed e.g. `/movies`, `/tv`, etc."}
param_usage_include_ports: false
param_usage_include_net: true param_usage_include_net: true
param_net: "host" param_net: "host"
param_net_desc: "Use Host Networking" param_net_desc: "Use Host Networking"
@ -61,40 +59,78 @@ app_setup_block_enabled: true
app_setup_block: | app_setup_block: |
Webui can be found at `<your-ip>:32400/web` Webui can be found at `<your-ip>:32400/web`
** Note about updates, if there is no value set for the VERSION variable, then no updates will take place.** ?+note[Updates](|If there is no value set for the VERSION variable, then no updates will take place.|)
** For new users, no updates will take place on the first run of the container as there is no preferences file to read your token from, to update restart the Docker container after logging in through the webui** ?+note[New users](|For new users, no updates will take place on the first run of the container as there is no preferences file to read your token from, to update restart the Docker container after logging in through the webui.|)
Valid settings for VERSION are:- Valid settings for VERSION are:-
`IMPORTANT NOTE:- YOU CANNOT UPDATE TO A PLEXPASS ONLY (BETA) VERSION IF YOU ARE NOT LOGGED IN WITH A PLEXPASS ACCOUNT` ?+info[Plexpass](|YOU CANNOT UPDATE TO A PLEXPASS ONLY (BETA) VERSION IF YOU ARE NOT LOGGED IN WITH A PLEXPASS ACCOUNT.|)
+ **`docker`**: Let Docker handle the Plex Version, we keep our Dockerhub Endpoint up to date with the latest public builds. This is the same as leaving this setting out of your create command. + **`docker`**: Let Docker handle the Plex Version, we keep our Dockerhub Endpoint up to date with the latest public builds. This is the same as leaving this setting out of your create command.
+ **`latest`**: will update plex to the latest version available that you are entitled to. + **`latest`**: will update plex to the latest version available that you are entitled to.
+ **`public`**: will update plexpass users to the latest public version, useful for plexpass users that don't want to be on the bleeding edge but still want the latest public updates. + **`public`**: will update plexpass users to the latest public version, useful for plexpass users that don't want to be on the bleeding edge but still want the latest public updates.
+ **`<specific-version>`**: will select a specific version (eg 0.9.12.4.1192-9a47d21) of plex to install, note you cannot use this to access plexpass versions if you do not have plexpass. + **`<specific-version>`**: will select a specific version (eg 0.9.12.4.1192-9a47d21) of plex to install, note you cannot use this to access plexpass versions if you do not have plexpass.
readme_hwaccel: true
## Hardware Acceleration readonly_supported: true
readonly_message: |
### Intel * Runtime update of Plex (and thus Plexpass builds) is not supported.
* Transcode directory must be mounted to a host path or tmpfs.
Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container: nonroot_supported: true
nonroot_message: |
``` * Runtime update of Plex (and thus Plexpass builds) is not supported.
--device=/dev/dri:/dev/dri * Transcode directory must be mounted to a host path or tmpfs.
``` # init diagram
init_diagram: |
We will automatically ensure the abc user inside of the container has the proper permissions to access this device. "plex:latest": {
docker-mods
### Nvidia base {
fix-attr +\nlegacy cont-init
Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: }
docker-mods -> base
https://github.com/NVIDIA/nvidia-docker legacy-services
custom services
We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime `--runtime=nvidia` and add an environment variable `-e NVIDIA_VISIBLE_DEVICES=all` (can also be set to a specific gpu's UUID, this can be discovered by running `nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv` ). NVIDIA automatically mounts the GPU and drivers from your host into the plex docker. 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-plex-update -> 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-config -> init-plex-chown
init-plex-chown -> init-plex-claim
init-plex-claim -> init-plex-update
init-custom-files -> init-services
init-services -> svc-cron
svc-cron -> legacy-services
init-services -> svc-plex
svc-plex -> legacy-services
}
Base Images: {
"baseimage-ubuntu:noble"
}
"plex:latest" <- Base Images
# changelog # changelog
changelogs: changelogs:
- {date: "15.03.26:", desc: "Allow TMPDIR to be changed to better support read-only containers"}
- {date: "15.03.26:", desc: "Fix initial claim setup on non-root containers"}
- {date: "04.11.24:", desc: "Add Nvidia capability needed for h265"}
- {date: "18.07.24:", desc: "Rebase to Ubuntu Noble."}
- {date: "12.02.24:", desc: "Use universal hardware acceleration blurb"}
- {date: "09.01.24:", desc: "Set ownership on TranscoderTempDirectory when it's been saved in Preferences."}
- {date: "16.08.23:", desc: "Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar)."} - {date: "16.08.23:", desc: "Install unrar from [linuxserver repo](https://github.com/linuxserver/docker-unrar)."}
- {date: "03.07.23:", desc: "Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)"} - {date: "03.07.23:", desc: "Deprecate armhf. As announced [here](https://www.linuxserver.io/blog/a-farewell-to-arm-hf)"}
- {date: "16.10.22:", desc: "Rebase to jammy. Update to s6v3. Remove opencl packages (bundled with plex)."} - {date: "16.10.22:", desc: "Rebase to jammy. Update to s6v3. Remove opencl packages (bundled with plex)."}

View file

@ -1,19 +1,18 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
# shellcheck shell=bash # shellcheck shell=bash
# remove plex temporary directory after unclean stop
if [[ -d "${TMPDIR}" ]]; then
rm -rf "${TMPDIR}"
fi
mkdir -p ${TMPDIR}
# create folders # create folders
if [[ ! -d "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" ]]; then if [[ ! -d "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" ]]; then
mkdir -p "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" mkdir -p "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}"
lsiown -R abc:abc /config if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
fi lsiown -R abc:abc /config
fi
# check Library permissions
PUID=${PUID:-911}
if [[ ! "$(stat -c %u /config/Library)" == "${PUID}" ]]; then
echo "Change in ownership detected, please be patient while we chown existing files"
echo "This could take some time"
lsiown abc:abc -R \
/config/Library
fi fi
# remove plex pid after unclean stop # remove plex pid after unclean stop
@ -21,19 +20,31 @@ if [[ -f "/config/Library/Application Support/Plex Media Server/plexmediaserver.
rm -f "/config/Library/Application Support/Plex Media Server/plexmediaserver.pid" rm -f "/config/Library/Application Support/Plex Media Server/plexmediaserver.pid"
fi fi
# set permissions on Plex Transcoder Temp Directory if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
PLEX_MEDIA_SERVER_PREFERENCES="${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}/Plex Media Server/Preferences.xml" # check Library permissions
if [[ -f "${PLEX_MEDIA_SERVER_PREFERENCES}" ]]; then PUID=${PUID:-911}
TranscoderTempDirectory='\bTranscoderTempDirectory="([^"]+)"' if [[ ! "$(stat -c %u /config/Library)" == "${PUID}" ]]; then
while IFS= read -r line; do echo "Change in ownership detected, please be patient while we chown existing files"
if [[ ${line} =~ ${TranscoderTempDirectory} ]] && [[ -d "${BASH_REMATCH[1]}" ]]; then echo "This could take some time"
echo "Setting permissions on ${BASH_REMATCH[1]}" lsiown -R abc:abc \
lsiown -R abc:abc "${BASH_REMATCH[1]}" /config/Library
fi fi
done <"${PLEX_MEDIA_SERVER_PREFERENCES}"
fi
# permissions (non-recursive) on config root and folders # set permissions on Plex Transcoder Temp Directory
lsiown abc:abc \ PLEX_MEDIA_SERVER_PREFERENCES="${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}/Plex Media Server/Preferences.xml"
/config \ if [[ -f "${PLEX_MEDIA_SERVER_PREFERENCES}" ]]; then
/config/* TranscoderTempDirectory='\bTranscoderTempDirectory="([^"]+)"'
while IFS= read -r line; do
if [[ ${line} =~ ${TranscoderTempDirectory} ]] && [[ -d "${BASH_REMATCH[1]}" ]]; then
echo "Setting permissions on ${BASH_REMATCH[1]}"
lsiown -R abc:abc "${BASH_REMATCH[1]}"
fi
done <"${PLEX_MEDIA_SERVER_PREFERENCES}"
fi
# permissions (non-recursive) on config root and folders
lsiown abc:abc \
"${TMPDIR}" \
/config \
/config/*
fi

View file

@ -19,8 +19,15 @@ if [[ ! -f "${PLEX_MEDIA_SERVER_PREFERENCES}" ]]; then
export PLEX_MEDIA_SERVER_INFO_MODEL export PLEX_MEDIA_SERVER_INFO_MODEL
PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION=$(uname -r) PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION=$(uname -r)
export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION
s6-setuidgid abc /bin/bash -c \
'LD_LIBRARY_PATH=/usr/lib/plexmediaserver:/usr/lib/plexmediaserver/lib /usr/lib/plexmediaserver/Plex\ Media\ Server' & if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
s6-setuidgid abc /bin/bash -c \
'LD_LIBRARY_PATH=/usr/lib/plexmediaserver:/usr/lib/plexmediaserver/lib /usr/lib/plexmediaserver/Plex\ Media\ Server' &
else
/bin/bash -c \
'LD_LIBRARY_PATH=/usr/lib/plexmediaserver:/usr/lib/plexmediaserver/lib /usr/lib/plexmediaserver/Plex\ Media\ Server' &
fi
PID=$! PID=$!
echo "Waiting for Plex to generate its config" echo "Waiting for Plex to generate its config"
DBNAME="/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db-wal" DBNAME="/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db-wal"

View file

@ -1,35 +0,0 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
FILES=$(find /dev/dri /dev/dvb -type c -print 2>/dev/null)
for i in ${FILES}; do
VIDEO_GID=$(stat -c '%g' "${i}")
VIDEO_UID=$(stat -c '%u' "${i}")
# check if user matches device
if id -u abc | grep -qw "${VIDEO_UID}"; then
echo "**** permissions for ${i} are good ****"
else
# check if group matches and that device has group rw
if id -G abc | grep -qw "${VIDEO_GID}" && [[ $(stat -c '%A' "${i}" | cut -b 5,6) == "rw" ]]; then
echo "**** permissions for ${i} are good ****"
# check if device needs to be added to video group
elif ! id -G abc | grep -qw "${VIDEO_GID}"; then
# check if video group needs to be created
VIDEO_NAME=$(getent group "${VIDEO_GID}" | awk -F: '{print $1}')
if [[ -z "${VIDEO_NAME}" ]]; then
VIDEO_NAME="video$(head /dev/urandom | tr -dc 'a-z0-9' | head -c4)"
groupadd "${VIDEO_NAME}"
groupmod -g "${VIDEO_GID}" "${VIDEO_NAME}"
echo "**** creating video group ${VIDEO_NAME} with id ${VIDEO_GID} ****"
fi
echo "**** adding ${i} to video group ${VIDEO_NAME} with id ${VIDEO_GID} ****"
usermod -a -G "${VIDEO_NAME}" abc
fi
# check if device has group rw
if [[ $(stat -c '%A' "${i}" | cut -b 5,6) != "rw" ]]; then
echo -e "**** The device ${i} does not have group read/write permissions, attempting to fix inside the container. ****"
chmod g+rw "${i}"
fi
fi
done

View file

@ -1 +0,0 @@
oneshot

View file

@ -1 +0,0 @@
/etc/s6-overlay/s6-rc.d/init-plex-gid-video/run

View file

@ -1,6 +1,11 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
# shellcheck shell=bash # shellcheck shell=bash
if [[ -n ${LSIO_READ_ONLY_FS} ]] || [[ -n ${LSIO_NON_ROOT_USER} ]]; then
echo "Runtime update not supported with read-only or non-root operation, skipping."
exit 0
fi
# If docker manages versioning exit # If docker manages versioning exit
if [[ -n "${VERSION}" ]] && [[ "${VERSION}" == "docker" ]]; then if [[ -n "${VERSION}" ]] && [[ "${VERSION}" == "docker" ]]; then
echo "Docker is used for versioning skip update check" echo "Docker is used for versioning skip update check"

View file

@ -0,0 +1,14 @@
#!/usr/bin/with-contenv bash
# Bring up WireGuard if not already up
if ! ip link show dev wg0 > /dev/null 2>&1; then
wg-quick up wg0
fi
# Monitor wireguard status
while true; do
if ! ip link show dev wg0 | grep -q "UP"; then
wg-quick up wg0
fi
sleep 60
done

View file

@ -0,0 +1 @@
longrun

View file

@ -1,11 +1,20 @@
#!/usr/bin/with-contenv bash #!/usr/bin/with-contenv bash
# shellcheck shell=bash # shellcheck shell=bash
# Wait for WireGuard to be up
echo "Starting Plex Media Server. . . (you can ignore the libusb_init error)" echo "Starting Plex Media Server. . . (you can ignore the libusb_init error)"
PLEX_MEDIA_SERVER_INFO_MODEL=$(uname -m) PLEX_MEDIA_SERVER_INFO_MODEL=$(uname -m)
export PLEX_MEDIA_SERVER_INFO_MODEL export PLEX_MEDIA_SERVER_INFO_MODEL
PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION=$(uname -r) PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION=$(uname -r)
export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 32400" \ if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
s6-setuidgid abc "/usr/lib/plexmediaserver/Plex Media Server" exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 32400" \
s6-setuidgid abc "/usr/lib/plexmediaserver/Plex Media Server"
else
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost 32400" \
"/usr/lib/plexmediaserver/Plex Media Server"
fi