mirror of
https://github.com/linuxserver/docker-beets
synced 2025-12-13 20:02:52 +01:00
272 lines
6.1 KiB
Docker
272 lines
6.1 KiB
Docker
ARG ALPINE_VER="3.15"
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER} as fetch-stage
|
||
|
||
############## fetch stage ##############
|
||
|
||
# package versions
|
||
ARG MP3GAIN_VER="1.6.2"
|
||
ARG MP3VAL_VER="0.1.8"
|
||
|
||
# install fetch packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
bash \
|
||
curl \
|
||
git \
|
||
jq \
|
||
unzip
|
||
|
||
# set shell
|
||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||
|
||
# fetch source code
|
||
RUN \
|
||
set -ex && \
|
||
mkdir -p \
|
||
/tmp/beets-src \
|
||
/tmp/mp3gain-src \
|
||
/tmp/mp3val-src && \
|
||
if [ -z ${BEETS_VERSION+x} ] ; then \
|
||
BEETS_RAW_COMMIT=$(curl -sX GET "https://api.github.com/repos/beetbox/beets/commits/master" \
|
||
| jq -r .sha) && \
|
||
BEETS_VERSION="${BEETS_RAW_COMMIT:0:7}"; \
|
||
fi && \
|
||
curl -o \
|
||
/tmp/beets.tar.gz -sL \
|
||
"https://github.com/sampsyo/beets/archive/${BEETS_VERSION}.tar.gz" && \
|
||
curl -o \
|
||
/tmp/mp3gain.zip -sL \
|
||
"https://sourceforge.net/projects/mp3gain/files/mp3gain/${MP3GAIN_VER}/mp3gain-${MP3GAIN_VER//./_}-src.zip" && \
|
||
curl -o \
|
||
/tmp/mp3val.tar.gz -sL \
|
||
"https://downloads.sourceforge.net/mp3val/mp3val-${MP3VAL_VER}-src.tar.gz" && \
|
||
tar xf \
|
||
/tmp/beets.tar.gz -C \
|
||
/tmp/beets-src --strip-components=1 && \
|
||
unzip -q /tmp/mp3gain.zip -d /tmp/mp3gain-src && \
|
||
tar xf \
|
||
/tmp/mp3val.tar.gz -C \
|
||
/tmp/mp3val-src --strip-components=1 && \
|
||
git clone https://bitbucket.org/acoustid/chromaprint.git /tmp/chromaprint-src && \
|
||
git clone https://github.com/Holzhaus/beets-extrafiles.git /tmp/extrafiles-src
|
||
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER} as beets_build-stage
|
||
|
||
############## beets build stage ##############
|
||
|
||
# copy artifacts from fetch stage
|
||
COPY --from=fetch-stage /tmp/beets-src /tmp/beets-src
|
||
COPY --from=fetch-stage /tmp/extrafiles-src /tmp/extrafiles-src
|
||
|
||
# set workdir for beets install
|
||
WORKDIR /tmp/beets-src
|
||
|
||
# install build packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
py3-setuptools \
|
||
python3-dev
|
||
|
||
# build beets package
|
||
RUN \
|
||
set -ex && \
|
||
python3 setup.py build && \
|
||
python3 setup.py install --prefix=/usr --root=/build/beets
|
||
|
||
# set workdir for extrafiles install
|
||
WORKDIR /tmp/extrafiles-src
|
||
|
||
# build extrafiles package
|
||
RUN \
|
||
set -ex && \
|
||
python3 setup.py install --prefix=/usr --root=/build/beets
|
||
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER} as mp3gain_build-stage
|
||
|
||
############## mp3gain build stage ##############
|
||
|
||
# copy artifacts from fetch stage
|
||
COPY --from=fetch-stage /tmp/mp3gain-src /tmp/mp3gain-src
|
||
|
||
# set workdir
|
||
WORKDIR /tmp/mp3gain-src
|
||
|
||
# install build packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
g++ \
|
||
make \
|
||
mpg123-dev
|
||
|
||
# build package
|
||
RUN \
|
||
set -ex && \
|
||
mkdir -p \
|
||
/build/mp3gain/usr/bin && \
|
||
sed -i "s#/usr/local/bin#/build/mp3gain/usr/bin#g" Makefile && \
|
||
make && \
|
||
make install
|
||
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER} as mp3val_build-stage
|
||
|
||
############## mp3val build stage ##############
|
||
|
||
# copy artifacts from fetch stage
|
||
COPY --from=fetch-stage /tmp/mp3val-src /tmp/mp3val-src
|
||
|
||
# set workdir
|
||
WORKDIR /tmp/mp3val-src
|
||
|
||
# install build packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
g++ \
|
||
make
|
||
|
||
# build package
|
||
RUN \
|
||
set -ex && \
|
||
mkdir -p \
|
||
/build/mp3val/usr/bin && \
|
||
make -f Makefile.linux && \
|
||
cp -p mp3val /build/mp3val/usr/bin
|
||
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER} as chromaprint_build-stage
|
||
|
||
############## chromaprint build stage ##############
|
||
|
||
# copy artifacts from fetch stage
|
||
COPY --from=fetch-stage /tmp/chromaprint-src /tmp/chromaprint-src
|
||
|
||
# set workdir
|
||
WORKDIR /tmp/chromaprint-src
|
||
|
||
# install build packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
cmake \
|
||
ffmpeg-dev \
|
||
fftw-dev \
|
||
g++ \
|
||
make
|
||
|
||
# build package
|
||
RUN \
|
||
set -ex && \
|
||
cmake \
|
||
-DBUILD_TOOLS=ON \
|
||
-DCMAKE_BUILD_TYPE=Release \
|
||
-DCMAKE_INSTALL_PREFIX:PATH=/usr && \
|
||
make && \
|
||
make DESTDIR=/build/chromaprint install
|
||
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER} as pip-stage
|
||
|
||
############## pip packages install stage ##############
|
||
|
||
# install build packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
g++ \
|
||
make \
|
||
py3-pip \
|
||
python3-dev
|
||
|
||
# install pip packages
|
||
RUN \
|
||
set -ex && \
|
||
python3 -m pip install --upgrade pip && \
|
||
pip3 install --no-cache-dir -U --find-links https://wheel-index.linuxserver.io/alpine/ \
|
||
confuse \
|
||
discogs-client \
|
||
enum34 \
|
||
mediafile \
|
||
mutagen \
|
||
pyacoustid \
|
||
pyyaml \
|
||
unidecode
|
||
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER} as strip-stage
|
||
|
||
############## strip packages stage ##############
|
||
|
||
# copy artifacts build stages
|
||
COPY --from=beets_build-stage /build/beets/usr/ /build/all//usr/
|
||
COPY --from=chromaprint_build-stage /build/chromaprint/usr/ /build/all//usr/
|
||
COPY --from=mp3gain_build-stage /build/mp3gain/usr/ /build/all//usr/
|
||
COPY --from=mp3val_build-stage /build/mp3val/usr/ /build/all//usr/
|
||
COPY --from=pip-stage /usr/lib/python3.9/site-packages /build/all/usr/lib/python3.9/site-packages
|
||
|
||
# install strip packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
bash \
|
||
binutils
|
||
|
||
# set shell
|
||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||
|
||
# remove unneeded files
|
||
RUN \
|
||
set -ex && \
|
||
for cleanfiles in *.la *.pyc *.pyo; \
|
||
do \
|
||
find /build/all/ -iname "${cleanfiles}" -exec rm -vf '{}' + \
|
||
; done
|
||
|
||
FROM ghcr.io/linuxserver/baseimage-alpine:${ALPINE_VER}
|
||
|
||
############## runtime stage ##############
|
||
|
||
# set version label
|
||
ARG BUILD_DATE
|
||
ARG VERSION
|
||
ARG BEETS_VERSION
|
||
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
|
||
LABEL maintainer="sparklyballs"
|
||
|
||
# copy artifacts strip stage
|
||
COPY --from=strip-stage /build/all/usr/ /usr/
|
||
|
||
# install runtime packages
|
||
RUN \
|
||
apk add --no-cache \
|
||
curl \
|
||
ffmpeg \
|
||
fftw \
|
||
flac \
|
||
gst-plugins-good \
|
||
gstreamer \
|
||
mpg123 \
|
||
nano \
|
||
jq \
|
||
lame \
|
||
nano \
|
||
py3-beautifulsoup4 \
|
||
py3-flask \
|
||
py3-gobject3 \
|
||
py3-jellyfish \
|
||
py3-munkres \
|
||
py3-musicbrainzngs \
|
||
py3-pillow \
|
||
py3-pip \
|
||
py3-pylast \
|
||
py3-requests \
|
||
py3-setuptools \
|
||
py3-six \
|
||
python3 \
|
||
sqlite-libs \
|
||
tar \
|
||
wget
|
||
|
||
# environment settings
|
||
ENV BEETSDIR="/config" \
|
||
EDITOR="nano" \
|
||
HOME="/config"
|
||
|
||
# copy local files
|
||
COPY root/ /
|
||
|
||
# ports and volumes
|
||
EXPOSE 8337
|
||
VOLUME /config
|