diff --git a/Makefile b/Makefile index 8afa3ef8..0f5dd226 100644 --- a/Makefile +++ b/Makefile @@ -270,26 +270,38 @@ clean-all: testenv clean .PHONY: testenv -run-build: - $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd:dev \ +run-stage-0: + $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd-stage-0 \ --allow security.insecure --progress plain \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ + -f build/Dockerfile-stage-0 . \ + --push + $(DOCKER) buildx build -t silentwind0/kvmd-stage-0 \ + --allow security.insecure --progress plain \ + --platform linux/amd64,linux/arm64,linux/arm/v7 \ + -f build/Dockerfile-stage-0 . \ + --push + +run-build-dev: + $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd:dev \ + --progress plain \ + --platform linux/amd64,linux/arm64,linux/arm/v7 \ -f build/Dockerfile . \ --push $(DOCKER) buildx build -t silentwind0/kvmd:dev \ - --allow security.insecure --progress plain \ + --progress plain \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ -f build/Dockerfile . \ --push -run-release: +run-build-release: $(DOCKER) buildx build -t registry.cn-hangzhou.aliyuncs.com/silentwind/kvmd \ - --allow security.insecure --progress plain \ + --progress plain \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ -f build/Dockerfile . \ --push $(DOCKER) buildx build -t silentwind0/kvmd \ - --allow security.insecure --progress plain \ + --progress plain \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ -f build/Dockerfile . \ --push diff --git a/build/Dockerfile b/build/Dockerfile index ceaa6495..00ac56c9 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,73 +1,4 @@ -# syntax = docker/dockerfile:experimental -FROM python:3.12.0rc2-slim-bookworm AS builder - -ARG TARGETARCH - -RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list.d/debian.sources \ - && apt-get update \ - && apt-get install -y --no-install-recommends build-essential libssl-dev libffi-dev python3-dev libevent-dev libjpeg-dev \ - libbsd-dev libudev-dev git pkg-config wget curl libmicrohttpd-dev libjansson-dev libssl-dev libsofia-sip-ua-dev libglib2.0-dev \ - libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev libconfig-dev libopus-dev libtool automake autoconf meson cmake \ - libx264-dev libyuv-dev libasound2-dev libspeex-dev libspeexdsp-dev libopus-dev \ - && rm -rf /var/lib/apt/lists/* - -COPY build/cargo_config /tmp/config - -RUN --security=insecure pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \ - && if [ ${TARGETARCH} = arm ]; then \ - mkdir -p /root/.cargo \ - && chmod 777 /root/.cargo && mount -t tmpfs none /root/.cargo \ - && export RUSTUP_DIST_SERVER="https://mirrors.tuna.tsinghua.edu.cn/rustup" \ - && export RUSTUP_UPDATE_ROOT="https://mirrors.ustc.edu.cn/rust-static/rustup" \ - && wget https://sh.rustup.rs -O /root/rustup-init.sh \ - && sh /root/rustup-init.sh -y \ - && export PATH=$PATH:/root/.cargo/bin \ - && cp /tmp/config /root/.cargo/config.toml; \ - fi \ - && pip wheel --wheel-dir=/tmp/wheel/ cryptography - -RUN pip install --no-cache-dir --root-user-action=ignore --disable-pip-version-check build \ - && pip wheel --wheel-dir=/tmp/wheel/ aiofiles aiohttp appdirs asn1crypto async_lru async-timeout bottle cffi chardet click colorama \ - dbus_next gpiod hidapi idna mako marshmallow more-itertools multidict netifaces packaging passlib pillow ply psutil pycparser \ - pyelftools pyghmi pygments pyparsing pyotp qrcode requests semantic-version setproctitle setuptools six spidev \ - tabulate urllib3 wrapt xlib yarl pyserial pyyaml zstandard supervisor - -RUN git clone --depth=1 https://gitlab.freedesktop.org/libnice/libnice /tmp/libnice \ - && cd /tmp/libnice \ - && meson --prefix=/usr build && ninja -C build && ninja -C build install - -RUN curl https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz -L -o /tmp/libsrtp-2.2.0.tar.gz \ - && cd /tmp \ - && tar xfv libsrtp-2.2.0.tar.gz \ - && cd libsrtp-2.2.0 \ - && ./configure --prefix=/usr --enable-openssl \ - && make shared_library && make install - -RUN git clone --depth=1 https://libwebsockets.org/repo/libwebsockets /tmp/libwebsockets \ - && cd /tmp/libwebsockets \ - && mkdir build && cd build \ - && cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" .. \ - && make && make install - -RUN git clone --depth=1 https://github.com/meetecho/janus-gateway.git /tmp/janus-gateway \ - && cd /tmp/janus-gateway \ - && sh autogen.sh \ - && ./configure --enable-static --enable-websockets --enable-plugin-audiobridge \ - --disable-data-channels --disable-rabbitmq --disable-mqtt --disable-all-plugins --disable-all-loggers \ - --prefix=/usr \ - && make && make install - -RUN sed --in-place --expression 's|^#include "refcount.h"$|#include "../refcount.h"|g' /usr/include/janus/plugins/plugin.h \ - && git clone --depth=1 https://github.com/mofeng-git/ustreamer /tmp/ustreamer \ - && make -j WITH_PYTHON=1 WITH_JANUS=1 WITH_LIBX264=1 -C /tmp/ustreamer \ - && /tmp/ustreamer/ustreamer -v - -RUN mkdir /tmp/lib \ - && cd /lib/*-linux-*/ \ - && cp libevent_core-*.so.7 libbsd.so.0 libevent_pthreads-*.so.7 libspeexdsp.so.1 libevent-*.so.7 libjpeg.so.62 libx264.so.164 libyuv.so.0 \ - libnice.so.10 /usr/lib/libsrtp2.so.1 /usr/lib/libwebsockets.so.19 \ - /tmp/lib/ \ - && cp /tmp/ustreamer/python/dist/*.whl /tmp/wheel/ +FROM silentwind0/kvmd-stage-0 AS builder FROM python:3.12.0rc2-slim-bookworm @@ -81,8 +12,8 @@ COPY --from=builder /usr/lib/janus/transports/* /usr/lib/janus/transports/ ARG TARGETARCH -ENV PYTHONDONTWRITEBYTECODE 1 -ENV PYTHONUNBUFFERED 1 +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 ENV TZ=Asia/Shanghai RUN cp /tmp/lib/* /lib/*-linux-*/ \ diff --git a/build/Dockerfile-stage-0 b/build/Dockerfile-stage-0 new file mode 100644 index 00000000..df9f5505 --- /dev/null +++ b/build/Dockerfile-stage-0 @@ -0,0 +1,70 @@ +# syntax = docker/dockerfile:experimental +FROM python:3.12.0rc2-slim-bookworm AS builder + +ARG TARGETARCH + +RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list.d/debian.sources \ + && apt-get update \ + && apt-get install -y --no-install-recommends build-essential libssl-dev libffi-dev python3-dev libevent-dev libjpeg-dev \ + libbsd-dev libudev-dev git pkg-config wget curl libmicrohttpd-dev libjansson-dev libssl-dev libsofia-sip-ua-dev libglib2.0-dev \ + libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev libconfig-dev libopus-dev libtool automake autoconf meson cmake \ + libx264-dev libyuv-dev libasound2-dev libspeex-dev libspeexdsp-dev libopus-dev \ + && rm -rf /var/lib/apt/lists/* + +COPY build/cargo_config /tmp/config + +RUN --security=insecure pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \ + && if [ ${TARGETARCH} = arm ]; then \ + mkdir -p /root/.cargo \ + && chmod 777 /root/.cargo && mount -t tmpfs none /root/.cargo \ + && export RUSTUP_DIST_SERVER="https://mirrors.tuna.tsinghua.edu.cn/rustup" \ + #&& export RUSTUP_UPDATE_ROOT="https://mirrors.ustc.edu.cn/rust-static/rustup" \ + && wget https://sh.rustup.rs -O /root/rustup-init.sh \ + && sh /root/rustup-init.sh -y \ + && export PATH=$PATH:/root/.cargo/bin \ + && cp /tmp/config /root/.cargo/config.toml; \ + fi \ + && pip wheel --wheel-dir=/tmp/wheel/ cryptography + +RUN pip install --no-cache-dir --root-user-action=ignore --disable-pip-version-check build \ + && pip wheel --wheel-dir=/tmp/wheel/ aiofiles aiohttp appdirs asn1crypto async_lru async-timeout bottle cffi chardet click colorama \ + dbus_next gpiod hidapi idna mako marshmallow more-itertools multidict netifaces packaging passlib pillow ply psutil pycparser \ + pyelftools pyghmi pygments pyparsing pyotp qrcode requests semantic-version setproctitle setuptools six spidev \ + tabulate urllib3 wrapt xlib yarl pyserial pyyaml zstandard supervisor + +RUN git clone --depth=1 https://gitlab.freedesktop.org/libnice/libnice /tmp/libnice \ + && cd /tmp/libnice \ + && meson --prefix=/usr build && ninja -C build && ninja -C build install + +RUN curl https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz -L -o /tmp/libsrtp-2.2.0.tar.gz \ + && cd /tmp \ + && tar xfv libsrtp-2.2.0.tar.gz \ + && cd libsrtp-2.2.0 \ + && ./configure --prefix=/usr --enable-openssl \ + && make shared_library && make install + +RUN git clone --depth=1 https://libwebsockets.org/repo/libwebsockets /tmp/libwebsockets \ + && cd /tmp/libwebsockets \ + && mkdir build && cd build \ + && cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" .. \ + && make && make install + +RUN git clone --depth=1 https://github.com/meetecho/janus-gateway.git /tmp/janus-gateway \ + && cd /tmp/janus-gateway \ + && sh autogen.sh \ + && ./configure --enable-static --enable-websockets --enable-plugin-audiobridge \ + --disable-data-channels --disable-rabbitmq --disable-mqtt --disable-all-plugins --disable-all-loggers \ + --prefix=/usr \ + && make && make install + +RUN sed --in-place --expression 's|^#include "refcount.h"$|#include "../refcount.h"|g' /usr/include/janus/plugins/plugin.h \ + && git clone --depth=1 https://github.com/mofeng-git/ustreamer /tmp/ustreamer \ + && make -j WITH_PYTHON=1 WITH_JANUS=1 WITH_LIBX264=1 -C /tmp/ustreamer \ + && /tmp/ustreamer/ustreamer -v + +RUN mkdir /tmp/lib \ + && cd /lib/*-linux-*/ \ + && cp libevent_core-*.so.7 libbsd.so.0 libevent_pthreads-*.so.7 libspeexdsp.so.1 libevent-*.so.7 libjpeg.so.62 libx264.so.164 libyuv.so.0 \ + libnice.so.10 /usr/lib/libsrtp2.so.1 /usr/lib/libwebsockets.so.19 \ + /tmp/lib/ \ + && cp /tmp/ustreamer/python/dist/*.whl /tmp/wheel/ \ No newline at end of file