236 lines
5.6 KiB
Bash
236 lines
5.6 KiB
Bash
#!/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 <<EOF
|
|
Types: deb
|
|
URIs: $base_url
|
|
Suites: $CODENAME
|
|
Components: stable
|
|
Architectures: $ARCH
|
|
Signed-By: /etc/apt/keyrings/docker.asc
|
|
EOF
|
|
|
|
if apt update; then
|
|
echo "$name Docker 源配置成功"
|
|
return 0
|
|
else
|
|
echo "$name apt update 失败"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
if try_docker_repo "清华源" "https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian"; then
|
|
echo "使用清华 Docker 源"
|
|
elif try_docker_repo "阿里源" "https://mirrors.aliyun.com/docker-ce/linux/debian"; then
|
|
echo "使用阿里 Docker 源"
|
|
elif try_docker_repo "Docker 官方源" "https://download.docker.com/linux/debian"; then
|
|
echo "使用 Docker 官方源"
|
|
else
|
|
echo "所有 Docker 源配置失败,请检查网络"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[4/8] 安装 Docker"
|
|
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
|
|
echo "[5/8] 配置 Docker 镜像加速和 overlay2 存储驱动"
|
|
mkdir -p /etc/docker
|
|
|
|
cat > /etc/docker/daemon.json <<EOF
|
|
{
|
|
"registry-mirrors": [
|
|
"$DOCKER_MIRROR"
|
|
],
|
|
"log-driver": "none",
|
|
"features": {
|
|
"containerd-snapshotter": false
|
|
},
|
|
"storage-driver": "overlay2"
|
|
}
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable docker
|
|
systemctl restart docker
|
|
|
|
echo "当前 Docker 存储驱动:"
|
|
docker info | grep -E "Storage Driver|driver-type" -A3 || true
|
|
|
|
echo "[6/8] 检查 FFmpeg 动态库"
|
|
|
|
REQUIRED_LIBS="
|
|
/lib/libavformat.so.58
|
|
/lib/libavcodec.so.58
|
|
/lib/libavutil.so.56
|
|
/lib/libswresample.so.3
|
|
/lib/libswscale.so.5
|
|
"
|
|
|
|
for lib in $REQUIRED_LIBS; do
|
|
if [ -e "$lib" ]; then
|
|
echo "存在: $lib"
|
|
else
|
|
echo "缺失: $lib"
|
|
fi
|
|
done
|
|
|
|
echo "查找 libswscale:"
|
|
find /lib /usr/lib -name "libswscale.so*" || true
|
|
|
|
if [ ! -e /lib/libswscale.so.5 ] && [ ! -e /usr/lib/libswscale.so.5 ]; then
|
|
if [ -e /usr/lib/libswscale.so.5.7.100 ]; then
|
|
echo "修复 libswscale.so.5 -> /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 "========== 初始化完成 =========="
|