Debian 上部署 Fortran 程序的实用流程
一 准备环境
- 安装编译器与基础工具:
- 更新索引并安装 gfortran 与构建工具:sudo apt update && sudo apt install -y gfortran build-essential cmake。
- 验证安装:gfortran --version。
- 可选:使用 Fortran Package Manager(fpm) 管理依赖与构建(适合现代 Fortran 项目):
- 下载并安装 fpm(示例为 v0.9.0):
- wget https://github.com/fortran-lang/fpm/releases/download/v0.9.0/fpm-0.9.0-linux-x86_64.tar.gz
- tar -xzf fpm-0.9.0-linux-x86_64.tar.gz
- sudo mv fpm-0.9.0-linux-x86_64 /opt/fpm
- echo ‘export PATH=/opt/fpm/bin:$PATH’ >> ~/.bashrc && source ~/.bashrc
- 新建与运行项目:fpm new myapp && cd myapp && fpm run。
二 构建方式
- 方式 A 直接编译(适合小型或单文件程序)
- 单文件:gfortran -O2 -o myapp main.f90
- 多文件:gfortran -O2 -o myapp main.f90 mod1.f90 sub1.f90
- 开启调试信息:gfortran -g -O0 -o myapp main.f90
- 方式 B 使用 fpm(适合模块化、可依赖管理的项目)
- 构建与运行:fpm build、fpm run
- 指定优化:fpm build --profile release
- 方式 C 使用 CMake(适合与 C/C++ 混合或复杂工程)
- 最小 CMakeLists.txt 示例:
- cmake_minimum_required(VERSION 3.16)
- project(MyApp LANGUAGES Fortran)
- add_executable(myapp main.f90)
- 构建步骤:
- mkdir -p build && cd build
- cmake -DCMAKE_BUILD_TYPE=Release …
- make -j$(nproc)
三 依赖与兼容处理
- 外部库(如 BLAS/LAPACK、NetCDF、MPI)优先通过 APT 安装开发包(通常命名为 libxxx-dev),并在链接时添加对应标志(如 -lblas -llapack)。
- 代码兼容性建议:
- 优先使用 Fortran 90/95/2003/2008 标准特性,减少编译器扩展依赖。
- 对平台/编译器差异使用条件编译或抽象接口。
- 模块化设计,降低耦合,便于跨平台与单元测试。
四 打包与系统级部署
- 系统级安装(适合多用户或生产环境)
- 方案 1:使用 CPack 生成 DEB 包
- 在 CMake 中加入:include(CPack)
- 构建后执行:cpack -G DEB 生成 .deb,再用 sudo dpkg -i myapp-*.deb 安装。
- 方案 2:使用 stow 进行“用户级”安装(避免污染系统目录)
- 编译时指定安装前缀:./configure --prefix=$HOME/.local(或 CMake 中设置 CMAKE_INSTALL_PREFIX)
- 安装:make install
- 管理:stow -d $HOME/.local stow/myapp(将程序链接到 $HOME/.local/bin 等)
- 容器化分发(便于环境一致与复现)
- 示例 Dockerfile(多阶段构建,减小镜像体积):
- FROM debian:bookworm-slim AS build
- RUN apt update && apt install -y gfortran cmake build-essential && rm -rf /var/lib/apt/lists/*
- WORKDIR /src
- COPY . .
- RUN mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release … && make -j$(nproc)
- FROM debian:bookworm-slim
- RUN apt update && apt install -y libgfortran5 && rm -rf /var/lib/apt/lists/*
- WORKDIR /app
- COPY --from=build /src/build/myapp /usr/local/bin/
- CMD [“myapp”]
- 构建与运行:docker build -t myapp:debian . && docker run --rm myapp:debian
五 运行与运维建议
- 使用非 root 用户运行;将可执行文件放入 /usr/local/bin 或 $HOME/.local/bin 并在 PATH 中。
- 配置文件与数据文件建议使用 /etc/myapp/、/var/lib/myapp/、$HOME/.config/myapp/ 等标准路径。
- 日志建议输出到 stdout/stderr 或 /var/log/myapp/,便于 systemd 管理。
- 健康检查与自启动:编写 systemd 服务单元(myapp.service),使用 ExecStart=/usr/local/bin/myapp,设置 Restart=on-failure。
- 版本与回滚:保留最近 2–3 个二进制与配置版本;使用 stow 或包管理器进行快速切换。