2025-10-13 13:55:15 +08:00
|
|
|
|
FROM arm64v8/ubuntu:22.04
|
2026-01-16 11:28:09 +08:00
|
|
|
|
|
|
|
|
|
|
# 避免交互式提示卡住构建
|
2025-10-13 13:55:15 +08:00
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
2026-01-16 11:28:09 +08:00
|
|
|
|
|
|
|
|
|
|
RUN sed -i 's@//.*ports.ubuntu.com@//mirrors.aliyun.com@g' /etc/apt/sources.list
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第一阶段:安装基础构建工具和 PPA 管理工具
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
2025-10-13 13:55:15 +08:00
|
|
|
|
RUN apt-get update && \
|
|
|
|
|
|
apt-get install -y --no-install-recommends \
|
|
|
|
|
|
sudo \
|
|
|
|
|
|
build-essential \
|
|
|
|
|
|
cmake \
|
2026-01-19 11:02:25 +08:00
|
|
|
|
meson \
|
|
|
|
|
|
ninja-build \
|
2025-10-13 13:55:15 +08:00
|
|
|
|
git \
|
|
|
|
|
|
gdb \
|
|
|
|
|
|
vim \
|
2025-10-20 09:15:55 +08:00
|
|
|
|
unzip \
|
|
|
|
|
|
pkg-config \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
wget \
|
2025-10-20 09:15:55 +08:00
|
|
|
|
software-properties-common \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
gpg-agent && \
|
|
|
|
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第二阶段:添加 PPA 源
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 分开执行,确保网络问题或源失效能被单独定位
|
|
|
|
|
|
RUN apt-get update && apt-get install -y gnupg2 curl && \
|
|
|
|
|
|
# 获取密钥 (如果 keyserver 连不上,多试几次或检查网络)
|
|
|
|
|
|
gpg --keyserver keyserver.ubuntu.com --recv-keys 3CC0D9D1F3F0354B50D24F51F02122ECF25FB4D7 && \
|
|
|
|
|
|
gpg --export 3CC0D9D1F3F0354B50D24F51F02122ECF25FB4D7 > /etc/apt/trusted.gpg.d/jjriek.gpg && \
|
|
|
|
|
|
# 手动添加源地址 (直接指向 content 服务器,绕过 API)
|
|
|
|
|
|
echo "deb [arch=arm64] https://ppa.launchpadcontent.net/jjriek/panfork-mesa/ubuntu jammy main" > /etc/apt/sources.list.d/panfork.list && \
|
|
|
|
|
|
echo "deb [arch=arm64] https://ppa.launchpadcontent.net/jjriek/rockchip/ubuntu jammy main" > /etc/apt/sources.list.d/rockchip.list && \
|
|
|
|
|
|
echo "deb [arch=arm64] https://ppa.launchpadcontent.net/jjriek/rockchip-multimedia/ubuntu jammy main" > /etc/apt/sources.list.d/multimedia.list && \
|
|
|
|
|
|
apt-get update
|
|
|
|
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第三阶段:安装核心依赖库 (Rockchip 专有库 & 基础开发库)
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 注意:每次 RUN 如果涉及 install,最好都先 update,因为层之间的 apt 缓存通常不保留
|
|
|
|
|
|
RUN apt-get update && \
|
2025-10-20 09:15:55 +08:00
|
|
|
|
apt-get install -y --no-install-recommends \
|
2025-10-15 14:27:21 +08:00
|
|
|
|
python3 \
|
|
|
|
|
|
python3-pip \
|
2025-10-13 13:55:15 +08:00
|
|
|
|
libssl-dev \
|
|
|
|
|
|
libspdlog-dev \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
libsqlite3-dev \
|
2025-10-20 09:15:55 +08:00
|
|
|
|
libboost-all-dev \
|
2026-01-21 11:04:34 +08:00
|
|
|
|
libcurl4-openssl-dev \
|
2025-10-20 10:39:14 +08:00
|
|
|
|
librockchip-mpp-dev \
|
2026-01-19 10:24:01 +08:00
|
|
|
|
libdrm-dev \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
libeigen3-dev \
|
|
|
|
|
|
espeak-ng-data \
|
|
|
|
|
|
libespeak1 \
|
|
|
|
|
|
libasound2-plugins \
|
|
|
|
|
|
alsa-utils && \
|
|
|
|
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
2026-01-21 11:04:34 +08:00
|
|
|
|
COPY librga-1.10.0.zip /tmp/
|
|
|
|
|
|
RUN unzip -q /tmp/librga-1.10.0.zip -d /tmp/ && \
|
|
|
|
|
|
# GitHub 的 zip 解压后通常带版本号文件夹,重命名一下方便操作
|
|
|
|
|
|
# 如果解压出来直接是 librga 目录,请根据实际情况调整下面这行
|
|
|
|
|
|
mv /tmp/librga-1.10.0 /tmp/librga && \
|
|
|
|
|
|
\
|
|
|
|
|
|
# --- [关键步骤] 1. 仅复制头文件 ---
|
2026-01-19 11:02:25 +08:00
|
|
|
|
cp -r /tmp/librga/include/* /usr/include/ && \
|
2026-01-21 11:04:34 +08:00
|
|
|
|
\
|
|
|
|
|
|
# --- [严禁操作] 绝对不要执行下面这两行拷贝库的操作!---
|
|
|
|
|
|
# cp -r /tmp/librga/libs/Linux/gcc-aarch64/* /usr/lib/ && \
|
|
|
|
|
|
# ln -sf /usr/lib/librga.so /usr/lib/librga.so.2 && \
|
|
|
|
|
|
\
|
|
|
|
|
|
# --- [关键步骤] 2. 生成 .pc 文件 (骗过编译检查) ---
|
|
|
|
|
|
mkdir -p /usr/lib/pkgconfig && \
|
2026-01-19 15:34:43 +08:00
|
|
|
|
echo "prefix=/usr" > /usr/lib/pkgconfig/librga.pc && \
|
|
|
|
|
|
echo "exec_prefix=\${prefix}" >> /usr/lib/pkgconfig/librga.pc && \
|
|
|
|
|
|
echo "libdir=\${prefix}/lib" >> /usr/lib/pkgconfig/librga.pc && \
|
|
|
|
|
|
echo "includedir=\${prefix}/include" >> /usr/lib/pkgconfig/librga.pc && \
|
|
|
|
|
|
echo "" >> /usr/lib/pkgconfig/librga.pc && \
|
|
|
|
|
|
echo "Name: librga" >> /usr/lib/pkgconfig/librga.pc && \
|
|
|
|
|
|
echo "Description: Rockchip RGA library" >> /usr/lib/pkgconfig/librga.pc && \
|
2026-01-21 11:04:34 +08:00
|
|
|
|
# 这里写 2.1.0 是为了匹配你板子的真实版本
|
|
|
|
|
|
echo "Version: 2.1.0" >> /usr/lib/pkgconfig/librga.pc && \
|
2026-01-19 15:34:43 +08:00
|
|
|
|
echo "Libs: -L\${libdir} -lrga" >> /usr/lib/pkgconfig/librga.pc && \
|
|
|
|
|
|
echo "Cflags: -I\${includedir}" >> /usr/lib/pkgconfig/librga.pc && \
|
2026-01-21 11:04:34 +08:00
|
|
|
|
\
|
|
|
|
|
|
# 清理垃圾
|
|
|
|
|
|
rm -rf /tmp/librga /tmp/librga-1.10.0.zip && \
|
2026-01-19 10:24:01 +08:00
|
|
|
|
ldconfig
|
2026-01-16 11:28:09 +08:00
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第四阶段:安装多媒体和视觉库 (GStreamer & OpenCV)
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
RUN apt-get update && \
|
|
|
|
|
|
apt-get install -y --no-install-recommends \
|
2026-01-26 10:21:21 +08:00
|
|
|
|
ffmpeg \
|
2025-10-20 10:39:14 +08:00
|
|
|
|
gstreamer1.0-rockchip \
|
2025-10-20 09:15:55 +08:00
|
|
|
|
libgstreamer1.0-dev \
|
|
|
|
|
|
libgstreamer-plugins-base1.0-dev \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
gstreamer1.0-alsa \
|
2025-10-20 09:15:55 +08:00
|
|
|
|
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-pulseaudio \
|
2025-10-22 09:50:12 +08:00
|
|
|
|
gstreamer1.0-rtsp \
|
2025-10-20 17:45:43 +08:00
|
|
|
|
libopencv-dev \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
nmap && \
|
|
|
|
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第五阶段:用户与权限配置
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
RUN groupadd -r developers && \
|
2025-10-13 13:55:15 +08:00
|
|
|
|
useradd -ms /bin/bash -g developers -G sudo dev && \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
# 允许组创建失败(如果组已存在),使用 || true
|
|
|
|
|
|
(groupadd -g 20 dialout || true) && \
|
|
|
|
|
|
(groupadd -g 44 video || true) && \
|
|
|
|
|
|
(groupadd -g 110 render || true) && \
|
|
|
|
|
|
(groupadd -g 29 render_alt || true) && \
|
2025-10-13 13:55:15 +08:00
|
|
|
|
usermod -a -G dialout dev && \
|
2025-10-17 17:20:45 +08:00
|
|
|
|
usermod -a -G video dev && \
|
|
|
|
|
|
usermod -a -G render dev && \
|
2025-10-21 18:16:57 +08:00
|
|
|
|
usermod -a -G audio dev && \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd
|
2025-10-20 10:39:14 +08:00
|
|
|
|
|
2026-01-16 11:28:09 +08:00
|
|
|
|
# 配置 umask
|
2025-10-13 13:55:15 +08:00
|
|
|
|
RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \
|
|
|
|
|
|
chmod +x /etc/profile.d/99-shared-umask.sh
|
2026-01-16 11:28:09 +08:00
|
|
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第六阶段:编译第三方源码 (Paho MQTT)
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 建议:确保你有 .dockerignore 文件排除 .git 目录,否则 COPY . 会很慢
|
2025-10-13 13:55:15 +08:00
|
|
|
|
COPY . /tmp/build-context
|
2026-01-16 11:28:09 +08:00
|
|
|
|
|
2025-10-13 13:55:15 +08:00
|
|
|
|
RUN cd /tmp/build-context/external/paho.mqtt.c && \
|
2025-10-20 10:39:14 +08:00
|
|
|
|
cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_BUILD_SAMPLES=OFF -DPAHO_BUILD_DOCUMENTATION=OFF && \
|
2025-10-13 13:55:15 +08:00
|
|
|
|
cmake --build build --target install && \
|
|
|
|
|
|
cd /tmp/build-context/external/paho.mqtt.cpp && \
|
2025-10-20 10:39:14 +08:00
|
|
|
|
cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_BUILD_SAMPLES=OFF -DPAHO_BUILD_DOCUMENTATION=OFF && \
|
2025-10-13 13:55:15 +08:00
|
|
|
|
cmake --build build --target install && \
|
2025-10-20 09:15:55 +08:00
|
|
|
|
rm -rf /tmp/build-context
|
2025-10-20 14:18:37 +08:00
|
|
|
|
|
2026-01-16 11:28:09 +08:00
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第七阶段:安装 RKNN SDK
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
2025-10-20 16:30:40 +08:00
|
|
|
|
COPY rknn_sdk/librknn_api/include/rknn_api.h /usr/local/include/
|
|
|
|
|
|
COPY rknn_sdk/rknn_server/aarch64/usr/bin/rknn_server /usr/bin/rknn_server
|
2025-10-20 14:18:37 +08:00
|
|
|
|
COPY rknn_sdk/librknn_api/aarch64/librknnrt.so /usr/lib/librknnrt.so
|
|
|
|
|
|
COPY rknn_sdk/librknn_api/aarch64/librknn_api.so /usr/lib/librknn_api.so
|
2025-10-20 16:30:40 +08:00
|
|
|
|
COPY rknn_sdk/whl/*.whl /tmp/rknn_wheels/
|
2026-01-16 11:28:09 +08:00
|
|
|
|
|
2025-10-20 16:30:40 +08:00
|
|
|
|
RUN pip3 install /tmp/rknn_wheels/*.whl && \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
rm -rf /tmp/rknn_wheels && \
|
|
|
|
|
|
chmod +x /usr/bin/rknn_server && \
|
|
|
|
|
|
ldconfig
|
2025-10-20 14:18:37 +08:00
|
|
|
|
|
2026-01-16 11:28:09 +08:00
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
|
|
# 第八阶段:Python 环境与运行准备
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
2025-10-20 09:15:55 +08:00
|
|
|
|
COPY piper_models/ /app/piper_models/
|
2026-01-16 11:28:09 +08:00
|
|
|
|
|
2025-10-15 14:34:53 +08:00
|
|
|
|
USER dev
|
2026-01-16 11:28:09 +08:00
|
|
|
|
# 这里的 --no-cache-dir 对于减小镜像体积很重要
|
2025-10-22 15:31:10 +08:00
|
|
|
|
RUN pip install --no-cache-dir --user -i https://mirrors.aliyun.com/pypi/simple/ \
|
|
|
|
|
|
piper-tts \
|
|
|
|
|
|
onvif-zeep \
|
|
|
|
|
|
python-nmap \
|
|
|
|
|
|
psutil \
|
2026-01-16 11:28:09 +08:00
|
|
|
|
paramiko
|
|
|
|
|
|
|
2025-10-15 14:27:21 +08:00
|
|
|
|
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile
|
2026-01-16 11:28:09 +08:00
|
|
|
|
|
2025-10-20 09:15:55 +08:00
|
|
|
|
CMD ["/bin/bash"]
|