
Plex Unlocker
يصحح Plex Media Server الذي يعمل داخل Docker — كل من الصورة الرسمية plexinc/pms-docker وصورة المجتمع lscr.io/linuxserver/plex — باستخدام نفس آلية LD_PRELOAD-عند-تنفيذ-PMS مثل تثبيت systemd الأصلي. راجع README على المستوى الأعلى والدليل الكامل docs/DOCKER.md للسبب واستكشاف الأخطاء.
من جذر المشروع:
# Official image (plexinc/pms-docker)
docker build -f docker/Dockerfile.plexinc -t plex-crack:plexinc .
# Community image (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 (no PUID/PGID; the image runs PMS as the upstream 'plex' user)
docker run -d --name plex --network=host \
-v /srv/plex/config:/config \
-v /srv/plex/data:/data \
plex-crack:plexinc
# linuxserver (honor PUID/PGID so /config and /data chown correctly on first start)
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 من ملف s6 run).
# Default container name: "plex"
./docker/plex-docker-patch.sh install
# Custom container name
./docker/plex-docker-patch.sh install my-plex
# Revert (restores the s6 run file from its .orig)
./docker/plex-docker-patch.sh uninstall my-plex
# Status
./docker/plex-docker-patch.sh status my-plex
يكتشف البرنامج النصي تلقائيًا الصورة الأساسية (plexinc vs LSIO) عن طريق قراءة محتوى ملف s6 run داخل الحاوية، لذلك يتم استخدام نفس .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 exit 127، glibc vs 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/ — افتح مشكلة مع المخرجات |
ينجح install ولكن .so ليس في /proc/$PID/maps | PMS خرج برمز 127 (فشل المحمل) | docker logs <name> | tail -50 — عادةً ما يدخل .so من glibc (أعد البناء باستخدام build.sh) |
يظهر status: PATCH IS NOT ACTIVE بعد install | ملف التشغيل لم يُعاد كتابته (مثل طبقة للقراءة فقط) أو الحاوية لم يُعاد تشغيلها | docker exec <name> cat /etc/s6-overlay/s6-rc.d/svc-plex/run — يجب أن يطبع exec .../plex-crack-wrapper.sh |
يقول uninstall: no run.orig found | تم حذف .orig، أو لم يتم عمل نسخة احتياطية لملف التشغيل (مثل تشغيل إصدار أقدم من البرنامج النصي) | استعادة يدويًا: docker cp <upstream-image>:/etc/s6-overlay/s6-rc.d/svc-plex/run <name>:/etc/s6-overlay/s6-rc.d/svc-plex/run |