diff --git a/docker-compose.yml b/docker-compose.yml index 5c2333c..67fc045 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,11 +13,8 @@ services: # --- VPU/NPU/RGA/GPU 硬件访问 --- - /dev/mpp_service:/dev/mpp_service - - /dev/vpu_service:/dev/vpu_service - /dev/rga:/dev/rga - - /dev/dri:/dev/dri - # --- NPU --- - - /dev/rknn_service:/dev/rknn_service + - /dev/dri:/dev/dri group_add: - "20" @@ -25,6 +22,7 @@ services: - "110" volumes: - .:/app + - /proc/device-tree:/proc/device-tree:ro ports: - "8888:8888" diff --git a/docker/Dockerfile b/docker/Dockerfile index 4811f45..94c9a5c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,6 @@ # ================================================================= -# Edge Proxy - 开发环境 Dockerfile (V6 - 修正版) +# Edge Proxy - 开发环境 Dockerfile (V9 - 源码编译版) +# 严格遵循 "边带配置.docx" 文档 (MPP/RGA/GStreamer 均使用本地包) # ================================================================= FROM arm64v8/ubuntu:22.04 @@ -10,7 +11,6 @@ WORKDIR /app ENV DEBIAN_FRONTEND=noninteractive # 2. 安装依赖、创建用户和组 -# 将所有系统级操作合并到一层,以减少镜像大小和构建时间 # ================================= RUN apt-get update && \ apt-get install -y --no-install-recommends \ @@ -21,18 +21,52 @@ RUN apt-get update && \ git \ gdb \ vim \ - # Piper TTS 所需的系统库 + unzip \ + pkg-config \ + # 添加 'universe' 仓库 + software-properties-common \ + && \ + # 添加 universe 仓库并再次更新 + add-apt-repository universe && \ + apt-get update && \ + # 一次性安装所有依赖 (综合 "边带配置.docx" 的所有 apt install) + apt-get install -y --no-install-recommends \ + # Piper TTS 所需 espeak-ng-data \ libespeak1 \ python3 \ python3-pip \ - # 开发库 + # C++ 开发库 libssl-dev \ libspdlog-dev \ libsqlite3-dev \ - libboost-all-dev && \ - \ - # --- 用户和组创建 --- + libboost-all-dev \ + # GStreamer 核心 + libgstreamer1.0-dev \ + libgstreamer-plugins-base1.0-dev \ + gstreamer1.0-plugins-base \ + gstreamer1.0-plugins-good \ + gstreamer1.0-plugins-bad \ + gstreamer1.0-plugins-ugly \ + gstreamer1.0-libav \ + gstreamer1.0-tools \ + gstreamer1.0-x \ + gstreamer1.0-alsa \ + gstreamer1.0-pulseaudio \ + # 编译工具 + meson \ + ninja-build \ + # Rockchip 硬件库依赖 + libdrm-dev \ + libavcodec-dev \ + libavformat-dev \ + libjpeg-dev \ + libv4l-dev \ + libx11-dev \ + libegl1-mesa-dev \ + libgles2-mesa-dev \ + && \ + # 用户和组创建 groupadd -r developers && \ useradd -ms /bin/bash -g developers -G sudo dev && \ groupadd -g 20 dialout || true && \ @@ -43,13 +77,14 @@ RUN apt-get update && \ usermod -a -G render dev && \ echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd +# 权限和协作设置 # ================================= -# 为所有用户设置 umask 为 0002,这样新创建的文件权限默认为 664 (rw-rw-r--) RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \ chmod +x /etc/profile.d/99-shared-umask.sh + +# 编译并安装 Paho MQTT 库 # ================================= COPY . /tmp/build-context - RUN cd /tmp/build-context/external/paho.mqtt.c && \ cmake -Bbuild -H. \ -DPAHO_WITH_SSL=ON \ @@ -63,21 +98,88 @@ RUN cd /tmp/build-context/external/paho.mqtt.c && \ -DPAHO_BUILD_SAMPLES=OFF \ -DPAHO_BUILD_DOCUMENTATION=OFF && \ cmake --build build --target install && \ - \ - # --- 清理工作 --- + rm -rf /tmp/build-context + + +# 编译 MPP +COPY mpp-develop.zip /tmp/ +RUN cd /tmp && \ + unzip mpp-develop.zip && \ + cd mpp-develop && \ + mkdir rkmpp_build && \ + cd rkmpp_build && \ + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_FLAGS="-O3 -march=armv8.2-a+simd+crypto -mtune=cortex-a76" \ + -DCMAKE_CXX_FLAGS="-O3 -march=armv8.2-a+simd+crypto -mtune=cortex-a76" \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_TEST=OFF \ + -DHAVE_DRM=ON \ + -DHAVE_AVCODEC=ON \ + -DHAVE_AVFORMAT=ON \ + -DHAVE_LIBV4L2=ON \ + -DHAVE_JPEGD=ON \ + -DHAVE_RKVDEC=ON \ + -DHAVE_RKVENC=ON \ + -DHAVE_MPP_RGA=ON \ + .. && \ + make -j$(nproc) && \ + make install && \ + cd / && \ + rm -rf /tmp/mpp-develop* + +# 编译 RGA +COPY rk-mirrors-linux-rga-multi.zip /tmp/ + +RUN cd /tmp && \ + unzip rk-mirrors-linux-rga-multi.zip && \ + cd rk-mirrors-linux-rga-multi && \ + meson setup . rkrga_build \ + --prefix=/usr \ + --libdir=lib \ + --buildtype=release \ + --default-library=shared \ + -Dcpp_args=-fpermissive \ + -Dlibdrm=false \ + -Dlibrga_demo=false && \ + meson configure rkrga_build && \ + ninja -C rkrga_build install && \ + cd / && \ + rm -rf /tmp/rk-mirrors-linux-rga-multi* + +# 编译 GStreamer 插件 +COPY gstreamer-rockchip-master.zip /tmp/ +RUN cd /tmp && \ + unzip gstreamer-rockchip-master.zip && \ + cd gstreamer-rockchip-master && \ + mkdir build && \ + cd build && \ + meson setup .. \ + --prefix=/usr \ + --libdir=lib/aarch64-linux-gnu \ + --buildtype=release \ + --optimization=3 \ + --default-library=shared \ + -Dc_args="-I/usr/include/rga -I/usr/include/rockchip -I/usr/include/drm -O3 -march=armv8.2-a+simd+crypto -mtune=cortex-a76 -fPIC" \ + -Dc_link_args="-Wl,-Bsymbolic -Wl,-O3" \ + -Dpackage-name="GStreamer Rockchip RK3588" \ + -Dpackage-origin="https://github.com/rockchip-linux/gst-rockchip" \ + -Drockchipmpp=enabled \ + -Drga=enabled && \ + ninja -j$(nproc) && \ + ninja install && \ ldconfig && \ - rm -rf /tmp/build-context && \ - # 在所有 apt 操作完成后,最后进行清理 + cd / && \ + rm -rf /tmp/gstreamer-rockchip-master* && \ rm -rf /var/lib/apt/lists/* + +# 8. 安装 Piper TTS COPY piper_models/ /app/piper_models/ - USER dev - RUN pip install --no-cache-dir --user -i https://mirrors.aliyun.com/pypi/simple/ piper-tts -# 将 ~/.local/bin (包含 piper 二进制文件) 添加到 PATH RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile -# 现在,dev 用户可以使用 `piper` 命令了,只要 shell 环境被正确加载。 -# 我们可以将最终的 CMD 设置为加载环境然后执行一个命令,或者留空让用户交互。 +# 9. 设置默认用户 USER dev -CMD ["/bin/bash"] +CMD ["/bin/bash"] \ No newline at end of file diff --git a/gstreamer-rockchip-master.zip b/gstreamer-rockchip-master.zip new file mode 100644 index 0000000..8016369 Binary files /dev/null and b/gstreamer-rockchip-master.zip differ diff --git a/mpp-develop.zip b/mpp-develop.zip new file mode 100644 index 0000000..571ca19 Binary files /dev/null and b/mpp-develop.zip differ diff --git a/rk-mirrors-linux-rga-multi.zip b/rk-mirrors-linux-rga-multi.zip new file mode 100644 index 0000000..96990fe Binary files /dev/null and b/rk-mirrors-linux-rga-multi.zip differ