diff --git a/docs/devnotes.md b/docs/devnotes.md index a12f43e3..a0ce6bc1 100644 --- a/docs/devnotes.md +++ b/docs/devnotes.md @@ -494,9 +494,13 @@ to get started, first `cd` into the `scripts` folder * if you want to build a pypi package, now run `./make-pypi-release.sh d` * if you want to build a docker-image, you have two options: - * if you want to use podman to build all docker-images for all supported architectures, now run `(cd docker; ./make.sh hclean; ./make.sh hclean pull img)` - * if you want to use docker to build all docker-images for your native architecture, now run `sudo make -C docker` + * if you want to use podman to build all docker-images for all supported architectures, now run `(cd docker; make -C base; ./make.sh hclean; ./make.sh hclean pull img)` + * if you want to use docker to build just the `ac` docker-image for your native architecture, now run `sudo make -C docker` + * to use docker to build something other than `ac`, list the image variants you want; `sudo make -C docker min im ac iv dj` * if you want to do something else, please take a look at `docker/make.sh` or `docker/Makefile` for inspiration + * beware of the following: + * if you build with docker, you get the [stock alpine-provided ffmpeg](https://github.com/9001/copyparty/blob/hovudstraum/docs/bad-codecs.md), which makes the docker-image almost twice as big + * if you build with podman (make.sh) you get the copyparty-official legally-comfy custom ffmpeg, but the first build takes about 2-3 hours longer * if you want to build the windows exe, first grab some snacks and a beer, [you'll need it](https://github.com/9001/copyparty/tree/hovudstraum/scripts/pyinstaller) diff --git a/scripts/docker/Dockerfile.ac b/scripts/docker/Dockerfile.ac index ae9706f2..d549627f 100644 --- a/scripts/docker/Dockerfile.ac +++ b/scripts/docker/Dockerfile.ac @@ -6,8 +6,9 @@ LABEL org.opencontainers.image.url="https://github.com/9001/copyparty" \ org.opencontainers.image.title="copyparty-ac" \ org.opencontainers.image.description="copyparty with Pillow and FFmpeg (image/audio/video thumbnails, audio transcoding, media tags)" ENV XDG_CONFIG_HOME=/cfg +ARG ADD_PKG="" -RUN apk --no-cache add !pyc \ +RUN apk --no-cache add !pyc ${ADD_PKG} \ tzdata wget mimalloc2 mimalloc2-insecure \ py3-jinja2 py3-argon2-cffi py3-pyzmq \ py3-openssl py3-paramiko py3-pillow diff --git a/scripts/docker/Dockerfile.dj b/scripts/docker/Dockerfile.dj index d78aa5ea..ec82be50 100644 --- a/scripts/docker/Dockerfile.dj +++ b/scripts/docker/Dockerfile.dj @@ -6,11 +6,12 @@ LABEL org.opencontainers.image.url="https://github.com/9001/copyparty" \ org.opencontainers.image.title="copyparty-dj" \ org.opencontainers.image.description="copyparty with all optional dependencies, including musical key / bpm detection" ENV XDG_CONFIG_HOME=/cfg +ARG ADD_PKG="" COPY i/bin/mtag/install-deps.sh ./ COPY i/bin/mtag/audio-bpm.py /mtag/ COPY i/bin/mtag/audio-key.py /mtag/ -RUN apk add -U !pyc \ +RUN apk add -U !pyc ${ADD_PKG} \ tzdata wget mimalloc2 mimalloc2-insecure \ py3-jinja2 py3-argon2-cffi py3-pyzmq \ py3-openssl py3-paramiko py3-pillow \ @@ -29,7 +30,7 @@ RUN apk add -U !pyc \ libraw-dev py3-numpy-dev cython \ && rm -f /usr/lib/python3*/EXTERNALLY-MANAGED \ && python3 -m pip install pyvips \ - && python3 -m pip install "$(wget -O- https://api.github.com/repos/letmaik/rawpy/releases/latest | awk -F\" '$2=="tarball_url"{print$4}')" \ + && python3 -m pip install --no-binary rawpy rawpy \ && bash install-deps.sh \ && apk del py3-pip .bd \ && chmod 777 /root \ diff --git a/scripts/docker/Dockerfile.im b/scripts/docker/Dockerfile.im index 4828520b..580f0d06 100644 --- a/scripts/docker/Dockerfile.im +++ b/scripts/docker/Dockerfile.im @@ -6,8 +6,9 @@ LABEL org.opencontainers.image.url="https://github.com/9001/copyparty" \ org.opencontainers.image.title="copyparty-im" \ org.opencontainers.image.description="copyparty with Pillow and Mutagen (image thumbnails, media tags)" ENV XDG_CONFIG_HOME=/cfg +ARG ADD_PKG="" -RUN apk --no-cache add !pyc \ +RUN apk --no-cache add !pyc ${ADD_PKG} \ tzdata wget mimalloc2 mimalloc2-insecure \ py3-jinja2 py3-argon2-cffi \ py3-openssl py3-paramiko py3-pillow py3-mutagen diff --git a/scripts/docker/Dockerfile.iv b/scripts/docker/Dockerfile.iv index 51360dd8..dff98cd0 100644 --- a/scripts/docker/Dockerfile.iv +++ b/scripts/docker/Dockerfile.iv @@ -6,8 +6,9 @@ LABEL org.opencontainers.image.url="https://github.com/9001/copyparty" \ org.opencontainers.image.title="copyparty-iv" \ org.opencontainers.image.description="copyparty with Pillow, FFmpeg, libvips (image/audio/video thumbnails, audio transcoding, media tags)" ENV XDG_CONFIG_HOME=/cfg +ARG ADD_PKG="" -RUN apk add -U !pyc \ +RUN apk add -U !pyc ${ADD_PKG} \ tzdata wget mimalloc2 mimalloc2-insecure \ py3-jinja2 py3-argon2-cffi py3-pyzmq \ py3-openssl py3-paramiko py3-pillow \ @@ -21,7 +22,7 @@ RUN apk add -U !pyc \ libraw-dev py3-numpy-dev cython \ && rm -f /usr/lib/python3*/EXTERNALLY-MANAGED \ && python3 -m pip install pyvips \ - && python3 -m pip install "$(wget -O- https://api.github.com/repos/letmaik/rawpy/releases/latest | awk -F\" '$2=="tarball_url"{print$4}')" \ + && python3 -m pip install --no-binary rawpy rawpy \ && apk del py3-pip .bd COPY i innvikler.sh ./ diff --git a/scripts/docker/Dockerfile.min b/scripts/docker/Dockerfile.min index ca7b718f..9b289d53 100644 --- a/scripts/docker/Dockerfile.min +++ b/scripts/docker/Dockerfile.min @@ -6,8 +6,9 @@ LABEL org.opencontainers.image.url="https://github.com/9001/copyparty" \ org.opencontainers.image.title="copyparty-min" \ org.opencontainers.image.description="just copyparty, no thumbnails / media tags / audio transcoding" ENV XDG_CONFIG_HOME=/cfg +ARG ADD_PKG="" -RUN apk --no-cache add !pyc \ +RUN apk --no-cache add !pyc ${ADD_PKG} \ py3-jinja2 COPY i innvikler.sh ./ diff --git a/scripts/docker/Makefile b/scripts/docker/Makefile index 8b8ff68a..26c7d8e3 100644 --- a/scripts/docker/Makefile +++ b/scripts/docker/Makefile @@ -1,57 +1,32 @@ self := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) -all: - -service docker start - -systemctl start docker - +.PHONY: i min im ac iv dj clean hclean purge sh + +all: ac + +i: rm -rf i mkdir i - tar -cC../.. dist/copyparty-sfx.py bin/mtag | tar -xvCi - + tar -cC../../dist copyparty-sfx.py | tar -xvCi + tar -cC../.. bin/mtag | tar -xvCi +# # use stock ffmpeg because ./base/Makefile requires podman; +# # beware: https://github.com/9001/copyparty/blob/hovudstraum/docs/bad-codecs.md + touch i/stock_ffmpeg + +min: i docker build -t copyparty/min:latest -f Dockerfile.min . - echo 'scale=1;'`docker save copyparty/min:latest | pigz -c | wc -c`/1024/1024 | bc - -# docker build -t copyparty/min-pip:latest -f Dockerfile.min.pip . -# echo 'scale=1;'`docker save copyparty/min-pip:latest | pigz -c | wc -c`/1024/1024 | bc +im: i docker build -t copyparty/im:latest -f Dockerfile.im . - echo 'scale=1;'`docker save copyparty/im:latest | pigz -c | wc -c`/1024/1024 | bc - docker build -t copyparty/iv:latest -f Dockerfile.iv . - echo 'scale=1;'`docker save copyparty/iv:latest | pigz -c | wc -c`/1024/1024 | bc +ac: i + docker build -t copyparty/ac:latest -f Dockerfile.ac --build-arg ADD_PKG=ffmpeg . - docker build -t copyparty/ac:latest -f Dockerfile.ac . - echo 'scale=1;'`docker save copyparty/ac:latest | pigz -c | wc -c`/1024/1024 | bc +iv: i + docker build -t copyparty/iv:latest -f Dockerfile.iv --build-arg ADD_PKG=ffmpeg . - docker build -t copyparty/dj:latest -f Dockerfile.dj . - echo 'scale=1;'`docker save copyparty/dj:latest | pigz -c | wc -c`/1024/1024 | bc - - docker image ls - -min: - rm -rf i - mkdir i - tar -cC../.. dist/copyparty-sfx.py bin/mtag | tar -xvCi - - podman build --squash --pull=always -t copyparty/min:latest -f Dockerfile.min . - echo 'scale=1;'`podman save copyparty/min:latest | pigz -c | wc -c`/1024/1024 | bc - -push: - docker push copyparty/min - docker push copyparty/im - docker push copyparty/iv - docker push copyparty/ac - docker push copyparty/dj - docker image tag copyparty/min:latest ghcr.io/9001/copyparty-min:latest - docker image tag copyparty/im:latest ghcr.io/9001/copyparty-im:latest - docker image tag copyparty/iv:latest ghcr.io/9001/copyparty-iv:latest - docker image tag copyparty/ac:latest ghcr.io/9001/copyparty-ac:latest - docker image tag copyparty/dj:latest ghcr.io/9001/copyparty-dj:latest - docker push ghcr.io/9001/copyparty-min:latest - docker push ghcr.io/9001/copyparty-im:latest - docker push ghcr.io/9001/copyparty-iv:latest - docker push ghcr.io/9001/copyparty-ac:latest - docker push ghcr.io/9001/copyparty-dj:latest +dj: i + docker build -t copyparty/dj:latest -f Dockerfile.dj --build-arg ADD_PKG=ffmpeg . clean: -docker kill `docker ps -q` diff --git a/scripts/docker/innvikler.sh b/scripts/docker/innvikler.sh index d6b113fb..4495e740 100644 --- a/scripts/docker/innvikler.sh +++ b/scripts/docker/innvikler.sh @@ -15,7 +15,7 @@ ised() { } # use custom ffmpeg if relevant -echo $1 | grep -qE 'ac|iv|dj' && ( +echo $1 | grep -qE 'ac|iv|dj' && [ ! -e "/z/stock_ffmpeg" ] && ( cp -pv /z/packages/*.pub /etc/apk/keys/ cd /z/packages/$(cat /etc/apk/arch) apk add ./ffmpeg-*.apk