SGDASS的安装教程

SGDASS 全称为 Space Geodesy Data Analysis Software System,是 Leonid Petrov 博士开发的空间测地数据分析软件套装。SGDASS 主要用于甚长基线干涉测量(Very Long Baseline Interferometry, VLBI)数据分析,也可以作为空间测地数据处理流程的一部分。

Leonid 已经写了非常详细的官方安装说明,并提供了自动化安装脚本 sgdass_install.py。自动化安装脚本的目的显然是尽量简化安装过程,减少用户手动处理依赖和配置的麻烦。本文试图在官方说明的基础上进行简化和补充,以方便国内同行安装 SGDASS。

注:本文最初写于 2022 年,后根据 2023 年及之后的安装经验进行过更新。SGDASS 版本更新较快,安装前请务必以官方页面、安装包中的 INSTALL 文件以及官方安装说明为准。本文主要记录我在 Linux 环境下的安装流程和注意事项。

说明

官方安装说明中提到:

SGDASS fully supports Linux and MACOS.

不过,根据我的实际经验,SGDASS 在 macOS 上的安装并不一定顺利。我和 Leonid 曾在 macOS Sonoma 14.1.1 上进行过尝试,但没有成功完成安装。

因此,从可复现性和节省时间的角度出发,我个人更建议在 Linux 环境下安装和使用 SGDASS。至于 macOS,除非有明确需求,否则不建议作为首选安装环境。

下面的安装说明主要面向 Linux 系统。

1. 安装库函数依赖

SGDASS 需要的依赖大体可以分为两类。

第一类是通常需要由系统包管理器安装的依赖,因此一般需要 root 权限或 sudo 权限。例如:

  • tcsh,并且 csh 应该是指向 tcsh 的符号链接;
  • X11 相关头文件和工具;
  • perl
  • python3,版本应为 3.4 或更高。

第二类是可以由系统包管理器安装,也可以从源代码编译安装的依赖。例如:

  • PostScript 阅读器,例如 ImageMagick;
  • GIF 阅读器,例如 ImageMagick;
  • gcc
  • g++
  • gfortran
  • CMake

下面分别以 Fedora 和 Ubuntu 为例,给出安装这些软件包的命令。不同 Linux 发行版和版本中的软件包名称可能略有差异,因此以下命令仅作参考。若安装失败,应根据系统提示查找对应的软件包名称。

在 Fedora 上,可以参考:

sudo yum install tcsh gcc gcc-c++ gcc-gfortran perl libX11-devel libXp-devel libXt-devel xorg-x11-server-utils ImageMagick-devel

在 Ubuntu 22.04 LTS 上,可以参考:

sudo apt-get install tcsh gcc gfortran cmake g++ libx11-dev libxt-dev x11-xserver-utils imagemagick autoconf m4 libtirpc-dev

此外,SGDASS 需要使用许多第三方开源软件包。这些软件包可能已经存在于 Linux 系统中,但并非所有系统自带版本都能直接与 SGDASS 协同工作,因为 SGDASS 对部分软件包的编译方式有特殊要求。因此,比较稳妥的做法是使用 SGDASS 提供的安装流程,对这些第三方软件包进行编译安装。

安装 SGDASS 需要较新的 gccgfortran,通常要求版本为 8.0.0 或更高。更低版本的编译器可能无法正常工作。SGDASS 提供了安装新版本 gccg++gfortran 的方法,因此如果系统自带编译器版本较低,也可以按照官方流程重新编译安装这些编译器。

2. 安装前的准备

首先需要创建相应的工作目录。SGDASS 使用固定的目录名称,而且这些目录通常位于根目录下。因此,需要直接创建这些目录,或者设置符号链接。

我更推荐第二种方式:先在自己的工作空间中创建 SGDASS 根目录,然后把根目录下需要的目录名软链接到实际工作目录。

首先设置 SGDASS 的根目录。请将下面的路径替换成你自己的安装位置:

sgdass_home="/path/to/your/sgdass/home"

然后运行以下脚本创建目录和符号链接。

需要特别注意:下面的脚本会在根目录下创建一系列符号链接,例如 /apr/opt64/vlbi 等。运行前请务必确认这些路径没有被系统或其他软件使用。如果某个路径已经存在且不是符号链接,脚本会停止运行,并要求你手动检查。

#!/usr/bin/env bash

set -euo pipefail

sgdass_home="/path/to/your/sgdass/home"

if [ -z "${sgdass_home}" ] || [ "${sgdass_home}" = "/" ]; then
  echo "Error: sgdass_home is empty or invalid."
  exit 1
fi

dirs=(
  "apr" "auto" "cont" "dist" "images" "image_orig" "incoming" "l0" "l1a"
  "l1b" "l2" "l3" "logs" "opt64" "progs" "scr" "sde" "sol" "vlbi" "imls"
)

for dir in "${dirs[@]}"; do
  mkdir -p "${sgdass_home}/${dir}"
  chmod 775 "${sgdass_home}/${dir}"

  if [ -L "/${dir}" ]; then
    sudo rm "/${dir}"
  elif [ -e "/${dir}" ]; then
    echo "Error: /${dir} already exists and is not a symbolic link."
    echo "Please check it manually before continuing."
    exit 1
  fi

  sudo ln -s "${sgdass_home}/${dir}" "/${dir}"
done

接下来继续创建 SGDASS 所需的子目录:

mkdir -p "${sgdass_home}/apr/eop"                 # apriori Earth orientation parameters
mkdir -p "${sgdass_home}/apr/eph"                 # apriori ephemerides
mkdir -p "${sgdass_home}/apr/iono"                # apriori ionosphere data
mkdir -p "${sgdass_home}/apr/load_bds"            # apriori mass loading time series in bindisp format
mkdir -p "${sgdass_home}/apr/load_hps"            # apriori mass loading harmonic variations
mkdir -p "${sgdass_home}/apr/psolve"              # apriori files for pSolve
mkdir -p "${sgdass_home}/apr/sou"                 # apriori source positions
mkdir -p "${sgdass_home}/apr/spd"                 # apriori station path delays
mkdir -p "${sgdass_home}/apr/sta"                 # apriori station positions
mkdir -p "${sgdass_home}/apr/temp"                # apriori temporary files

mkdir -p "${sgdass_home}/l2/gvf"                  # Level 2 VLBI data in GVF format
mkdir -p "${sgdass_home}/l2/vda"                  # Level 2 VLBI data in vgosda format
mkdir -p "${sgdass_home}/l2/vdb"                  # Level 2 VLBI data in vgosdb format

mkdir -p "${sgdass_home}/logs/sgdass"             # logs from SGDASS installation

mkdir -p "${sgdass_home}/scr/pima"                # PIMA related files created during processing
mkdir -p "${sgdass_home}/scr/psolve"              # temporary files created by pSolve
mkdir -p "${sgdass_home}/scr/psolve/cgm_dir"      # auxiliary combined global matrices created by pSolve
mkdir -p "${sgdass_home}/scr/psolve/tpd"          # auxiliary path-delay files created by pSolve
mkdir -p "${sgdass_home}/scr/psolve/spool_dir"    # listings of solutions generated by pSolve
mkdir -p "${sgdass_home}/scr/psolve/sub_matrices" # auxiliary temporary files created by pSolve
mkdir -p "${sgdass_home}/scr/psolve/work_dir"     # auxiliary files used by pSolve

mkdir -p "${sgdass_home}/sol/heo"                 # High-frequency Earth orientation parameter VLBI solutions
mkdir -p "${sgdass_home}/sol/qua"                 # Quarterly VLBI solutions
mkdir -p "${sgdass_home}/sol/rewei"               # Reweighting VLBI solutions
mkdir -p "${sgdass_home}/sol/rfc"                 # Astrometric VLBI solutions

mkdir -p "${sgdass_home}/vlbi/vtd_data"           # data files for VTD

mkdir -p "${sgdass_home}/imls/oper_model"         # IMLS operational models
mkdir -p "${sgdass_home}/imls/devel_model"        # IMLS development models

然后在 SGDASS 官方页面 下载最新的软件包,并将其保存在 ${sgdass_home}/incoming 目录下。以下命令中的版本号仅作示例,实际安装时请替换成官方页面显示的最新版本:

cd "${sgdass_home}/incoming"
wget http://astrogeo.org/data_archive/sgdass-YYYYMMDD.tar

例如,如果当前官方版本为 sgdass-20260516.tar,则命令为:

cd "${sgdass_home}/incoming"
wget http://astrogeo.org/data_archive/sgdass-20260516.tar

随后在 ${sgdass_home}/progs 下解压:

cd "${sgdass_home}/progs"
tar -xvf ../incoming/sgdass-YYYYMMDD.tar

如果下载的是 sgdass-20260516.tar,则对应为:

cd "${sgdass_home}/progs"
tar -xvf ../incoming/sgdass-20260516.tar

软件包通常包括:

  • 第三方软件的源代码;
  • SGDASS 安装包;
  • 安装配置示例文件;
  • 官方安装说明文件。

设置用户组权限:

umask 002

如果使用 tcsh,可以在 ~/.cshrc 中添加以下内容。如果没有该文件,可以新建:

setenv LD_LIBRARY_PATH "/opt64/lib:/opt64/lib64:/usr/lib64:/usr/lib"
setenv PATH "/opt64/bin:/opt64/psolve/bin:${PATH}"

3. 安装编译器和 CMake

编译器和 SGDASS 的安装建议在 tcsh 环境中进行。

可以使用下面的命令进入 tcsh

tcsh

SGDASS 支持通过编译源代码的方式,将 gccg++gfortran 安装在 /opt64 目录下。

进入 SGDASS 安装目录。下面路径中的版本号请根据实际下载的版本进行修改:

cd ${sgdass_home}/progs/sgdass

复制 gcc 安装配置示例文件,并将新文件命名为 gcc_linux.cnf

cp example_gcc_linux.cnf gcc_linux.cnf

打开 gcc_linux.cnf,根据实际情况进行修改。通常情况下,不需要做太多修改,或者只需要更改 num_proc 变量的值。Leonid 在较新的配置文件中已经将其设为 all,因此可以根据机器情况决定是否保留默认设置。

运行以下命令安装编译器和相关工具:

python3 sgdass_install.py -c gcc_linux.cnf build all

这一过程可能需要较长时间,具体取决于机器性能和网络情况。

4. 安装 SGDASS

SGDASS 的安装过程同样由配置文件控制。示例文件通常为 example_sgdass_linux.cnf。复制该文件:

cp example_sgdass_linux.cnf sgdass_linux.cnf

然后打开 sgdass_linux.cnf,根据机器实际情况进行修改。

需要特别注意:配置文件中软件包的顺序很重要,不建议随意修改。

自动安装命令为:

python3 sgdass_install.py -c sgdass_linux.cnf build all
python3 sgdass_install.py -c sgdass_linux.cnf postinstall all

如果机器上已经安装过 SGDASS,那么在执行安装指令之前,需要先关闭 SGDASS 相关的所有进程,尤其是 pSolve 相关进程。

整个过程可能需要相当长的时间,从几小时到几天不等,具体取决于机器性能、网络情况和需要编译的软件包数量。

5. 安装后的设置

建议使用 tcsh 启动 SGDASS 中的程序。假设使用 tcsh,可以进行如下配置。

5.1 配置 ~/.login

~/.login 中添加以下内容。如果没有该文件,可以新建:

limit coredumpsize     0
limit stacksize        8000000
limit maxproc          16384
limit descriptors      2048
setenv GOMP_STACKSIZE  2000000

5.2 配置 ~/.Xdefaults

~/.Xdefaults 中添加以下内容:

pgxwin.Win.iconize:     True
pgxwin.Win.geometry: 1080x750+0+50
pgxwin.server.visible: True
pgxwin.Win.maxColors:   230

其中,第二行确定了 DIAGI 软件的窗口尺寸,可以根据实际显示器尺寸进行修改。

5.3 配置 ~/.tcshrc

~/.tcshrc 中添加以下内容:

# For SGDASS
setenv PGPLOT_DEV  "/XW"                      # default graphics device
setenv PGPLOT_XW_MARGIN "1.0"                 # display margins
setenv PGPLOT_XSIZE_MM 400.0                  # width of the PGPLOT window

setenv LD_LIBRARY_PATH /opt64/lib:/opt64/lib64:/usr/lib:/usr/lib64
setenv PATH "/opt64/bin:/opt64/psolve/bin:${PATH}"
setenv PSOLVE_SAVE_DIR "/opt64/share/psolve"

xrdb -merge ~/.Xdefaults

保存配置文件后,重新打开终端,或重新加载相应配置文件。

6. 可能遇到的问题

SGDASS 的安装过程比较复杂,涉及编译器、系统库、X11、PGPLOT、pSolve 以及多个第三方软件包。因此,在安装过程中可能会遇到其他问题。

我在另一篇文章“安装 SGDASS 可能遇到的问题及解决方案”中对部分问题进行了总结,欢迎参考。

最后再次提醒:SGDASS 更新较快,不同版本的依赖、配置文件和安装流程可能会有所差异。实际安装时,请优先参考官方页面、安装包中的 INSTALL 文件和最新安装说明。