38 lines
1.7 KiB
Bash
38 lines
1.7 KiB
Bash
|
|
#!/bin/sh
|
|||
|
|
# =============================================================================
|
|||
|
|
# ClamAV 容器入口脚本(POSIX sh 兼容,Alpine/Debian slim 通用)
|
|||
|
|
# =============================================================================
|
|||
|
|
#
|
|||
|
|
# 逻辑:
|
|||
|
|
# 1) 检查 /var/lib/clamav 是否有 .cvd/.cld 签名库文件
|
|||
|
|
# - 有 → 直接启动 clamd
|
|||
|
|
# - 没有 → 尝试 freshclam 拉取(外网场景),失败则静默降级(内网正常)
|
|||
|
|
# 2) 光闸摆渡导入:用户把 clamav-db-*.tar.gz 解压到 ./data/clamav/ 后
|
|||
|
|
# 下次 docker restart meshsafe-clamav 会自动加载
|
|||
|
|
# =============================================================================
|
|||
|
|
set -eu
|
|||
|
|
|
|||
|
|
DATA_DIR="/var/lib/clamav"
|
|||
|
|
CVD_COUNT=$(ls -1 "$DATA_DIR"/*.cvd "$DATA_DIR"/*.cld 2>/dev/null | wc -l || true)
|
|||
|
|
|
|||
|
|
echo "[init_clamav] ClamAV 签名库检查..."
|
|||
|
|
echo "[init_clamav] 数据目录: $DATA_DIR 已有签名文件: $CVD_COUNT"
|
|||
|
|
|
|||
|
|
if [ "$CVD_COUNT" -eq 0 ]; then
|
|||
|
|
echo "[init_clamav] 签名库为空,尝试 freshclam 拉取(外网环境)..."
|
|||
|
|
if freshclam --stdout 2>&1 | tail -20; then
|
|||
|
|
NEW_COUNT=$(ls -1 "$DATA_DIR"/*.cvd 2>/dev/null | wc -l || true)
|
|||
|
|
echo "[init_clamav] freshclam 成功,新签名文件数: $NEW_COUNT"
|
|||
|
|
else
|
|||
|
|
echo "[init_clamav] freshclam 失败(内网光闸环境正常,等离线导入)"
|
|||
|
|
echo "[init_clamav] 离线导入步骤:"
|
|||
|
|
echo " 1. 外网: bash scripts/sync_clamav_db.sh → 生成 clamav-db-*.tar.gz"
|
|||
|
|
echo " 2. 光闸: 把 tar.gz 摆渡到内网"
|
|||
|
|
echo " 3. 内网: tar -xzf clamav-db-*.tar.gz -C ./data/clamav/"
|
|||
|
|
echo " 4. 内网: docker restart meshsafe-clamav"
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "[init_clamav] 启动 clamd..."
|
|||
|
|
exec clamd --foreground
|