Plex Unlocker
对运行在 Docker 中的 Plex Media Server 进行补丁——包括官方
plexinc/pms-docker 镜像
和社区 lscr.io/linuxserver/plex
镜像——使用与原生 systemd 安装相同的 LD_PRELOAD-on-the-PMS-exec 机制。
有关原因和故障排除,请参阅顶层 README 和完整指南
docs/DOCKER.md。
从项目根目录执行:
# 官方镜像 (plexinc/pms-docker)
docker build -f docker/Dockerfile.plexinc -t plex-crack:plexinc .
# 社区镜像 (lscr.io/linuxserver/plex)
docker build -f docker/Dockerfile.linuxserver -t plex-crack:lsio .
首次构建会下载 zig 0.13.0 和所选 Plex 基础镜像。
后续构建会复用缓存层,直到 src/、third_party/ 或
build.sh 发生变化。如果需要跨 PMS 更新的可重现性,
可使用 --build-arg PLEX_BASE_IMAGE=... 固定基础镜像。
# plexinc(无 PUID/PGID;镜像以上游 'plex' 用户身份运行 PMS)
docker run -d --name plex --network=host \
-v /srv/plex/config:/config \
-v /srv/plex/data:/data \
plex-crack:plexinc
# linuxserver(遵循 PUID/PGID,以便首次启动时 /config 和 /data 正确 chown)
docker run -d --name plex --network=host \
-e PUID=$(id -u) -e PGID=$(id -g) \
-e TZ=America/Los_Angeles \
-v /srv/plex/config:/config \
-v /srv/plex/data:/data \
plex-crack:lsio
然后:
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:32400/identity # -> 200
如果您已有正在运行的 Plex 容器,且不想重新构建镜像或重建容器,
plex-docker-patch.sh 可将相同的补丁应用到运行中的容器——无需
docker build,原始镜像不受影响,原始容器及其卷均保留。可通过
uninstall 还原(s6 run 文件的 .orig 副本会被保留)。
# 默认容器名称:"plex"
./docker/plex-docker-patch.sh install
# 自定义容器名称
./docker/plex-docker-patch.sh install my-plex
# 还原(从 .orig 恢复 s6 run 文件)
./docker/plex-docker-patch.sh uninstall my-plex
# 状态
./docker/plex-docker-patch.sh status my-plex
该脚本通过读取容器内 s6 run 文件内容自动检测基础镜像
(plexinc 与 LSIO),因此两种情况下使用相同的 .so 和
wrapper.sh。主机上必须安装 Zig(脚本会调用 build.sh);
已有的 build/plexmediaserver_crack.so 会被复用。
docker build 流程)——最适合
重复部署、多主机、CI/CD、不可变镜像。您提交一个打过补丁的
镜像并发布它。plex-docker-patch.sh——最适合对不想触碰的运行中容器
进行一次性补丁。修改运行中容器的文件系统;可通过 uninstall
完全还原。有关 docker-compose、签名漂移、使用 scripts/readbitset.py 验证、
卸载和故障排除,请参阅 ../docs/DOCKER.md。
有关更深入的诊断(PMS 退出 127、glibc 与 musl ABI、LSIO /config
所有权、PMS 更新时的签名漂移),请参阅
../docs/DOCKER.md。
| 文件 | 用途 |
|---|
Dockerfile.plexinc | 多阶段构建 → 打过补丁的 plexinc/pms-docker |
Dockerfile.linuxserver | 多阶段构建 → 打过补丁的 lscr.io/linuxserver/plex |
wrapper.sh | 容器内启动器(env → LD_PRELOAD 最后 → exec PMS) |
plex-docker-patch.sh | 运行中容器的就地补丁工具(install / uninstall / status) |
| 症状 | 可能原因 | 首先检查 |
|---|
install 提示 ERROR: docker not on PATH | 未安装 docker CLI 或用户不在 docker 组中 | docker version(必须以您的身份运行) |
install 提示 could not find s6 svc-plex run file | 上游镜像更改了其 s6 布局 | docker exec <name> ls -la /etc/s6-overlay/s6-rc.d/svc-plex/ /etc/services.d/plex/ — 附上输出提交 issue |
install 成功但 .so is NOT in /proc/$PID/maps | PMS 以 127 退出(加载器失败) | docker logs <name> | tail -50 — 通常是 glibc .so 混入(使用 build.sh 重新构建) |
install 后 status 显示 PATCH IS NOT ACTIVE | run 文件未被重写(例如只读层)或容器未重启 | docker exec <name> cat /etc/s6-overlay/s6-rc.d/svc-plex/run — 应输出 exec .../plex-crack-wrapper.sh |
uninstall 提示 no run.orig found | .orig 被删除,或 run 文件从未被备份(例如您运行了旧版脚本) | 手动恢复:docker cp <upstream-image>:/etc/s6-overlay/s6-rc.d/svc-plex/run <name>:/etc/s6-overlay/s6-rc.d/svc-plex/run |