mirror of
https://github.com/linuxserver/docker-beets
synced 2026-01-07 16:25:28 +01:00
Make consistent with master
This commit is contained in:
parent
4b5efe5a9e
commit
03018d7d9a
5 changed files with 282 additions and 624 deletions
294
Dockerfile
294
Dockerfile
|
|
@ -1,226 +1,112 @@
|
|||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG ALPINE_VER="3.17"
|
||||
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 \
|
||||
git
|
||||
|
||||
# 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://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 \
|
||||
build-base \
|
||||
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 \
|
||||
build-base
|
||||
|
||||
# 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 pip-stage
|
||||
|
||||
############## pip packages install stage ##############
|
||||
|
||||
# install build packages
|
||||
RUN \
|
||||
apk add --no-cache \
|
||||
build-base \
|
||||
cargo \
|
||||
python3-dev
|
||||
|
||||
# install pip packages
|
||||
RUN \
|
||||
set -ex && \
|
||||
python3 -m ensurepip && \
|
||||
pip3 install -U --no-cache-dir \
|
||||
pip \
|
||||
wheel && \
|
||||
pip3 install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.17/ \
|
||||
beetcamp \
|
||||
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=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.10/site-packages /build/all/usr/lib/python3.10/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 ##############
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:3.17
|
||||
|
||||
# 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"
|
||||
LABEL maintainer="aptalca"
|
||||
|
||||
# copy artifacts strip stage
|
||||
COPY --from=strip-stage /build/all/usr/ /usr/
|
||||
|
||||
# install runtime packages
|
||||
RUN \
|
||||
apk add --no-cache \
|
||||
echo "**** install build packages ****" && \
|
||||
apk add --no-cache --virtual=build-dependencies --upgrade \
|
||||
build-base \
|
||||
cairo-dev \
|
||||
cargo \
|
||||
cmake \
|
||||
ffmpeg-dev \
|
||||
fftw-dev \
|
||||
git \
|
||||
gobject-introspection-dev \
|
||||
jpeg-dev \
|
||||
libpng-dev \
|
||||
mpg123-dev \
|
||||
openjpeg-dev \
|
||||
python3-dev && \
|
||||
echo "**** install runtime packages ****" && \
|
||||
apk add --no-cache --upgrade \
|
||||
chromaprint \
|
||||
expat \
|
||||
ffmpeg \
|
||||
fftw \
|
||||
flac \
|
||||
gdbm \
|
||||
gst-plugins-good \
|
||||
gstreamer \
|
||||
jpeg \
|
||||
lame \
|
||||
libffi \
|
||||
libpng \
|
||||
mpg123 \
|
||||
nano \
|
||||
lame \
|
||||
py3-beautifulsoup4 \
|
||||
py3-flask \
|
||||
py3-gobject3 \
|
||||
py3-jellyfish \
|
||||
py3-munkres \
|
||||
py3-musicbrainzngs \
|
||||
py3-pillow \
|
||||
py3-pylast \
|
||||
py3-requests \
|
||||
py3-setuptools \
|
||||
py3-six \
|
||||
openjpeg \
|
||||
python3 \
|
||||
sqlite-libs
|
||||
sqlite-libs && \
|
||||
echo "**** install beets ****" && \
|
||||
mkdir -p /tmp/beets && \
|
||||
if [ -z ${BEETS_VERSION+x} ] ; then \
|
||||
BEETS_VERSION=$(curl -sX GET "https://api.github.com/repos/beetbox/beets/commits/master" \
|
||||
| jq -r .sha); \
|
||||
fi && \
|
||||
curl -o \
|
||||
/tmp/beets.tar.gz -sL \
|
||||
"https://github.com/beetbox/beets/archive/${BEETS_VERSION}.tar.gz" && \
|
||||
tar xf \
|
||||
/tmp/beets.tar.gz -C \
|
||||
/tmp/beets --strip-components=1 && \
|
||||
echo "**** compile mp3gain ****" && \
|
||||
mkdir -p \
|
||||
/tmp/mp3gain-src && \
|
||||
curl -o \
|
||||
/tmp/mp3gain-src/mp3gain.zip -sL \
|
||||
https://sourceforge.net/projects/mp3gain/files/mp3gain/1.6.2/mp3gain-1_6_2-src.zip && \
|
||||
cd /tmp/mp3gain-src && \
|
||||
unzip -qq /tmp/mp3gain-src/mp3gain.zip && \
|
||||
sed -i "s#/usr/local/bin#/usr/bin#g" /tmp/mp3gain-src/Makefile && \
|
||||
make && \
|
||||
make install && \
|
||||
echo "**** compile mp3val ****" && \
|
||||
mkdir -p \
|
||||
/tmp/mp3val-src && \
|
||||
curl -o \
|
||||
/tmp/mp3val-src/mp3val.tar.gz -sL \
|
||||
https://downloads.sourceforge.net/mp3val/mp3val-0.1.8-src.tar.gz && \
|
||||
cd /tmp/mp3val-src && \
|
||||
tar xzf /tmp/mp3val-src/mp3val.tar.gz --strip 1 && \
|
||||
make -f Makefile.linux && \
|
||||
cp -p mp3val /usr/bin && \
|
||||
echo "**** install pip ****" && \
|
||||
python3 -m ensurepip && \
|
||||
pip3 install -U --no-cache-dir \
|
||||
pip \
|
||||
setuptools \
|
||||
wheel && \
|
||||
echo "**** install beets ****" && \
|
||||
cd /tmp/beets && \
|
||||
python3 setup.py build && \
|
||||
python3 setup.py install --prefix=/usr --root=/ && \
|
||||
echo "**** install pip packages ****" && \
|
||||
pip3 install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.17/ \
|
||||
beautifulsoup4 \
|
||||
beets-extrafiles \
|
||||
beetcamp \
|
||||
discogs-client \
|
||||
flask \
|
||||
PyGObject \
|
||||
pillow \
|
||||
pyacoustid \
|
||||
pylast \
|
||||
requests \
|
||||
unidecode && \
|
||||
echo "**** cleanup ****" && \
|
||||
apk del --purge \
|
||||
build-dependencies && \
|
||||
rm -rf \
|
||||
/tmp/* \
|
||||
$HOME/.cache \
|
||||
$HOME/.cargo
|
||||
|
||||
# environment settings
|
||||
ENV BEETSDIR="/config" \
|
||||
|
|
|
|||
|
|
@ -1,226 +1,112 @@
|
|||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG ALPINE_VER="3.17"
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-${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 \
|
||||
git
|
||||
|
||||
# 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://github.com/Holzhaus/beets-extrafiles.git /tmp/extrafiles-src
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-${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:arm64v8-${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 \
|
||||
build-base \
|
||||
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:arm64v8-${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 \
|
||||
build-base
|
||||
|
||||
# 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:arm64v8-${ALPINE_VER} as pip-stage
|
||||
|
||||
############## pip packages install stage ##############
|
||||
|
||||
# install build packages
|
||||
RUN \
|
||||
apk add --no-cache \
|
||||
build-base \
|
||||
cargo \
|
||||
python3-dev
|
||||
|
||||
# install pip packages
|
||||
RUN \
|
||||
set -ex && \
|
||||
python3 -m ensurepip && \
|
||||
pip3 install -U --no-cache-dir \
|
||||
pip \
|
||||
wheel && \
|
||||
pip3 install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.17/ \
|
||||
beetcamp \
|
||||
confuse \
|
||||
discogs-client \
|
||||
enum34 \
|
||||
mediafile \
|
||||
mutagen \
|
||||
pyacoustid \
|
||||
pyyaml \
|
||||
unidecode
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-${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=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.10/site-packages /build/all/usr/lib/python3.10/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:arm64v8-${ALPINE_VER}
|
||||
|
||||
############## runtime stage ##############
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.17
|
||||
|
||||
# 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"
|
||||
LABEL maintainer="aptalca"
|
||||
|
||||
# copy artifacts strip stage
|
||||
COPY --from=strip-stage /build/all/usr/ /usr/
|
||||
|
||||
# install runtime packages
|
||||
RUN \
|
||||
apk add --no-cache \
|
||||
echo "**** install build packages ****" && \
|
||||
apk add --no-cache --virtual=build-dependencies --upgrade \
|
||||
build-base \
|
||||
cairo-dev \
|
||||
cargo \
|
||||
cmake \
|
||||
ffmpeg-dev \
|
||||
fftw-dev \
|
||||
git \
|
||||
gobject-introspection-dev \
|
||||
jpeg-dev \
|
||||
libpng-dev \
|
||||
mpg123-dev \
|
||||
openjpeg-dev \
|
||||
python3-dev && \
|
||||
echo "**** install runtime packages ****" && \
|
||||
apk add --no-cache --upgrade \
|
||||
chromaprint \
|
||||
expat \
|
||||
ffmpeg \
|
||||
fftw \
|
||||
flac \
|
||||
gdbm \
|
||||
gst-plugins-good \
|
||||
gstreamer \
|
||||
jpeg \
|
||||
lame \
|
||||
libffi \
|
||||
libpng \
|
||||
mpg123 \
|
||||
nano \
|
||||
lame \
|
||||
nano \
|
||||
py3-beautifulsoup4 \
|
||||
py3-flask \
|
||||
py3-gobject3 \
|
||||
py3-jellyfish \
|
||||
py3-munkres \
|
||||
py3-musicbrainzngs \
|
||||
py3-pillow \
|
||||
py3-pylast \
|
||||
py3-requests \
|
||||
py3-setuptools \
|
||||
py3-six \
|
||||
openjpeg \
|
||||
python3 \
|
||||
sqlite-libs
|
||||
sqlite-libs && \
|
||||
echo "**** install beets ****" && \
|
||||
mkdir -p /tmp/beets && \
|
||||
if [ -z ${BEETS_VERSION+x} ] ; then \
|
||||
BEETS_VERSION=$(curl -sX GET "https://api.github.com/repos/beetbox/beets/commits/master" \
|
||||
| jq -r .sha); \
|
||||
fi && \
|
||||
curl -o \
|
||||
/tmp/beets.tar.gz -sL \
|
||||
"https://github.com/beetbox/beets/archive/${BEETS_VERSION}.tar.gz" && \
|
||||
tar xf \
|
||||
/tmp/beets.tar.gz -C \
|
||||
/tmp/beets --strip-components=1 && \
|
||||
echo "**** compile mp3gain ****" && \
|
||||
mkdir -p \
|
||||
/tmp/mp3gain-src && \
|
||||
curl -o \
|
||||
/tmp/mp3gain-src/mp3gain.zip -sL \
|
||||
https://sourceforge.net/projects/mp3gain/files/mp3gain/1.6.2/mp3gain-1_6_2-src.zip && \
|
||||
cd /tmp/mp3gain-src && \
|
||||
unzip -qq /tmp/mp3gain-src/mp3gain.zip && \
|
||||
sed -i "s#/usr/local/bin#/usr/bin#g" /tmp/mp3gain-src/Makefile && \
|
||||
make && \
|
||||
make install && \
|
||||
echo "**** compile mp3val ****" && \
|
||||
mkdir -p \
|
||||
/tmp/mp3val-src && \
|
||||
curl -o \
|
||||
/tmp/mp3val-src/mp3val.tar.gz -sL \
|
||||
https://downloads.sourceforge.net/mp3val/mp3val-0.1.8-src.tar.gz && \
|
||||
cd /tmp/mp3val-src && \
|
||||
tar xzf /tmp/mp3val-src/mp3val.tar.gz --strip 1 && \
|
||||
make -f Makefile.linux && \
|
||||
cp -p mp3val /usr/bin && \
|
||||
echo "**** install pip ****" && \
|
||||
python3 -m ensurepip && \
|
||||
pip3 install -U --no-cache-dir \
|
||||
pip \
|
||||
setuptools \
|
||||
wheel && \
|
||||
echo "**** install beets ****" && \
|
||||
cd /tmp/beets && \
|
||||
python3 setup.py build && \
|
||||
python3 setup.py install --prefix=/usr --root=/ && \
|
||||
echo "**** install pip packages ****" && \
|
||||
pip3 install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.17/ \
|
||||
beautifulsoup4 \
|
||||
beets-extrafiles \
|
||||
beetcamp \
|
||||
discogs-client \
|
||||
flask \
|
||||
PyGObject \
|
||||
pillow \
|
||||
pyacoustid \
|
||||
pylast \
|
||||
requests \
|
||||
unidecode && \
|
||||
echo "**** cleanup ****" && \
|
||||
apk del --purge \
|
||||
build-dependencies && \
|
||||
rm -rf \
|
||||
/tmp/* \
|
||||
$HOME/.cache \
|
||||
$HOME/.cargo
|
||||
|
||||
# environment settings
|
||||
ENV BEETSDIR="/config" \
|
||||
|
|
|
|||
296
Dockerfile.armhf
296
Dockerfile.armhf
|
|
@ -1,226 +1,112 @@
|
|||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG ALPINE_VER="3.17"
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-${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 \
|
||||
git
|
||||
|
||||
# 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://github.com/Holzhaus/beets-extrafiles.git /tmp/extrafiles-src
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-${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:arm32v7-${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 \
|
||||
build-base \
|
||||
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:arm32v7-${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 \
|
||||
build-base
|
||||
|
||||
# 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:arm32v7-${ALPINE_VER} as pip-stage
|
||||
|
||||
############## pip packages install stage ##############
|
||||
|
||||
# install build packages
|
||||
RUN \
|
||||
apk add --no-cache \
|
||||
build-base \
|
||||
cargo \
|
||||
python3-dev
|
||||
|
||||
# install pip packages
|
||||
RUN \
|
||||
set -ex && \
|
||||
python3 -m ensurepip && \
|
||||
pip3 install -U --no-cache-dir \
|
||||
pip \
|
||||
wheel && \
|
||||
pip3 install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.17/ \
|
||||
beetcamp \
|
||||
confuse \
|
||||
discogs-client \
|
||||
enum34 \
|
||||
mediafile \
|
||||
mutagen \
|
||||
pyacoustid \
|
||||
pyyaml \
|
||||
unidecode
|
||||
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-${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=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.10/site-packages /build/all/usr/lib/python3.10/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:arm32v7-${ALPINE_VER}
|
||||
|
||||
############## runtime stage ##############
|
||||
FROM ghcr.io/linuxserver/baseimage-alpine:arm32v7-3.17
|
||||
|
||||
# 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"
|
||||
LABEL maintainer="aptalca"
|
||||
|
||||
# copy artifacts strip stage
|
||||
COPY --from=strip-stage /build/all/usr/ /usr/
|
||||
|
||||
# install runtime packages
|
||||
RUN \
|
||||
apk add --no-cache \
|
||||
echo "**** install build packages ****" && \
|
||||
apk add --no-cache --virtual=build-dependencies --upgrade \
|
||||
build-base \
|
||||
cairo-dev \
|
||||
cargo \
|
||||
cmake \
|
||||
ffmpeg-dev \
|
||||
fftw-dev \
|
||||
git \
|
||||
gobject-introspection-dev \
|
||||
jpeg-dev \
|
||||
libpng-dev \
|
||||
mpg123-dev \
|
||||
openjpeg-dev \
|
||||
python3-dev && \
|
||||
echo "**** install runtime packages ****" && \
|
||||
apk add --no-cache --upgrade \
|
||||
chromaprint \
|
||||
expat \
|
||||
ffmpeg \
|
||||
fftw \
|
||||
flac \
|
||||
gdbm \
|
||||
gst-plugins-good \
|
||||
gstreamer \
|
||||
jpeg \
|
||||
lame \
|
||||
libffi \
|
||||
libpng \
|
||||
mpg123 \
|
||||
nano \
|
||||
lame \
|
||||
nano \
|
||||
py3-beautifulsoup4 \
|
||||
py3-flask \
|
||||
py3-gobject3 \
|
||||
py3-jellyfish \
|
||||
py3-munkres \
|
||||
py3-musicbrainzngs \
|
||||
py3-pillow \
|
||||
py3-pylast \
|
||||
py3-requests \
|
||||
py3-setuptools \
|
||||
py3-six \
|
||||
openjpeg \
|
||||
python3 \
|
||||
sqlite-libs
|
||||
sqlite-libs && \
|
||||
echo "**** install beets ****" && \
|
||||
mkdir -p /tmp/beets && \
|
||||
if [ -z ${BEETS_VERSION+x} ] ; then \
|
||||
BEETS_VERSION=$(curl -sX GET "https://api.github.com/repos/beetbox/beets/commits/master" \
|
||||
| jq -r .sha); \
|
||||
fi && \
|
||||
curl -o \
|
||||
/tmp/beets.tar.gz -sL \
|
||||
"https://github.com/beetbox/beets/archive/${BEETS_VERSION}.tar.gz" && \
|
||||
tar xf \
|
||||
/tmp/beets.tar.gz -C \
|
||||
/tmp/beets --strip-components=1 && \
|
||||
echo "**** compile mp3gain ****" && \
|
||||
mkdir -p \
|
||||
/tmp/mp3gain-src && \
|
||||
curl -o \
|
||||
/tmp/mp3gain-src/mp3gain.zip -sL \
|
||||
https://sourceforge.net/projects/mp3gain/files/mp3gain/1.6.2/mp3gain-1_6_2-src.zip && \
|
||||
cd /tmp/mp3gain-src && \
|
||||
unzip -qq /tmp/mp3gain-src/mp3gain.zip && \
|
||||
sed -i "s#/usr/local/bin#/usr/bin#g" /tmp/mp3gain-src/Makefile && \
|
||||
make && \
|
||||
make install && \
|
||||
echo "**** compile mp3val ****" && \
|
||||
mkdir -p \
|
||||
/tmp/mp3val-src && \
|
||||
curl -o \
|
||||
/tmp/mp3val-src/mp3val.tar.gz -sL \
|
||||
https://downloads.sourceforge.net/mp3val/mp3val-0.1.8-src.tar.gz && \
|
||||
cd /tmp/mp3val-src && \
|
||||
tar xzf /tmp/mp3val-src/mp3val.tar.gz --strip 1 && \
|
||||
make -f Makefile.linux && \
|
||||
cp -p mp3val /usr/bin && \
|
||||
echo "**** install pip ****" && \
|
||||
python3 -m ensurepip && \
|
||||
pip3 install -U --no-cache-dir \
|
||||
pip \
|
||||
setuptools \
|
||||
wheel && \
|
||||
echo "**** install beets ****" && \
|
||||
cd /tmp/beets && \
|
||||
python3 setup.py build && \
|
||||
python3 setup.py install --prefix=/usr --root=/ && \
|
||||
echo "**** install pip packages ****" && \
|
||||
pip3 install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/alpine-3.17/ \
|
||||
beautifulsoup4 \
|
||||
beets-extrafiles \
|
||||
beetcamp \
|
||||
discogs-client \
|
||||
flask \
|
||||
PyGObject \
|
||||
pillow \
|
||||
pyacoustid \
|
||||
pylast \
|
||||
requests \
|
||||
unidecode && \
|
||||
echo "**** cleanup ****" && \
|
||||
apk del --purge \
|
||||
build-dependencies && \
|
||||
rm -rf \
|
||||
/tmp/* \
|
||||
$HOME/.cache \
|
||||
$HOME/.cargo
|
||||
|
||||
# environment settings
|
||||
ENV BEETSDIR="/config" \
|
||||
|
|
|
|||
14
README.md
14
README.md
|
|
@ -76,9 +76,9 @@ services:
|
|||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
volumes:
|
||||
- </path/to/appdata/config>:/config
|
||||
- </path/to/music/library>:/music
|
||||
- </path/to/ingest>:/downloads
|
||||
- /path/to/appdata/config:/config
|
||||
- /path/to/music/library:/music
|
||||
- /path/to/ingest:/downloads
|
||||
ports:
|
||||
- 8337:8337
|
||||
restart: unless-stopped
|
||||
|
|
@ -93,9 +93,9 @@ docker run -d \
|
|||
-e PGID=1000 \
|
||||
-e TZ=Etc/UTC \
|
||||
-p 8337:8337 \
|
||||
-v </path/to/appdata/config>:/config \
|
||||
-v </path/to/music/library>:/music \
|
||||
-v </path/to/ingest>:/downloads \
|
||||
-v /path/to/appdata/config:/config \
|
||||
-v /path/to/music/library:/music \
|
||||
-v /path/to/ingest:/downloads \
|
||||
--restart unless-stopped \
|
||||
lscr.io/linuxserver/beets:nightly
|
||||
|
||||
|
|
@ -224,7 +224,7 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
|
|||
|
||||
## Versions
|
||||
|
||||
* **24.12.22:** - Rebase to Alpine 3.17, migrate to s6v3, install chromaprint from Alpine repos.
|
||||
* **24.12.22:** - Rebase to Alpine 3.17, migrate to s6v3, install chromaprint from Alpine repos, add beetcamp plugin.
|
||||
* **15.01.22:** - Rebase to Alpine 3.15.
|
||||
* **02.06.21:** - Add back gstreamer packages.
|
||||
* **24.05.21:** - Add missing changes from master branch.
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ param_env_vars:
|
|||
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
|
||||
param_usage_include_vols: true
|
||||
param_volumes:
|
||||
- { vol_path: "/config", vol_host_path: "</path/to/appdata/config>", desc: "Configuration files." }
|
||||
- { vol_path: "/music", vol_host_path: "</path/to/music/library>", desc: "Music library" }
|
||||
- { vol_path: "/downloads", vol_host_path: "</path/to/ingest>", desc: "Non processed music" }
|
||||
- { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "Configuration files." }
|
||||
- { vol_path: "/music", vol_host_path: "/path/to/music/library", desc: "Music library" }
|
||||
- { vol_path: "/downloads", vol_host_path: "/path/to/ingest", desc: "Non processed music" }
|
||||
param_usage_include_ports: true
|
||||
param_ports:
|
||||
- { external_port: "8337", internal_port: "8337", port_desc: "Application WebUI" }
|
||||
|
|
|
|||
Loading…
Reference in a new issue