feat!: 移除内置公共服务器

- 移除公共 RustDesk ID 服务器 (用户需自行配置)
- 移除公共 TURN 服务器 (仅保留 Google STUN)
- 清理废弃代码: PublicServerInfo, is_using_public_server 等
- 更新前端 UI 和国际化文本
- 重新生成 TypeScript 类型

破坏性变更: 不再提供内置公共服务器。用户必须配置自己的
RustDesk 服务器和 TURN 服务器才能在生产环境中使用。
This commit is contained in:
mofeng-git
2026-01-08 16:53:19 +08:00
parent 9ab3d052f9
commit 3fa91772f0
20 changed files with 635 additions and 500 deletions

View File

@@ -8,40 +8,28 @@ FROM debian:12-slim
ARG TARGETPLATFORM
# Install runtime dependencies and create directories
RUN apt-get update && apt-get install -y --no-install-recommends \
# Runtime libraries
libasound2 \
libv4l-0 \
libudev1 \
zlib1g \
libjpeg62-turbo \
libyuv0 \
# FFmpeg runtime
libavcodec59 \
libavformat59 \
libavutil57 \
libswscale6 \
libswresample4 \
# Video codecs
libx264-164 \
libx265-199 \
libvpx7 \
# Audio codec
libopus0 \
# Hardware acceleration
libva2 \
libva-drm2 \
libdrm2 \
# X11 (for VAAPI)
libx11-6 \
libxcb1 \
# Utilities
ca-certificates \
# Intel Media SDK (x86_64 only, ignored on other archs)
$([ "$TARGETPLATFORM" = "linux/amd64" ] && echo "libmfx1") \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /etc/one-kvm/ventoy
# Install runtime dependencies in a single layer
# Static linked: FFmpeg core, libyuv, libvpx, libjpeg-turbo
# Dynamic linked: hardware acceleration drivers, GPL codecs (x264/x265)
RUN apt-get update && \
apt-get install -y --no-install-recommends \
# Core runtime (all platforms)
libasound2 \
libv4l-0 \
libudev1 \
libdrm2 \
libopus0 \
ca-certificates \
# GPL codecs (must be dynamic for license compliance)
libx264-164 \
libx265-199 && \
# Platform-specific hardware acceleration
if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
apt-get install -y --no-install-recommends \
libva2 libva-drm2 libva-x11-2 libx11-6 libxcb1 libmfx1; \
fi && \
rm -rf /var/lib/apt/lists/* && \
mkdir -p /etc/one-kvm/ventoy
# Copy init script
COPY --chmod=755 init.sh /init.sh

View File

@@ -28,37 +28,83 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
git \
libclang-dev \
llvm \
protobuf-compiler \
mold \
meson \
ninja-build \
wget \
file \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
libc6-dev-arm64-cross \
&& rm -rf /var/lib/apt/lists/*
# Install ARM64 development libraries (without system ffmpeg)
# Install ARM64 development libraries (without VAAPI/X11 for ARM)
RUN apt-get update && apt-get install -y --no-install-recommends \
libssl-dev:arm64 \
libasound2-dev:arm64 \
libv4l-dev:arm64 \
libudev-dev:arm64 \
zlib1g-dev:arm64 \
libjpeg62-turbo-dev:arm64 \
libyuv-dev:arm64 \
# Note: libjpeg-turbo, libyuv, libvpx are built from source below for static linking
libx264-dev:arm64 \
libx265-dev:arm64 \
libvpx-dev:arm64 \
libopus-dev:arm64 \
libva-dev:arm64 \
libdrm-dev:arm64 \
libx11-dev:arm64 \
libxcb1-dev:arm64 \
libxau-dev:arm64 \
libxdmcp-dev:arm64 \
&& rm -rf /var/lib/apt/lists/*
# Build static libjpeg-turbo from source (cross-compile for ARM64)
RUN git clone --depth 1 https://github.com/libjpeg-turbo/libjpeg-turbo /tmp/libjpeg-turbo \
&& cd /tmp/libjpeg-turbo \
&& cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
-DCMAKE_INSTALL_PREFIX=/opt/one-kvm-libs/aarch64-linux-gnu \
-DENABLE_SHARED=OFF -DENABLE_STATIC=ON \
&& cmake --build build -j$(nproc) \
&& cmake --install build \
&& rm -rf /tmp/libjpeg-turbo
# Build static libyuv from source (cross-compile for ARM64)
RUN git clone --depth 1 https://github.com/lemenkov/libyuv /tmp/libyuv \
&& cd /tmp/libyuv \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DCMAKE_PREFIX_PATH=/opt/one-kvm-libs/aarch64-linux-gnu \
-DCMAKE_INSTALL_PREFIX=/opt/one-kvm-libs/aarch64-linux-gnu \
&& make -j$(nproc) \
&& mkdir -p /opt/one-kvm-libs/aarch64-linux-gnu/lib \
&& cp libyuv.a /opt/one-kvm-libs/aarch64-linux-gnu/lib/ \
&& cp -r ../include /opt/one-kvm-libs/aarch64-linux-gnu/ \
&& rm -rf /tmp/libyuv
# Build static libvpx from source (cross-compile for ARM64)
# CC/CXX/LD/AR must be environment variables, not configure arguments
RUN git clone --depth 1 https://github.com/webmproject/libvpx /tmp/libvpx \
&& cd /tmp/libvpx \
&& echo "=== libvpx: Configuring for ARM64 ===" \
&& export CC=aarch64-linux-gnu-gcc \
&& export CXX=aarch64-linux-gnu-g++ \
&& export LD=aarch64-linux-gnu-ld \
&& export AR=aarch64-linux-gnu-ar \
&& export CROSS=aarch64-linux-gnu- \
&& ./configure --prefix=/opt/one-kvm-libs/aarch64-linux-gnu \
--target=arm64-linux-gcc \
--enable-static --disable-shared --enable-pic \
--disable-examples --disable-tools --disable-docs \
--disable-unit-tests \
&& echo "=== libvpx: Building ===" \
&& make -j$(nproc) \
&& echo "=== libvpx: Checking architecture ===" \
&& file libvpx.a \
&& make install \
&& echo "=== libvpx: Verifying installed library ===" \
&& file /opt/one-kvm-libs/aarch64-linux-gnu/lib/libvpx.a \
&& rm -rf /tmp/libvpx
# Download and build FFmpeg with RKMPP support
RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
&& wget -q https://files.mofeng.run/src/image/other/ffmpeg.tar.gz \
@@ -73,7 +119,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DCMAKE_INSTALL_PREFIX=/usr/aarch64-linux-gnu \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TEST=OFF \
&& make -j$(nproc) \
&& make install \
@@ -94,6 +140,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
&& meson setup build --prefix=/usr/aarch64-linux-gnu --libdir=lib \
--cross-file=/tmp/aarch64-cross.txt \
--buildtype=release \
--default-library=static \
-Dcpp_args=-fpermissive \
-Dlibdrm=false \
-Dlibrga_demo=false \
@@ -102,7 +149,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
&& cd .. \
# Create pkg-config wrapper for cross-compilation
&& echo '#!/bin/sh' > /tmp/aarch64-pkg-config \
&& echo 'export PKG_CONFIG_LIBDIR=/usr/aarch64-linux-gnu/lib/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig' >> /tmp/aarch64-pkg-config \
&& echo 'export PKG_CONFIG_LIBDIR=/opt/one-kvm-libs/aarch64-linux-gnu/lib/pkgconfig:/usr/aarch64-linux-gnu/lib/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig' >> /tmp/aarch64-pkg-config \
&& echo 'export PKG_CONFIG_PATH=""' >> /tmp/aarch64-pkg-config \
&& echo 'export PKG_CONFIG_SYSROOT_DIR=""' >> /tmp/aarch64-pkg-config \
&& echo 'exec pkg-config "$@"' >> /tmp/aarch64-pkg-config \
@@ -110,7 +157,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
# Build FFmpeg with RKMPP (minimal build for encoding only)
&& cd ffmpeg-rockchip \
&& ./configure \
--prefix=/usr/aarch64-linux-gnu \
--prefix=/opt/one-kvm-libs/aarch64-linux-gnu \
--cross-prefix=aarch64-linux-gnu- \
--arch=aarch64 \
--target-os=linux \
@@ -118,13 +165,14 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
--pkg-config=/tmp/aarch64-pkg-config \
--enable-gpl \
--enable-version3 \
--enable-shared \
--disable-static \
# Hardware acceleration
--disable-shared \
--enable-static \
--enable-pic \
# Hardware acceleration (ARM: RKMPP + V4L2, no VAAPI)
--enable-libdrm \
--enable-rkmpp \
--enable-rkrga \
--enable-vaapi \
--disable-vaapi \
--enable-v4l2-m2m \
# Software encoding libraries
--enable-libx264 \
@@ -151,10 +199,6 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
--disable-decoders \
# Disable all encoders, enable only needed ones
--disable-encoders \
--enable-encoder=h264_vaapi \
--enable-encoder=hevc_vaapi \
--enable-encoder=vp8_vaapi \
--enable-encoder=vp9_vaapi \
--enable-encoder=h264_rkmpp \
--enable-encoder=hevc_rkmpp \
--enable-encoder=h264_v4l2m2m \
@@ -194,14 +238,22 @@ RUN rustup target add aarch64-unknown-linux-gnu
# Create symlink for mold to work with cross-compiler
RUN ln -s /usr/bin/mold /usr/bin/aarch64-linux-gnu-ld.mold
# Copy entrypoint script
COPY build/cross/entrypoint.sh /usr/local/bin/cross-entrypoint.sh
RUN chmod +x /usr/local/bin/cross-entrypoint.sh
# Configure environment for cross-compilation
# Use PKG_CONFIG_LIBDIR to completely replace default search paths
# This ensures we use our custom-built FFmpeg instead of system FFmpeg
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \
CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc \
CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++ \
AR_aarch64_unknown_linux_gnu=aarch64-linux-gnu-ar \
PKG_CONFIG_LIBDIR=/usr/aarch64-linux-gnu/lib/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig \
PKG_CONFIG_LIBDIR=/opt/one-kvm-libs/aarch64-linux-gnu/lib/pkgconfig:/usr/aarch64-linux-gnu/lib/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig \
PKG_CONFIG_PATH="" \
PKG_CONFIG_ALLOW_CROSS=1 \
LIBRARY_PATH="/opt/one-kvm-libs/aarch64-linux-gnu/lib" \
CPATH="/opt/one-kvm-libs/aarch64-linux-gnu/include" \
FFMPEG_STATIC=1 \
LIBYUV_STATIC=1 \
RUSTFLAGS="-C linker=aarch64-linux-gnu-gcc -C link-arg=-fuse-ld=mold"
ENTRYPOINT ["/usr/local/bin/cross-entrypoint.sh"]

View File

@@ -28,37 +28,79 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
git \
libclang-dev \
llvm \
protobuf-compiler \
mold \
meson \
ninja-build \
wget \
file \
gcc-arm-linux-gnueabihf \
g++-arm-linux-gnueabihf \
libc6-dev-armhf-cross \
&& rm -rf /var/lib/apt/lists/*
# Install ARMv7 development libraries (without system ffmpeg)
# Install ARMv7 development libraries (without VAAPI/X11 for ARM)
RUN apt-get update && apt-get install -y --no-install-recommends \
libssl-dev:armhf \
libasound2-dev:armhf \
libv4l-dev:armhf \
libudev-dev:armhf \
zlib1g-dev:armhf \
libjpeg62-turbo-dev:armhf \
libyuv-dev:armhf \
# Note: libjpeg-turbo, libyuv, libvpx are built from source below for static linking
libx264-dev:armhf \
libx265-dev:armhf \
libvpx-dev:armhf \
libopus-dev:armhf \
libva-dev:armhf \
libdrm-dev:armhf \
libx11-dev:armhf \
libxcb1-dev:armhf \
libxau-dev:armhf \
libxdmcp-dev:armhf \
&& rm -rf /var/lib/apt/lists/*
# Build static libjpeg-turbo from source (cross-compile for ARMv7)
RUN git clone --depth 1 https://github.com/libjpeg-turbo/libjpeg-turbo /tmp/libjpeg-turbo \
&& cd /tmp/libjpeg-turbo \
&& cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \
-DCMAKE_INSTALL_PREFIX=/opt/one-kvm-libs/armv7-linux-gnueabihf \
-DENABLE_SHARED=OFF -DENABLE_STATIC=ON \
&& cmake --build build -j$(nproc) \
&& cmake --install build \
&& rm -rf /tmp/libjpeg-turbo
# Build static libyuv from source (cross-compile for ARMv7)
RUN git clone --depth 1 https://github.com/lemenkov/libyuv /tmp/libyuv \
&& cd /tmp/libyuv \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \
-DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \
-DCMAKE_PREFIX_PATH=/opt/one-kvm-libs/armv7-linux-gnueabihf \
-DCMAKE_INSTALL_PREFIX=/opt/one-kvm-libs/armv7-linux-gnueabihf \
&& make -j$(nproc) \
&& mkdir -p /opt/one-kvm-libs/armv7-linux-gnueabihf/lib \
&& cp libyuv.a /opt/one-kvm-libs/armv7-linux-gnueabihf/lib/ \
&& cp -r ../include /opt/one-kvm-libs/armv7-linux-gnueabihf/ \
&& rm -rf /tmp/libyuv
# Build static libvpx from source (cross-compile for ARMv7)
# CC/CXX/LD/AR must be environment variables, not configure arguments
RUN git clone --depth 1 https://github.com/webmproject/libvpx /tmp/libvpx \
&& cd /tmp/libvpx \
&& export CC=arm-linux-gnueabihf-gcc \
&& export CXX=arm-linux-gnueabihf-g++ \
&& export LD=arm-linux-gnueabihf-ld \
&& export AR=arm-linux-gnueabihf-ar \
&& export CROSS=arm-linux-gnueabihf- \
&& ./configure --prefix=/opt/one-kvm-libs/armv7-linux-gnueabihf \
--target=armv7-linux-gcc \
--enable-static --disable-shared --enable-pic \
--disable-examples --disable-tools --disable-docs \
--disable-unit-tests \
&& make -j$(nproc) \
&& echo "=== libvpx: Checking architecture ===" \
&& file libvpx.a \
&& make install \
&& rm -rf /tmp/libvpx
# Download and build FFmpeg with RKMPP support
RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
&& wget -q https://files.mofeng.run/src/image/other/ffmpeg.tar.gz \
@@ -73,7 +115,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
-DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \
-DCMAKE_INSTALL_PREFIX=/usr/arm-linux-gnueabihf \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TEST=OFF \
&& make -j$(nproc) \
&& make install \
@@ -94,6 +136,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
&& meson setup build --prefix=/usr/arm-linux-gnueabihf --libdir=lib \
--cross-file=/tmp/armhf-cross.txt \
--buildtype=release \
--default-library=static \
-Dcpp_args=-fpermissive \
-Dlibdrm=false \
-Dlibrga_demo=false \
@@ -102,7 +145,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
&& cd .. \
# Create pkg-config wrapper for cross-compilation
&& echo '#!/bin/sh' > /tmp/armhf-pkg-config \
&& echo 'export PKG_CONFIG_LIBDIR=/usr/arm-linux-gnueabihf/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig' >> /tmp/armhf-pkg-config \
&& echo 'export PKG_CONFIG_LIBDIR=/opt/one-kvm-libs/armv7-linux-gnueabihf/lib/pkgconfig:/usr/arm-linux-gnueabihf/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig' >> /tmp/armhf-pkg-config \
&& echo 'export PKG_CONFIG_PATH=""' >> /tmp/armhf-pkg-config \
&& echo 'export PKG_CONFIG_SYSROOT_DIR=""' >> /tmp/armhf-pkg-config \
&& echo 'exec pkg-config "$@"' >> /tmp/armhf-pkg-config \
@@ -110,7 +153,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
# Build FFmpeg with RKMPP (minimal build for encoding only)
&& cd ffmpeg-rockchip \
&& ./configure \
--prefix=/usr/arm-linux-gnueabihf \
--prefix=/opt/one-kvm-libs/armv7-linux-gnueabihf \
--cross-prefix=arm-linux-gnueabihf- \
--arch=arm \
--target-os=linux \
@@ -118,13 +161,14 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
--pkg-config=/tmp/armhf-pkg-config \
--enable-gpl \
--enable-version3 \
--enable-shared \
--disable-static \
# Hardware acceleration
--disable-shared \
--enable-static \
--enable-pic \
# Hardware acceleration (ARM: RKMPP + V4L2, no VAAPI)
--enable-libdrm \
--enable-rkmpp \
--enable-rkrga \
--enable-vaapi \
--disable-vaapi \
--enable-v4l2-m2m \
# Software encoding libraries
--enable-libx264 \
@@ -151,10 +195,6 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
--disable-decoders \
# Disable all encoders, enable only needed ones
--disable-encoders \
--enable-encoder=h264_vaapi \
--enable-encoder=hevc_vaapi \
--enable-encoder=vp8_vaapi \
--enable-encoder=vp9_vaapi \
--enable-encoder=h264_rkmpp \
--enable-encoder=hevc_rkmpp \
--enable-encoder=h264_v4l2m2m \
@@ -194,14 +234,22 @@ RUN rustup target add armv7-unknown-linux-gnueabihf
# Create symlink for mold to work with cross-compiler
RUN ln -s /usr/bin/mold /usr/bin/arm-linux-gnueabihf-ld.mold
# Copy entrypoint script
COPY build/cross/entrypoint.sh /usr/local/bin/cross-entrypoint.sh
RUN chmod +x /usr/local/bin/cross-entrypoint.sh
# Configure environment for cross-compilation
# Use PKG_CONFIG_LIBDIR to completely replace default search paths
# This ensures we use our custom-built FFmpeg instead of system FFmpeg
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc \
CC_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc \
CXX_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-g++ \
AR_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-ar \
PKG_CONFIG_LIBDIR=/usr/arm-linux-gnueabihf/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig \
PKG_CONFIG_LIBDIR=/opt/one-kvm-libs/armv7-linux-gnueabihf/lib/pkgconfig:/usr/arm-linux-gnueabihf/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig \
PKG_CONFIG_PATH="" \
PKG_CONFIG_ALLOW_CROSS=1 \
LIBRARY_PATH="/opt/one-kvm-libs/armv7-linux-gnueabihf/lib" \
CPATH="/opt/one-kvm-libs/armv7-linux-gnueabihf/include" \
FFMPEG_STATIC=1 \
LIBYUV_STATIC=1 \
RUSTFLAGS="-C linker=arm-linux-gnueabihf-gcc -C link-arg=-fuse-ld=mold"
ENTRYPOINT ["/usr/local/bin/cross-entrypoint.sh"]

View File

@@ -17,6 +17,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
ENV PATH="/root/.cargo/bin:${PATH}"
# Install build dependencies
# Note: libyuv, libvpx are built from source below for static linking
RUN apt-get update && apt-get install -y --no-install-recommends \
# Build tools
build-essential \
@@ -27,8 +28,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
git \
libclang-dev \
llvm \
protobuf-compiler \
libssl-dev \
mold \
wget \
# Core system libraries
@@ -36,37 +35,69 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
libv4l-dev \
libudev-dev \
zlib1g-dev \
# Video/image processing
libjpeg62-turbo-dev \
libyuv-dev \
# Video codec libraries (for FFmpeg build)
# Note: libjpeg-turbo is built from source below for static linking
# Video codec libraries (dynamic, for software fallback)
libx264-dev \
libx265-dev \
libvpx-dev \
# Audio codec
libopus-dev \
# Hardware acceleration
libva-dev \
libdrm-dev \
libmfx-dev \
# X11 libraries
# X11 libraries (for VAAPI)
libx11-dev \
libxcb1-dev \
libxau-dev \
libxdmcp-dev \
&& rm -rf /var/lib/apt/lists/*
# Build static libjpeg-turbo from source (needed by libyuv)
RUN git clone --depth 1 https://github.com/libjpeg-turbo/libjpeg-turbo /tmp/libjpeg-turbo \
&& cd /tmp/libjpeg-turbo \
&& cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_INSTALL_PREFIX=/opt/one-kvm-libs/x86_64-linux-gnu \
-DENABLE_SHARED=OFF -DENABLE_STATIC=ON \
&& cmake --build build -j$(nproc) \
&& cmake --install build \
&& rm -rf /tmp/libjpeg-turbo
# Build static libyuv from source (uses libjpeg-turbo headers)
RUN git clone --depth 1 https://github.com/lemenkov/libyuv /tmp/libyuv \
&& cd /tmp/libyuv \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_PREFIX_PATH=/opt/one-kvm-libs/x86_64-linux-gnu \
-DCMAKE_INSTALL_PREFIX=/opt/one-kvm-libs/x86_64-linux-gnu \
&& make -j$(nproc) \
&& mkdir -p /opt/one-kvm-libs/x86_64-linux-gnu/lib \
&& cp libyuv.a /opt/one-kvm-libs/x86_64-linux-gnu/lib/ \
&& cp -r ../include /opt/one-kvm-libs/x86_64-linux-gnu/ \
&& rm -rf /tmp/libyuv
# Build static libvpx from source
RUN git clone --depth 1 https://github.com/webmproject/libvpx /tmp/libvpx \
&& cd /tmp/libvpx \
&& ./configure --prefix=/opt/one-kvm-libs/x86_64-linux-gnu \
--enable-static --disable-shared --enable-pic \
--disable-examples --disable-tools --disable-docs \
&& make -j$(nproc) \
&& make install \
&& rm -rf /tmp/libvpx
# Download and build FFmpeg with minimal configuration for encoding only
RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
&& wget -q https://files.mofeng.run/src/image/other/ffmpeg.tar.gz \
&& tar -xzf ffmpeg.tar.gz \
&& cd ffmpeg/ffmpeg-rockchip \
&& export PKG_CONFIG_PATH="/opt/one-kvm-libs/x86_64-linux-gnu/lib/pkgconfig:$PKG_CONFIG_PATH" \
&& ./configure \
--prefix=/usr/local \
--prefix=/opt/one-kvm-libs/x86_64-linux-gnu \
--enable-gpl \
--enable-version3 \
--enable-shared \
--disable-static \
--disable-shared \
--enable-static \
--enable-pic \
# Hardware acceleration
--enable-libdrm \
--enable-vaapi \
@@ -128,13 +159,22 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \
--disable-debug \
&& make -j$(nproc) \
&& make install \
&& ldconfig \
&& cd / \
&& rm -rf /tmp/ffmpeg-build
# Add Rust target
RUN rustup target add x86_64-unknown-linux-gnu
# Configure mold as the linker and use custom FFmpeg
# Copy entrypoint script
COPY build/cross/entrypoint.sh /usr/local/bin/cross-entrypoint.sh
RUN chmod +x /usr/local/bin/cross-entrypoint.sh
# Configure environment for static linking
ENV RUSTFLAGS="-C link-arg=-fuse-ld=mold" \
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}"
PKG_CONFIG_PATH="/opt/one-kvm-libs/x86_64-linux-gnu/lib/pkgconfig" \
LIBRARY_PATH="/opt/one-kvm-libs/x86_64-linux-gnu/lib" \
CPATH="/opt/one-kvm-libs/x86_64-linux-gnu/include" \
FFMPEG_STATIC=1 \
LIBYUV_STATIC=1
ENTRYPOINT ["/usr/local/bin/cross-entrypoint.sh"]