#!/bin/bash set -e echo "========== RK1808 Docker 宿主机初始化 ==========" if [ "$(id -u)" != "0" ]; then echo "请使用 root 用户执行" exit 1 fi DOCKER_MIRROR="https://docker.1panel.live" CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME") ARCH=$(dpkg --print-architecture) KERNEL=$(uname -r) echo "[1/8] 系统信息" uname -a cat /etc/os-release || true echo "ARCH=$ARCH" echo "CODENAME=$CODENAME" echo "KERNEL=$KERNEL" echo "[2/8] 安装基础依赖" apt update apt install -y ca-certificates curl gnupg lsb-release apt-transport-https kmod echo "[3/8] 配置 Docker APT 源" install -m 0755 -d /etc/apt/keyrings try_docker_repo() { local name="$1" local base_url="$2" echo "尝试 Docker 源: $name -> $base_url" rm -f /etc/apt/keyrings/docker.asc rm -f /etc/apt/sources.list.d/docker.sources if ! curl -L --connect-timeout 15 --retry 3 --retry-delay 2 \ "$base_url/gpg" -o /etc/apt/keyrings/docker.asc; then echo "$name GPG 下载失败" return 1 fi chmod a+r /etc/apt/keyrings/docker.asc cat > /etc/apt/sources.list.d/docker.sources < /etc/docker/daemon.json < /usr/lib/libswscale.so.5.7.100" ln -sf /usr/lib/libswscale.so.5.7.100 /usr/lib/libswscale.so.5 ln -sf /usr/lib/libswscale.so.5.7.100 /lib/libswscale.so.5 || true ldconfig || true elif [ -e /lib/libswscale.so.5.7.100 ]; then echo "修复 libswscale.so.5 -> /lib/libswscale.so.5.7.100" ln -sf /lib/libswscale.so.5.7.100 /lib/libswscale.so.5 ldconfig || true else echo "警告: 未找到 libswscale.so.5.7.100,后续可能需要手动补 FFmpeg 库" fi fi echo "[7/8] 检查并加载 RK1808 设备节点" if [ ! -e /dev/galcore ]; then echo "/dev/galcore 不存在,尝试加载 galcore.ko" if [ -e "/lib/modules/$KERNEL/galcore.ko" ]; then insmod "/lib/modules/$KERNEL/galcore.ko" || true elif [ -e "/usr/lib/modules/$KERNEL/galcore.ko" ]; then insmod "/usr/lib/modules/$KERNEL/galcore.ko" || true else echo "未找到 galcore.ko" fi fi if lsmod | grep -q "galcore"; then echo "galcore 模块已加载" echo "galcore" > /etc/modules-load.d/galcore.conf depmod || true if [ -e /dev/galcore ]; then echo "存在: /dev/galcore" else echo "警告: galcore 模块已加载,但 /dev/galcore 不存在" fi else echo "警告: galcore 模块未加载" fi for dev in /dev/rga /dev/vpu_service /dev/dri/card0; do if [ -e "$dev" ]; then echo "存在: $dev" else echo "缺失: $dev" fi done if [ -d /lib/npu ]; then echo "存在: /lib/npu" else echo "缺失: /lib/npu" fi echo "[8/8] 输出 Docker 信息" docker version echo docker info | grep -E "Server Version|Storage Driver|Cgroup|Kernel Version|Operating System|Architecture|Registry Mirrors" -A5 || true echo echo "========== 初始化结果汇总 ==========" if command -v docker >/dev/null 2>&1; then echo "Docker: 已安装" else echo "Docker: 未安装" fi if docker info >/dev/null 2>&1; then echo "Docker 服务: 正常" else echo "Docker 服务: 异常" fi if docker info 2>/dev/null | grep -q "$DOCKER_MIRROR"; then echo "Docker 镜像加速: 已配置 $DOCKER_MIRROR" else echo "Docker 镜像加速: 未确认" fi if docker info 2>/dev/null | grep -q "Storage Driver: overlay2"; then echo "Docker 存储驱动: 正常 overlay2" else echo "Docker 存储驱动: 异常,未使用 overlay2" fi for lib in $REQUIRED_LIBS; do if [ -e "$lib" ]; then echo "FFmpeg库: 正常 $lib" else echo "FFmpeg库: 缺失 $lib" fi done for dev in /dev/galcore /dev/rga /dev/vpu_service /dev/dri/card0; do if [ -e "$dev" ]; then echo "设备节点: 正常 $dev" else echo "设备节点: 缺失 $dev" fi done if [ -d /lib/npu ]; then echo "NPU目录: 正常 /lib/npu" else echo "NPU目录: 缺失 /lib/npu" fi echo "========== 初始化完成 =========="