
Plexアンロッカー
Dockerで動作するPlex Media Server(公式のplexinc/pms-dockerイメージとコミュニティのlscr.io/linuxserver/plexイメージの両方)を、ネイティブのsystemdインストールと同じLD_PRELOAD-on-the-PMS-execメカニズムを使用してパッチします。理由とトラブルシューティングについては、トップレベルの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が変更されるまでキャッシュされたレイヤーを再利用します。PMSアップデート全体で再現性が必要な場合は、--build-arg PLEX_BASE_IMAGE=...でベースを固定してください。
# plexinc (PUID/PGIDなし; イメージはPMSをアップストリームの'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の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 vs 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を参照してください。
| File | Purpose |
|---|
Dockerfile.plexinc | マルチステージビルド → パッチ済みplexinc/pms-docker |
Dockerfile.linuxserver | マルチステージビルド → パッチ済みlscr.io/linuxserver/plex |
wrapper.sh | コンテナ内ランチャー(環境変数 → LD_PRELOADを最後に → execでPMS) |
plex-docker-patch.sh | 実行中のコンテナに対するその場パッチャー(install / uninstall / status) |
| 症状 | 考えられる原因 | 最初に確認すべきこと |
|---|
install says ERROR: docker not on PATH | docker CLIがインストールされていないか、ユーザーがdockerグループに属していない | docker version(自分で実行できること) |
install says 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 succeeds but .so is NOT in /proc/$PID/maps | PMSが127で終了(ローダー失敗) | docker logs <name> | tail -50 — 通常はglibcの.soが混入(build.shで再ビルド) |
status shows PATCH IS NOT ACTIVE after install | runファイルが書き換えられなかった(例:読み取り専用レイヤー)か、コンテナが再起動されなかった | docker exec <name> cat /etc/s6-overlay/s6-rc.d/svc-plex/run — exec .../plex-crack-wrapper.shと表示されるべき |
uninstall says 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 |