Figured it out, didn't realize ffmpeg also had updated around the same time to a new major version. makemkv-oss doesn't support building against ffmpeg 8.0.
Here's my build scripts in case anyone runs into this and wants a quick fix:
Dockerfile:
Code: Select all
# This builds an image with makemkv installed
#sudo docker build /path/to/DockerfileFolder/ -f /path/to/DockerfileFolder/Dockerfile -t makemkv:latest
# Always stable-slim debian
FROM debian:stable-slim AS base
# Update, upgrade, ignore config file questions; Debian images auto-run apt-get clean
RUN \
apt-get update && \
apt-get upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
RUN \
apt-get install -y \
build-essential \
pkg-config \
libc6-dev \
libssl-dev \
libexpat1-dev \
libavcodec-dev \
libgl1-mesa-dev \
qtbase5-dev \
zlib1g-dev \
curl \
wget \
nasm \
gnupg && \
apt-get dist-clean
COPY ./makemkv_install.sh /makemkv_install.sh
RUN \
chmod +x /makemkv_install.sh && \
/makemkv_install.sh NA 7.1.1 && \
rm /makemkv_install.sh
makemkv_install.sh:
Code: Select all
#!/bin/bash
# Setup based on https://github.com/tianon/dockerfiles/blob/master/makemkv/Dockerfile
# The Expat/MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
MAKEMKV_VERSION_OVERRIDE=$1
FFMPEG_VERSION_OVERRIDE=$2 # Provide NA 1st entry (MAKEMKV_VERSION_OVERRIDE) to use just this and auto-get MAKEMKV_VERSION
INS="" # Empty insert
if [[ -z $MAKEMKV_VERSION_OVERRIDE ]] || [ "$MAKEMKV_VERSION_OVERRIDE" == "NA" ]; then
# Auto-grab latest version
MAKEMKV_VERSION=$(wget -q -O- https://www.makemkv.com/download/ | grep -o "[0-9.]*.txt" | sed 's/.txt//')
# echo -e "Downloading MakeMKV $MAKEMKV_VERSION sha, bin, and oss"
else
MAKEMKV_VERSION_CURRENT=$(wget -q -O- https://www.makemkv.com/download/ | grep -o "[0-9.]*.txt" | sed 's/.txt//')
MAKEMKV_VERSION="$MAKEMKV_VERSION_OVERRIDE"
if [ "$MAKEMKV_VERSION_CURRENT" != "$MAKEMKV_VERSION" ]; then
INS="/old" # Insert /old for a version that's not the current
fi
fi
set -ex
savedAptMark="$(apt-mark showmanual)"
#ffmpeg time
dir2return2=$(pwd)
wget -q -O- https://ffmpeg.org/ffmpeg-devel.asc | gpg --import
# gpg --batch --keyserver keyserver.ubuntu.com --recv-keys FCF986EA15E6E293A5644F10B4322F04D67658D8 #ffmpeg key
if [[ -z $FFMPEG_VERSION_OVERRIDE ]] || [ "$FFMPEG_VERSION_OVERRIDE" == "NA" ]; then
# Auto-grab latest version
ffmpeg_latest=$(wget -q -O- "https://github.com/FFmpeg/FFmpeg/tags/" | grep -Ev '\-dev' | grep -oP '/tag/n\K\d+\.\d+[\d\.]*' | sort -ruV | head -n1)
# echo -e "Downloading MakeMKV $MAKEMKV_VERSION sha, bin, and oss"
else
ffmpeg_latest="$FFMPEG_VERSION_OVERRIDE"
fi
wget -O "ffmpeg-$ffmpeg_latest.tar.xz" "https://ffmpeg.org/releases/ffmpeg-$ffmpeg_latest.tar.xz"
wget -O "ffmpeg-$ffmpeg_latest.tar.xz.asc" "https://ffmpeg.org/releases/ffmpeg-$ffmpeg_latest.tar.xz.asc"
gpg --verify ffmpeg-$ffmpeg_latest.tar.xz.asc ffmpeg-$ffmpeg_latest.tar.xz || exit 1
gpgconf --kill all
mkdir -p "ffmpeg-$ffmpeg_latest"
tar -xvf "ffmpeg-$ffmpeg_latest.tar.xz" -C "ffmpeg-$ffmpeg_latest" --strip-components=1
rm "ffmpeg-$ffmpeg_latest.tar.xz"
cd "ffmpeg-$ffmpeg_latest"
./configure --prefix=/tmp/ffmpeg --enable-static --disable-shared --enable-pic
make install
cd ..
rm -r "ffmpeg-$ffmpeg_latest"
rm "ffmpeg-$ffmpeg_latest.tar.xz.asc"
cd "$dir2return2" #like it never happened
#back to makemkv
wget -O 'sha256sums.txt.sig' "https://www.makemkv.com/download${INS}/makemkv-sha-${MAKEMKV_VERSION}.txt"
export GNUPGHOME="$(mktemp -d)"
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 2ECF23305F1FC0B32001673394E3083A18042697 #makemkv key
gpg --batch --decrypt --output sha256sums.txt sha256sums.txt.sig
gpgconf --kill all
rm -rf "$GNUPGHOME" sha256sums.txt.sig
makemkv_install_dir='/opt/makemkv'
export PREFIX='/usr'
for ball in makemkv-oss makemkv-bin; do
wget -O "$ball.tgz" "https://www.makemkv.com/download${INS}/${ball}-${MAKEMKV_VERSION}.tar.gz"
sha256="$(grep " $ball-${MAKEMKV_VERSION}[.]tar[.]gz\$" sha256sums.txt)"
sha256="${sha256%% *}"
[ -n "$sha256" ]
echo "$sha256 *$ball.tgz" | sha256sum -c -
mkdir -p "$ball"
tar -xvf "$ball.tgz" -C "$ball" --strip-components=1
rm "$ball.tgz"
cd "$ball"
if [ -f configure ]; then
./configure --prefix="$PREFIX"
else
mkdir -p tmp
touch tmp/eula_accepted
fi
if [ "$ball" = makemkv-oss ]; then # get that ffmpeg in the build
PKG_CONFIG_PATH=/tmp/ffmpeg/lib/pkgconfig ./configure
fi
make -j "$(nproc)" PREFIX="$PREFIX"
make install DESTDIR="$makemkv_install_dir" PREFIX="$PREFIX"
cd ..
rm -r "$ball"
done
rm -rf /tmp/ffmpeg # clean up ffmpeg
rm sha256sums.txt
apt-mark auto '.*' > /dev/null
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark
find /usr/local -type f -executable -o -name '*.so' -exec ldd '{}' ';' \
| awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' \
| sort -u \
| xargs -r dpkg-query --search \
| cut -d: -f1 \
| sort -u \
| xargs -r apt-mark manual
# Bonus unfindable libs https://github.com/jlesage/docker-makemkv/blob/master/src/makemkv/build.sh
mkdir -p "$makemkv_install_dir$PREFIX"/lib/qt5/plugins/platforms
cp -av /usr/plugins/platforms/libqxcb.so "$makemkv_install_dir$PREFIX"/lib/qt5/plugins/platforms/ || :
cp -av /usr/lib/x86_64-linux-gnu/libcurl.so.4* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnss_compat* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnsl*so* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnss_nis[.-]* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnss_files* "$makemkv_install_dir$PREFIX"/lib/ || :
# Now make sure the dependencies are where they need to be as well https://github.com/jlesage/docker-makemkv/blob/master/src/makemkv/build.sh
find "$makemkv_install_dir$PREFIX" -type f -executable -or -name 'lib*.so*' | while read BIN
do
RAW_DEPS="$(LD_LIBRARY_PATH="$makemkv_install_dir$PREFIX/lib" ldd "$BIN")"
echo "Dependencies for $BIN:"
echo "================================"
echo "$RAW_DEPS"
echo "================================"
if echo "$RAW_DEPS" | grep -q " not found"; then
echo "ERROR: Some libraries are missing!"
exit 1
fi
LD_LIBRARY_PATH="$makemkv_install_dir$PREFIX/lib" ldd "$BIN" | (grep " => " || true) | cut -d'>' -f2 | sed 's/^[[:space:]]*//' | cut -d'(' -f1 | while read dep
do
dep_real="$(realpath "$dep")"
dep_basename="$(basename "$dep_real")"
# Skip already-processed libraries.
[ ! -f "$makemkv_install_dir$PREFIX/lib/$dep_basename" ] || continue
echo " -> Found library: $dep"
cp "$dep_real" "$makemkv_install_dir$PREFIX/lib/"
while true; do
[ -L "$dep" ] || break;
ln -sf "$dep_basename" "$makemkv_install_dir$PREFIX"/lib/$(basename $dep)
dep="$(readlink -f "$dep")"
done
done
done