diff --git a/bioflow_kernel/docker/build_envs.sh b/bioflow_kernel/docker/build_envs.sh new file mode 100755 index 0000000..1b4eaa5 --- /dev/null +++ b/bioflow_kernel/docker/build_envs.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# build_envs.sh —— 非内核环境镜像构建(plantai-env-* 系列, playbook §8 台账 9-24 号) +# 方法: docs/bioflow_image_build_playbook.md; 与 build_all.sh 同级的第二个构建入口。 +# 用法: build_envs.sh [pack-dir] +# pack-dir: 存放 conda-pack 产物 .tar.gz 的目录; 默认 bioflow-image-build。 +set -euo pipefail + +TARGET="${1:-all}" +PACK_DIR="${2:-/home/xzq/5090/teamWorkspace/zh/bioflow-image-build}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DF_DIR="$SCRIPT_DIR/extra-envs" +TAG="${PLANTAI_ENV_TAG:-20260906}" + +# 镜像名 -> 源 tar(构建顺序: 大 tar 先行, I/O 平摊) +declare -A TARS=( + [minerupy312]=minerupy312.tar.gz + [at-sc]=at_sc.tar.gz + [snpeff]=snpeff.tar.gz + [plantai-bff]=plantai-bff.tar.gz + [rice-download]=rice_download.tar.gz + [rice-rna]=rice_rna-dp.tar.gz + [beagle54]=beagle54-dp.tar.gz + [bioinfo]=bioinfo.tar.gz + [testpy311]=testpy311.tar.gz + [ani]=ani-dp.tar.gz + [vcflinshi]=vcflinshi-dp.tar.gz + [biolabx-assembly]=biolabx-assembly.tar.gz + [biolabx-bioinfo]=biolabx-bioinfo-missing.tar.gz + [biolabx-smoke-tools]=biolabx-smoke-tools.tar.gz + [biolabx-variant-tools]=biolabx-variant-tools.tar.gz + [pymol-env]=pymol-env.tar.gz +) +ORDER=(minerupy312 at-sc snpeff plantai-bff rice-download rice-rna beagle54 bioinfo \ + testpy311 ani vcflinshi biolabx-assembly biolabx-bioinfo biolabx-smoke-tools \ + biolabx-variant-tools pymol-env) + +build_one() { + local img="$1" + local tarf="${TARS[$img]}" + [[ -f "$PACK_DIR/$tarf" ]] || { echo "[FAIL] missing pack artifact: $tarf" >&2; return 2; } + # 构建上下文: pack-dir 下 stage(硬链接 tar, 同文件系统; 非内核镜像无源码) + local stage + stage="$(mktemp -d "$PACK_DIR/.buildenv.XXXXXX")" + ln "$PACK_DIR/$tarf" "$stage/$tarf" + echo "[BUILD] plantai-env-$img ($tarf)" + docker build \ + --build-arg BASE_IMAGE="ubuntu:24.04" \ + --build-arg ENV_TAR="$tarf" \ + -f "$DF_DIR/Dockerfile.plantai-env-$img" \ + -t "plantai-env-$img:$TAG" \ + "$stage" + rm -rf "$stage" + echo "[OK] plantai-env-$img" +} + +if [[ "$TARGET" == "all" ]]; then + for img in "${ORDER[@]}"; do + build_one "$img" + done +else + IFS=, read -ra IMGS <<< "$TARGET" + for img in "${IMGS[@]}"; do + [[ -n "${TARS[$img]:-}" ]] || { echo "unknown image: $img" >&2; exit 2; } + build_one "$img" + done +fi diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-ani b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-ani new file mode 100644 index 0000000..a076d46 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-ani @@ -0,0 +1,40 @@ +# plantai-env-ani —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: ani; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-at-sc b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-at-sc new file mode 100644 index 0000000..bbd4d35 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-at-sc @@ -0,0 +1,41 @@ +# plantai-env-at-sc —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: at_sc; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-beagle54 b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-beagle54 new file mode 100644 index 0000000..68ce8ff --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-beagle54 @@ -0,0 +1,40 @@ +# plantai-env-beagle54 —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: beagle54; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-bioinfo b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-bioinfo new file mode 100644 index 0000000..c67e139 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-bioinfo @@ -0,0 +1,41 @@ +# plantai-env-bioinfo —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: bioinfo; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-assembly b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-assembly new file mode 100644 index 0000000..4a7ba47 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-assembly @@ -0,0 +1,41 @@ +# plantai-env-biolabx-assembly —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: biolabx-assembly; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-bioinfo b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-bioinfo new file mode 100644 index 0000000..6978f67 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-bioinfo @@ -0,0 +1,41 @@ +# plantai-env-biolabx-bioinfo —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: biolabx-bioinfo-missing; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-smoke-tools b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-smoke-tools new file mode 100644 index 0000000..75ac51a --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-smoke-tools @@ -0,0 +1,41 @@ +# plantai-env-biolabx-smoke-tools —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: biolabx-smoke-tools; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-variant-tools b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-variant-tools new file mode 100644 index 0000000..7b306cd --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-biolabx-variant-tools @@ -0,0 +1,41 @@ +# plantai-env-biolabx-variant-tools —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: biolabx-variant-tools; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-minerupy312 b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-minerupy312 new file mode 100644 index 0000000..ed6b185 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-minerupy312 @@ -0,0 +1,41 @@ +# plantai-env-minerupy312 —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: minerupy312; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-plantai-bff b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-plantai-bff new file mode 100644 index 0000000..a087d28 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-plantai-bff @@ -0,0 +1,41 @@ +# plantai-env-plantai-bff —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: plantai-bff; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-pymol-env b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-pymol-env new file mode 100644 index 0000000..4dee509 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-pymol-env @@ -0,0 +1,41 @@ +# plantai-env-pymol-env —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: pymol-env; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-rice-download b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-rice-download new file mode 100644 index 0000000..f3ea454 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-rice-download @@ -0,0 +1,41 @@ +# plantai-env-rice-download —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: rice_download; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-rice-rna b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-rice-rna new file mode 100644 index 0000000..3759c56 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-rice-rna @@ -0,0 +1,41 @@ +# plantai-env-rice-rna —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: rice_rna; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-snpeff b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-snpeff new file mode 100644 index 0000000..91416fe --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-snpeff @@ -0,0 +1,41 @@ +# plantai-env-snpeff —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: snpeff; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-testpy311 b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-testpy311 new file mode 100644 index 0000000..45ee512 --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-testpy311 @@ -0,0 +1,41 @@ +# plantai-env-testpy311 —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: testpy311; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN conda-unpack && \ + rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-vcflinshi b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-vcflinshi new file mode 100644 index 0000000..e449cee --- /dev/null +++ b/bioflow_kernel/docker/extra-envs/Dockerfile.plantai-env-vcflinshi @@ -0,0 +1,40 @@ +# plantai-env-vcflinshi —— 环境镜像化(非内核, 无 .so 编译段) +# 源环境: vcflinshi; 方法: docs/bioflow_image_build_playbook.md +# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。 +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} AS unpack + +ARG ENV_TAR +COPY ${ENV_TAR} /tmp/env.tar.gz +RUN mkdir -p /opt/conda && \ + (tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \ + rm -f /tmp/env.tar.gz && \ + test -n "$(ls -A /opt/conda/bin)" + +# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python) +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# conda-unpack 重定位 + conda 桩/源前缀痕迹清理 + pip entry point shebang 修复 +# (pip 脚本 shebang 写死源前缀, conda-unpack 不重定位; 2026-09-06 pymol-env 实测) +RUN rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate /opt/conda/bin/mamba /opt/conda/bin/micromamba /opt/conda/bin/conda-unpack && \ + rm -rf /opt/conda/bin/__pycache__ && \ + for f in $(grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null || true); do \ + sed -i '1s|.*|#!/opt/conda/bin/python|' "$f"; \ + done && \ + echo "UNPACK OK" + +FROM ${BASE_IMAGE} + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 && rm -rf /var/lib/apt/lists/* +COPY --from=unpack /opt/conda /opt/conda +ENV LD_LIBRARY_PATH=/opt/conda/lib +ENV PATH=/opt/conda/bin:$PATH +ENV LANG=C.UTF-8 +# 干净性断言(镜像红线, 构建期强制): 无 /home/xzq、无 conda 可执行、 +# 无 conda-unpack 残留、bin 无源前缀 shebang +RUN test ! -e /home/xzq && \ + ! command -v conda && ! command -v mamba && ! command -v micromamba && \ + test ! -e /opt/conda/bin/conda-unpack && \ + ! grep -rlE '^#!.*home/xzq' /opt/conda/bin 2>/dev/null | grep -q . && \ + echo "CLEAN OK" diff --git a/docs/bioflow_image_build_playbook.md b/docs/bioflow_image_build_playbook.md index fae43c4..9f028a1 100644 --- a/docs/bioflow_image_build_playbook.md +++ b/docs/bioflow_image_build_playbook.md @@ -13,7 +13,8 @@ ## 2. 适用范围 - **本次(8 个)**:test4py311(16G)→bioflow-gf / gfpy312(5.4G)→bioflow-gfpy / rnaseq(6.1G)→bioflow-rnaseq / rnaR(2.7G)→bioflow-rnaR / ASAW(5.1G)→bioflow-wgs / interproscanpy311(750M)→bioflow-interproscan / panfamily(1.8G)→bioflow-pan / r_de_analysis(1.6G)→bioflow-rde -- **后续(其余 18 个环境,见 §8 台账)**:AI_env / ani / at_sc / beagle54 / bioinfo / minerupy312 / rice_download / rice_rna / snpeff / testpy311 / vcflinshi / plantai-bff / pymol-env(venv) / biolabx-assembly / biolabx-bioinfo-missing / biolabx-smoke-tools / biolabx-variant-tools / miniconda3(base) +- **后续(2026-09-06 已完成 16 个,见 §8 台账)**:ani / at_sc / beagle54 / bioinfo / minerupy312 / rice_download / rice_rna / snpeff / testpy311 / vcflinshi / plantai-bff / pymol-env / biolabx-assembly / biolabx-bioinfo-missing / biolabx-smoke-tools / biolabx-variant-tools → 镜像 plantai-env-*:20260906。 + **豁免 3 个(不建镜像,理由记入 §8)**:AI_env(12K 空壳仅 conda-meta/etc 目录)、r_de(11M 残壳,r_de_analysis 的旧残留)、miniconda3 base(78G conda 本体,违反「镜像无 conda」红线) ## 3. 前置检查 @@ -103,6 +104,24 @@ USER root 16. **BuildKit 上下文外软链**:docker build 对上下文外绝对软链按上下文根解析失败;stage 目录建在 pack-dir 下用硬链接 tar + rsync 内核源码(源码仅 ~22M)。 +17. **conda-pack -n 需要 conda 在 PATH**(2026-09-06 实测):nohup/后台脚本里 `conda-pack -n ` + 报 `CondaPackError: Failed to determine path to environment`——它调 conda 解析 env 路径, + PATH 里没有 conda 时即失败(-p 路径打包不受影响)。修法:脚本开头 + `export PATH=/home/xzq/miniconda3/bin:$PATH` 或 `env PATH=... conda-pack`。 +18. **pip 覆盖检测阻断打包**(2026-09-06 实测):env 内 pip 装过 conda 不管理的文件时报 + `Files managed by conda were found to have been deleted/overwritten`(pymol-env 174 个、 + minerupy312 多个)。这些是宿主既有历史,非本次改动——加 `--ignore-missing-files` 打包。 +19. **无 python 的工具环境(dest-prefix 路线)**(2026-09-06 实测,ani/beagle54/rice_rna/vcflinshi): + 环境无 bin/python(纯 C/Java/R/perl 工具)时 conda-unpack 无法运行(shebang 是 env python, + 装系统 python3 也因包内文本重定位逻辑可跑但绕)。正解:`conda-pack -n -d /opt/conda` + 打包期直接重定位到目标前缀,产物无 conda-unpack;Dockerfile 只需解包+删 conda 桩。 +20. **pip entry point shebang 写死源前缀**(2026-09-06 pymol-env 实测):conda-unpack 不重定位 + pip 装的 console_scripts(pymol/pip/wheel 等 6 个 shebang 仍是 /home/xzq/...)。 + Dockerfile unpack 段统一 `sed -i '1s|.*|#!/opt/conda/bin/python|'` 修复, + 最终层断言 `! grep -rlE '^#!.*home/xzq' /opt/conda/bin` 构建期拦截。 +21. **conda-unpack 脚本本体含源前缀**:包内 conda-unpack 是文本脚本含源前缀字符串, + 重定位完成后必须删(与 conda 桩同批),否则镜像内仍有 /home/xzq 文本痕迹。 + ## 8. 环境总台账(26 个,动态回填) | # | 环境 | 位置 | 体积 | 镜像 | 用途 | 状态 | @@ -115,24 +134,25 @@ USER root | 6 | interproscanpy311 | miniconda3/envs | 707M | bioflow-interproscan | 结构域注释 | 已完成(2026-09-06) | | 7 | panfamily | miniconda3/envs | 1.8G | bioflow-pan | 泛基因家族 pangene | 已完成(2026-09-06) | | 8 | r_de_analysis | miniconda3/envs | 611M | bioflow-rde | DE 分析 | 已完成(2026-09-06) | -| 9 | AI_env | miniconda3/envs | 12K | — | 空壳(仅目录) | 后续 | -| 10 | ani | miniconda3/envs | 95M | — | ANI 计算 | 后续 | -| 11 | at_sc | miniconda3/envs | 8.9G | — | 拟南芥单细胞 | 后续 | -| 12 | beagle54 | miniconda3/envs | 393M | — | Beagle imputation | 后续 | -| 13 | bioinfo | miniconda3/envs | 295M | — | 通用生信 | 后续 | -| 14 | minerupy312 | miniconda3/envs | 8.1G | — | MinerU 文档解析 | 后续 | -| 15 | rice_download | miniconda3/envs | 417M | — | 水稻数据下载 | 后续 | -| 16 | rice_rna | miniconda3/envs | 455M | — | 水稻 RNA | 后续 | -| 17 | snpeff | miniconda3/envs | 5.1G | — | SnpEff 注释 | 后续 | -| 18 | testpy311 | miniconda3/envs | 149M | — | 测试环境 | 后续 | -| 19 | vcflinshi | miniconda3/envs | 79M | — | VCF 处理 | 后续 | -| 20 | plantai-bff | miniconda3/envs | 553M | — | BFF 服务 | 后续 | -| 21 | pymol-env | dev 仓库 tools/(venv) | 1.3G | — | PyMOL 可视化 | 后续 | -| 22 | biolabx-assembly | ~/.local/share/mamba/envs | 225M | — | QA 测试工具 | 后续 | -| 23 | biolabx-bioinfo-missing | ~/.local/share/mamba/envs | 1.3G | — | QA 测试工具 | 后续 | -| 24 | biolabx-smoke-tools | ~/.local/share/micromamba/envs | 217M | — | QA 测试工具 | 后续 | -| 25 | biolabx-variant-tools | ~/.local/share/micromamba/envs | 284M | — | QA 测试工具 | 后续 | -| 26 | miniconda3 (base) | miniconda3 | 78G | — | conda 本体 | 后续 | +| 9 | AI_env | miniconda3/envs | 12K | — | 空壳(仅 conda-meta/etc) | **豁免**:空壳无内容,不建 | +| 10 | ani | miniconda3/envs | 95M | plantai-env-ani | ANI 计算(fastANI, 无 python→dest-prefix) | 已完成(2026-09-06) | +| 11 | at_sc | miniconda3/envs | 8.9G | plantai-env-at-sc | 拟南芥单细胞(R 4.6.1) | 已完成(2026-09-06) | +| 12 | beagle54 | miniconda3/envs | 393M | plantai-env-beagle54 | Beagle imputation(无 python→dest-prefix) | 已完成(2026-09-06) | +| 13 | bioinfo | miniconda3/envs | 295M | plantai-env-bioinfo | 通用生信(bwa) | 已完成(2026-09-06) | +| 14 | minerupy312 | miniconda3/envs | 8.1G | plantai-env-minerupy312 | MinerU 文档解析 | 已完成(2026-09-06) | +| 15 | rice_download | miniconda3/envs | 417M | plantai-env-rice-download | 水稻数据下载(SRA) | 已完成(2026-09-06) | +| 16 | rice_rna | miniconda3/envs | 455M | plantai-env-rice-rna | 水稻 RNA(无 python→dest-prefix, 补 gcc) | 已完成(2026-09-06) | +| 17 | snpeff | miniconda3/envs | 5.1G | plantai-env-snpeff | SnpEff 注释 | 已完成(2026-09-06) | +| 18 | testpy311 | miniconda3/envs | 149M | plantai-env-testpy311 | 测试环境 | 已完成(2026-09-06) | +| 19 | vcflinshi | miniconda3/envs | 79M | plantai-env-vcflinshi | VCF 处理(perl, 无 python→dest-prefix) | 已完成(2026-09-06) | +| 20 | plantai-bff | miniconda3/envs | 553M | plantai-env-plantai-bff | BFF 服务(uvicorn) | 已完成(2026-09-06) | +| 21 | pymol-env | dev 仓库 tools/ | 1.3G | plantai-env-pymol-env | PyMOL 可视化(conda 环境无 pyvenv.cfg, conda-pack -p 打包) | 已完成(2026-09-06) | +| 22 | biolabx-assembly | mamba/envs | 225M | plantai-env-biolabx-assembly | 组装工具(megahit) | 已完成(2026-09-06) | +| 23 | biolabx-bioinfo-missing | mamba/envs | 1.3G | plantai-env-biolabx-bioinfo | QA 测试工具(STAR) | 已完成(2026-09-06) | +| 24 | biolabx-smoke-tools | micromamba/envs | 217M | plantai-env-biolabx-smoke-tools | QA 测试工具 | 已完成(2026-09-06) | +| 25 | biolabx-variant-tools | micromamba/envs | 284M | plantai-env-biolabx-variant-tools | QA 测试工具(bcftools) | 已完成(2026-09-06) | +| 26 | miniconda3 (base) | miniconda3 | 78G | — | conda 本体 | **豁免**:含 conda 本体违反镜像红线 | +| 27 | r_de | miniconda3/envs | 11M | — | r_de_analysis 旧残留(conda-meta 4 文件) | **豁免**:残壳非独立环境 | > 台账中「(待测)」体积与「(待确认)」用途由执行 agent 在构建过程中实测/核实后回填。 @@ -158,3 +178,22 @@ USER root | ASAW | 12m40s | 2.0G(40%) | ~40s | 5.43GB | ~4min | python 3.8.18/gatk 4.3.0.0/bwa-mem2/plink 1.90/CLEAN | | panfamily | 6m55s | 625M(35%) | ~20s | 1.96GB | ~2min | python 3.11.9/mafft/iqtree/fimo/blastp/orthofinder/CLEAN | | r_de_analysis | 7m13s | 589M(96%) | ~20s | 1.88GB | 3m25s | python 3.14.6/R 4.4.3+DESeq2/CLEAN | +| ani | 5s | 31M | dest-prefix 免 unpack | 178MB | 23s | fastANI 1.34/CLEAN(无 python 环境) | +| beagle54 | 33s | 271M | dest-prefix 免 unpack | 648MB | 47s | beagle(镜像内 java 自足)/CLEAN(无 python) | +| rice_rna | 3m49s | 549M | dest-prefix 免 unpack | 1.96GB | 1m39s | Rscript/CLEAN(无 python, 补 gcc 系统软链) | +| vcflinshi | 22s | 26M | dest-prefix 免 unpack | 173MB | 22s | perl/CLEAN(无 python) | +| rice_download | 4m30s | 178M | ~10s | 569MB | 1m18s | python 3.10.20/fasterq-dump 3.4.1/CLEAN | +| plantai-bff | 2m14s | 178M | ~10s | 608MB | 1m23s | python 3.11.15/uvicorn 0.52.4/CLEAN | +| bioinfo | 25s | 97M | ~8s | 366MB | 1m6s | python 3.14.5/bwa/CLEAN | +| testpy311 | 31s | 72M | ~8s | 289MB | 1m2s | python 3.11.15/pip/CLEAN | +| snpeff | 9m35s | 1.8G | ~25s | 5.62GB | 4m12s | python 3.14.5/java 11/snpEff/CLEAN | +| at_sc | 15m24s | 4.0G(45%) | ~40s | 9.24GB | ~6min | python 3.11.6/R 4.6.1/CLEAN | +| minerupy312 | 11m58s | 4.3G(53%) | ~40s | 8.58GB | ~5min | python 3.12.13/mineru/CLEAN(--ignore-missing-files) | +| pymol-env | 6m3s | 414M(32%) | ~25s | 1.38GB | 2m36s | python 3.12.13/pymol shebang 修复/CLEAN(--ignore-missing-files) | +| biolabx-assembly | 25s | 80M | ~8s | 298MB | 1m5s | python 3.14.6/megahit/CLEAN | +| biolabx-bioinfo-missing | 1m15s | 410M | ~12s | 1.43GB | 1m41s | python 3.13.14/STAR 2.7.11b/CLEAN | +| biolabx-smoke-tools | 58s | 78M | ~8s | 289MB | 1m4s | python 3.14.6/CLEAN | +| biolabx-variant-tools | 39s | 125M | ~9s | 457MB | 1m10s | python 3.14.6/bcftools 1.23.1/CLEAN | + +> 注: 上表 16 行均为 2026-09-06 实测; 无 python 的 4 环境走 --dest-prefix 打包(免 conda-unpack); +> 全部 16 镜像通过 §6 清单 + 加强断言(无 conda-unpack 残留、bin 无源前缀 shebang)。