# Worker-Image: MakeMKV (verlustfrei, Etappe 10) + abcde/cdparanoia (CD→FLAC). # # Multi-Stage: makemkv-oss wird aus Quellen gebaut (GPL-Teil), makemkv-bin ist # das proprietäre Binärpaket (EULA wird per tmp/eula_accepted akzeptiert — # Standard-Mechanismus des Makefiles für nicht-interaktive Builds). # Beide Stages sind auf bookworm gepinnt, damit die libavcodec-Version passt. # # Vorher stand hier `makepkg` (ein Arch-Linux-Werkzeug, existiert in Debian # nicht) — das Image war seit dem 23.07. gar nicht mehr baubar. Und es fehlte # schlicht JEDES Ripping-Werkzeug: weder HandBrake noch abcde noch MakeMKV # waren installiert. FROM python:3.12-slim-bookworm AS makemkv-build # Zurück auf die AKTUELLE Version (24.07.2026): 1.17.7 war wegen des # 1.18er-Laufwerks-Scan-Hängers (Forum t=38128) und der Flash-Fähigkeit # gepinnt. Beides erledigt: der Scan wird überall mit --noscan umgangen # (info-Lauf mit 1.18.4 auf der BU40N sauber durchgelaufen, 24.07.), und # das Laufwerk ist geflasht (LibreDrive v06.3 bestätigt). Die AKTUELLE # Version zählt, weil sie die neueste AACS-Schlüssel-Datenbank mitbringt — # 1.17.7 kannte z. B. den Key der Summer-Wars-UHD (MKB v82) nicht. # MAKEMKV_URL_BASE ist übersteuerbar (Build-Arg): /download hat nur die # aktuelle Version, /download/old die älteren; bei Cloudflare-525 einen # Wayback-Snapshot eintragen. ARG MAKEMKV_VERSION=1.18.4 ARG MAKEMKV_URL_BASE=https://www.makemkv.com/download RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ pkg-config \ ca-certificates \ curl \ libssl-dev \ libexpat1-dev \ libavcodec-dev \ zlib1g-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /build RUN curl -fsSL -o oss.tar.gz "${MAKEMKV_URL_BASE}/makemkv-oss-${MAKEMKV_VERSION}.tar.gz" \ && curl -fsSL -o bin.tar.gz "${MAKEMKV_URL_BASE}/makemkv-bin-${MAKEMKV_VERSION}.tar.gz" \ && sha256sum oss.tar.gz bin.tar.gz \ && tar xzf oss.tar.gz \ && tar xzf bin.tar.gz RUN cd "makemkv-oss-${MAKEMKV_VERSION}" \ && ./configure --disable-gui --prefix=/usr/local \ && make -j"$(nproc)" \ && make install # PREFIX explizit: makemkv-bin installiert sonst nach /usr — und das COPY der # Final-Stage nimmt nur /usr/local mit (Deploy 23.07.: makemkvcon fehlte im Image). # Das abschließende test -x lässt den Build laut scheitern statt still lückenhaft. RUN cd "makemkv-bin-${MAKEMKV_VERSION}" \ && mkdir -p tmp \ && touch tmp/eula_accepted \ && make PREFIX=/usr/local \ && make install PREFIX=/usr/local \ && test -x /usr/local/bin/makemkvcon FROM python:3.12-slim-bookworm # handbrake-cli: Kompressions-Stufe NACH dem verlustfreien MakeMKV-Rip # (Commander-Entscheid 23.07.: 40-GB-Rohdateien sind nicht arbeitsfähig). RUN apt-get update && apt-get install -y --no-install-recommends \ libssl3 \ libexpat1 \ zlib1g \ libavcodec59 \ abcde \ cdparanoia \ cd-discid \ flac \ handbrake-cli \ && rm -rf /var/lib/apt/lists/* COPY --from=makemkv-build /usr/local /usr/local RUN ldconfig # Version fürs UI sichtbar machen (Einstellungen → System): makemkvcon hat # keinen --version-Schalter, also kommt die Wahrheit aus dem Build selbst. ARG MAKEMKV_VERSION=1.18.4 ENV MAKEMKV_VERSION=${MAKEMKV_VERSION} WORKDIR /app COPY docker/worker/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY docker/worker/ . RUN chmod +x /app/entrypoint.sh ENTRYPOINT ["/app/entrypoint.sh"] # Der lokale Worker bedient BEIDE Queues (rip + transcode). Ein optionaler # Remote-GPU-Worker startet dasselbe Image nur mit "-Q transcode". CMD ["celery", "-A", "celery_app", "worker", "--loglevel=info", "-Q", "celery,transcode"]