#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
DOCKER_DIR="${PROJECT_ROOT}/docker"
COMMON_DIR="${DOCKER_DIR}/common"
OS="${OS:-openeuler24.03}"
case "$OS" in
openeuler*) OS_FAMILY="openeuler"; REPO_SCRIPT="configure_yum_repo.sh" ;;
ubuntu*) OS_FAMILY="ubuntu"; REPO_SCRIPT="configure_apt_repo.sh" ;;
*) echo "ERROR: 不支持的操作系统: $OS(可选: openeuler24.03 / ubuntu22.04)"; exit 1 ;;
esac
ARCH="$(uname -m)"
if [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "aarch64" ]; then
echo "ERROR: 不支持的 CPU 架构: $ARCH(仅支持 x86_64 / aarch64)"
exit 1
fi
echo "=========================================="
echo "准备 devcontainer 构建上下文"
echo " OS: ${OS}"
echo " OS_FAMILY: ${OS_FAMILY}"
echo " 架构: ${ARCH}"
echo " 上下文目录: ${DOCKER_DIR}"
echo "=========================================="
cd "${DOCKER_DIR}"
MINICONDA_FILE="Miniconda3-py311_26.1.1-1-Linux-${ARCH}.sh"
if [ ! -f "miniconda.sh" ]; then
if [ -f "downloads/${MINICONDA_FILE}" ]; then
echo ">>> 复用已下载的 Miniconda: downloads/${MINICONDA_FILE}"
else
echo ">>> 下载 Miniconda (${ARCH})..."
bash "${COMMON_DIR}/download_miniconda.sh" "${DOCKER_DIR}/downloads" "${ARCH}"
fi
cp "downloads/${MINICONDA_FILE}" "miniconda.sh"
else
echo ">>> Miniconda 已存在: miniconda.sh"
fi
cp "${COMMON_DIR}/${REPO_SCRIPT}" "configure_repo.sh"
cp "${COMMON_DIR}/install_decord_on_arm.sh" "install_decord_on_arm.sh"
mkdir -p "torch_wheels"
touch "torch_wheels/.placeholder"
if [ "$ARCH" = "aarch64" ]; then
if [ ! -d "decord_deps" ] || [ -z "$(ls -A decord_deps 2>/dev/null)" ]; then
echo ">>> 下载 decord 编译依赖(ARM)..."
rm -rf "decord_deps"
bash "${COMMON_DIR}/download_decord_deps.sh" "${DOCKER_DIR}/decord_deps"
else
echo ">>> decord 依赖已存在: decord_deps"
fi
else
mkdir -p "decord_deps"
touch "decord_deps/.placeholder"
fi
echo "=========================================="
echo "构建上下文准备完成"
echo "=========================================="