diff --git a/Dockerfile b/Dockerfile index 7290daf..12c7e75 100644 --- a/Dockerfile +++ b/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" \ diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index d8078f2..0297cb2 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -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" \ diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 8bcd810..9c0e3f4 100644 --- a/Dockerfile.armhf +++ b/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" \ diff --git a/README.md b/README.md index 6cc97f9..4d8dc67 100644 --- a/README.md +++ b/README.md @@ -76,9 +76,9 @@ services: - PGID=1000 - TZ=Etc/UTC volumes: - - :/config - - :/music - - :/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 :/config \ - -v :/music \ - -v :/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. diff --git a/readme-vars.yml b/readme-vars.yml index affb6c0..da54026 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -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: "", desc: "Configuration files." } - - { vol_path: "/music", vol_host_path: "", desc: "Music library" } - - { vol_path: "/downloads", vol_host_path: "", 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" }