
Freeloader — Updated!
Plex Unlocker
Поддержка Docker для plexmediaserver_crack
Патчит Plex Media Server, работающий в Docker — как официальный образ
plexinc/pms-docker,
так и community-образ lscr.io/linuxserver/plex —
с использованием того же механизма LD_PRELOAD-на-исполняемом-PMS, что и в нативной
установке через systemd. Смотрите README на верхнем уровне и полное руководство
docs/DOCKER.md для объяснения и устранения неполадок.
Сборка
Из корня проекта:
# Официальный образ (plexinc/pms-docker)
docker build -f docker/Dockerfile.plexinc -t plex-crack:plexinc .
# Community-образ (lscr.io/linuxserver/plex)
docker build -f docker/Dockerfile.linuxserver -t plex-crack:lsio .
Первая сборка загружает zig 0.13.0 и выбранный базовый образ Plex.
Последующие сборки переиспользуют кэшированные слои, пока не изменятся src/, third_party/ или
build.sh. Зафиксируйте базовый образ с помощью --build-arg PLEX_BASE_IMAGE=..., если
вам нужна воспроизводимость при обновлениях PMS.
Запуск
# plexinc (без PUID/PGID; образ запускает PMS от пользователя upstream 'plex')
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 корректно получали владельца при первом запуске)
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 (сохраняется копия .orig файла run из s6).
# Имя контейнера по умолчанию: "plex"
./docker/plex-docker-patch.sh install
# Пользовательское имя контейнера
./docker/plex-docker-patch.sh install my-plex
# Откат (восстанавливает файл run из s6 из его .orig)
./docker/plex-docker-patch.sh uninstall my-plex
# Статус
./docker/plex-docker-patch.sh status my-plex
Скрипт автоматически определяет базовый образ (plexinc или LSIO), читая
содержимое файла run из s6 внутри контейнера, поэтому один и тот же .so и
wrapper.sh используются в обоих случаях. Zig должен быть доступен на хосте
(скрипт вызывает build.sh); уже существующий
build/plexmediaserver_crack.so переиспользуется.
Когда что использовать
- Сборка через Dockerfile (поток
docker buildвыше) — лучше всего для повторяемых развёртываний, нескольких хостов, CI/CD, неизменяемых образов. Вы коммитите пропатченный образ и доставляете его. plex-docker-patch.sh— лучше всего для разового патча запущенного контейнера, который вы не хотите трогать. Изменяет файловую систему живого контейнера; полностью откатывается черезuninstall.
Что где находится
| Файл | Назначение |
|---|---|
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) |
По вопросам docker-compose, расхождения сигнатур, проверки с помощью
scripts/readbitset.py, удаления и устранения неполадок смотрите
../docs/DOCKER.md.
Быстрое устранение неполадок (патчер на месте)
| Симптом | Вероятная причина | Первая проверка |
|---|---|---|
install сообщает ERROR: docker not on PATH | CLI docker не установлен или пользователь не в группе docker | docker version (должен выполняться от вашего имени) |
install сообщает could not find s6 svc-plex run file | upstream-образ изменил структуру 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) |
status показывает PATCH IS NOT ACTIVE после install | Файл 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 |
Для более глубокой диагностики (выход PMS с кодом 127, ABI glibc vs musl, владелец /config
в LSIO, расхождение сигнатур при обновлениях PMS) смотрите
../docs/DOCKER.md.