软件的安装

安装 Docker

To build the Docker container, Docker need to be installed:

  • please refer to Docker Installation Homepage

  • quick installation

    $ sudo apt-get update
    $ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    $ sudo apt-key fingerprint 0EBFCD88
    $ sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        stable"
    $ sudo apt-get update
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io
    

    注解

    if you have following error message:

    $ docker images
    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
    

    please do:

    $ sudo groupadd docker
    $ sudo usermod -aG docker ${USER}
    $ You would need to loog out and log back (looks like reboot needed) in so that your group membership is re-evaluated
    

    注解

    if you get following error message:

    $ docker container ls -a
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    

    please do:

    $ sudo service docker start
    
  • check if the docker installation is good

    $ docker version
    Client: Docker Engine - Community
     Version:           19.03.3
     API version:       1.40
     Go version:        go1.12.10
     Git commit:        a872fc2f86
     Built:             Tue Oct  8 00:58:10 2019
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.3
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.10
      Git commit:       a872fc2f86
      Built:            Tue Oct  8 00:56:46 2019
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.2.10
      GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
     runc:
      Version:          1.0.0-rc8+dev
      GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    

安装 Docker Compose

To build the Docker Compose:

  • please refer to Docker compose Homepage

  • quick installation (Please check the latest stable version number)

    $ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    $ sudo chmod +x /usr/local/bin/docker-compose
    $ docker-compose --version
    docker-compose version 1.24.1, build 4667896b
    

安装 Charliecloud

The whole system requires to be run with Charliecloud. To install Charliecloud:

  • please refer to Charliecloud Homepage

  • quick installation

    Use Spack to install as a example ( Please refer to Spack package management )

    $ spack install pkg-config # This is bug fix
    $ spack install charliecloud + builder
    
  • check if charliecloud installation is OK

    $ ch-run --version
    0.12~pre+59b5bfd
    

安装 Spack

了解详情,请点击这里

$ git clone https://github.com/spack/spack.git
# Add spack/bin to "PATH"
$ export PATH=/path/of/spack/bin:$PATH
$ . /path/of/spack/share/spack/setup-env.sh
$ spack --version
0.14.2-1486-b80d5e7

制作 Spack 镜像

如果本机(工作机器)无法连接互联网,需要找一台可以连入互联网的计算机,同样安装 Spack ,该台计算机将用于制作 Spack 的镜像软件仓库。

注解

两台计算机必须安装同样版本的 Spack!

在可以连入互联网的计算机上也安装好了 Spack 之后,开始在该计算机上下载安装 METplus 所需要的软件。

  1. 建立一个 specs.txt 文件,列出所需软件:

    gcc@9.2.0
    openmpi@3.1.6
    netcdf-fortran@4.5.2%gcc@9.2.0 ^netcdf-c@4.7.3+parallel-netcdf ^hdf5@1.10.6+fortran
    
  2. 制作需要软件的镜像

    $ spack mirror create -D -f specs.txt
    

    制作完成后,所需软件包下载到如下目录:

    $ home/xinzhang> tree -L 1 /glade/u/home/xinzhang/spack/var/spack/cache
    /glade/u/home/xinzhang/spack/var/spack/cache
    ├── autoconf
    ├── automake
    ├── gdbm
    ├── hdf5
    ├── hwloc
    ├── libiconv
    ├── libpciaccess
    ├── libsigsegv
    ├── libtool
    ├── libxml2
    ├── m4
    ├── ncurses
    ├── netcdf-c
    ├── netcdf-fortran
    ├── numactl
    ├── openmpi
    ├── parallel-netcdf
    ├── perl
    ├── pkgconf
    ├── readline
    ├── _source-cache
    ├── util-macros
    ├── xz
    └── zlib
    
    24 directories, 0 files
    
  3. 打包镜像目录,上传到需要安装软件的工作机器:

    $ cd /glade/u/home/xinzhang/spack/var/spack
    $ tar -zcvf spack_mirror.tgz cache
    
  4. 在工作机器上,设置 Spack 镜像目录

    在工作机器上,将 spack_mirror.tgz 文件解压到一个目录,如:

    $ mkdir -p /home/wrf/spack_mirror
    $ cd /home/wrf/spack_mirror
    $ tar xzvf ~/spack_mirror.tgz
    $ rm ~/spack_mirror.tgz
    

    设置 Spack 镜像目录

    $ spack mirror add local_filesytem file:///home/wrf/spack_mirror/cache
    $ spack mirror list
    local_filesyetm    file:///home/wrf/home/wrf/spack_mirror/cache
    

相关软件安装

  1. 安装编译器 gnu@9.2.0

    • 设置当前编译器

      $ spack compiler find
      ==> Added 1 new compiler to /home/wrf/.spack/linux/compilers.yaml
          gcc@4.8.5
      ==> Compilers are defined in the following files:
          /home/wrf/.spack/linux/compilers.yaml
      
      $ cat /home/wrf/.spack/linux/compilers.yaml
      compilers:
      - compiler:
          spec: gcc@4.8.5
          paths:
            cc: /usr/bin/gcc
            cxx: /usr/bin/g++
            f77: /usr/bin/gfortran
            fc: /usr/bin/gfortran
          flags: {}
          operating_system: centos7
          target: x86_64
          modules: []
          environment:
            unset: []
          extra_rpaths: []
      
    • 安装 gcc@9.2.0

      $ spack install gcc@9.2.0
      $ spack find
      ==> 16 installed packages
      -- linux-centos7-haswell / gcc@4.8.5 ----------------------------
      autoconf@2.69    gcc@9.2.0    gmp@6.1.2  libsigsegv@2.12  m4@1.4.18  mpfr@3.1.6   perl@5.30.2    readline@8.0
      automake@1.16.2  gdbm@1.18.1  isl@0.20   libtool@2.4.6    mpc@1.1.0  ncurses@6.2  pkgconf@1.7.3  zlib@1.2.11
      
    • 装载 gcc@9.2.0

      $ spack load gcc@9.2.0
      $ which gfortran
      ~/spack/opt/spack/linux-centos7-haswell/gcc-4.8.5/gcc-9.2.0-tl6spk7vtzi2ywa3b2ev2hecrcrfuvuc/bin/gfortran
      $ gfortran --version
      GNU Fortran (Spack GCC) 9.2.0
      Copyright (C) 2019 Free Software Foundation, Inc.
      This is free software; see the source for copying conditions.  There is NO
      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      
    • gcc@9.2.0 加入 Spack

      $ spack compiler find
      ==> Added 1 new compiler to /home/wrf/.spack/linux/compilers.yaml
          gcc@9.2.0
      ==> Compilers are defined in the following files:
          /home/wrf/.spack/linux/compilers.yaml
      
  2. 安装 netcdf

    $ spack install netcdf-fortran@4.5.2%gcc@9.2.0 ^netcdf-c@4.7.3+parallel-netcdf ^hdf5@1.10.6+fortran
    $ spack find
    ==> 39 installed packages
    -- linux-centos7-haswell / gcc@4.8.5 ----------------------------
    autoconf@2.69    gcc@9.2.0    gmp@6.1.2  libsigsegv@2.12  m4@1.4.18  mpfr@3.1.6   perl@5.30.2    readline@8.0
    automake@1.16.2  gdbm@1.18.1  isl@0.20   libtool@2.4.6    mpc@1.1.0  ncurses@6.2  pkgconf@1.7.3  zlib@1.2.11
    
    -- linux-centos7-skylake_avx512 / gcc@9.2.0 ---------------------
    autoconf@2.69    hwloc@1.11.11        libtool@2.4.6   netcdf-c@4.7.3        parallel-netcdf@1.12.1  util-macros@1.19.1
    automake@1.16.2  libiconv@1.16        libxml2@2.9.10  netcdf-fortran@4.5.2  perl@5.30.2             xz@5.2.5
    gdbm@1.18.1      libpciaccess@0.13.5  m4@1.4.18       numactl@2.0.12        pkgconf@1.7.3           zlib@1.2.11
    hdf5@1.10.6      libsigsegv@2.12      ncurses@6.2     openmpi@3.1.6         readline@8.0
    
  3. $ spack load -r openmpi@3.1.6
    

安装 METplus

详细安装细节请参照 METplus文档

以3.0.2版本为例:

$ cd METplus-3.0.2
$

安装 METviewer

  1. 制作 METviewer Docker 镜像

    在一台安装了Docker和又互联网连接的机器上,下载 METviewer Docker 镜像

    制作 METviewer 的 Docker 镜像,存为 tar 文件

    $ cd container-dtc-metviewer/METviewer
    $ docker image build -t metviewer .
    # 制作完成
    $ docker image save metviewer -o metviewer.docker.image.tar
    
  2. 将该镜像文件上传到工作机器上 (同时也需要准备mysql的镜像文件),然后加载该镜像

    $ docker image load -i metviewer.docker.image.tar
    0683de282177: Loading layer [==================================================>]  244.9MB/244.9MB
    5714bb8688ee: Loading layer [==================================================>]    173MB/173MB
    ec559b28281c: Loading layer [==================================================>]   1.65GB/1.65GB
    3335b9f0667b: Loading layer [==================================================>]   2.56kB/2.56kB
    1fa73ec3c2f2: Loading layer [==================================================>]  27.03MB/27.03MB
    8872ec41f650: Loading layer [==================================================>]  13.93MB/13.93MB
    989c6a32b856: Loading layer [==================================================>]  44.75MB/44.75MB
    16fa149a25ac: Loading layer [==================================================>]  2.048kB/2.048kB
    Loaded image: metviewer:latest
    
    $ docker image load -i mysql5.7.docker.image.tar
    13cb14c2acd3: Loading layer [==================================================>]  72.49MB/72.49MB
    365386a39e0e: Loading layer [==================================================>]  338.4kB/338.4kB
    c3f46b20a0d3: Loading layer [==================================================>]  9.539MB/9.539MB
    66c45123fd43: Loading layer [==================================================>]    4.2MB/4.2MB
    61cbb8ea6481: Loading layer [==================================================>]  1.536kB/1.536kB
    44853bb67274: Loading layer [==================================================>]  53.75MB/53.75MB
    3a2464d8e0c0: Loading layer [==================================================>]  6.656kB/6.656kB
    91ae264962fb: Loading layer [==================================================>]  3.584kB/3.584kB
    8f0182ef7c8c: Loading layer [==================================================>]  313.1MB/313.1MB
    ac7657905788: Loading layer [==================================================>]  16.38kB/16.38kB
    c90a34afcab0: Loading layer [==================================================>]  1.536kB/1.536kB
    Loaded image: mysql:5.7
    
    $ docker image ls -a
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    metviewer           latest              85b75697b9ee        9 days ago          2.11GB
    mysql               5.7                 9cfcce23593a        11 days ago         448MB
    
  3. 在工作机器上,下载 container-dtc-nwpMETviewer Docker 镜像

    新建工作目录:

    $ cd container-dtc-metviewer
    $ mkdir -p output
    $ mkdir -p mysql
    

    编辑 docker-compose 的配置文件

    $ cd container-dtc-nwp/components/metviewer/
    $ vi docker-compose.yaml
    

    修改路径:

    db:
        image: mysql:5.7
        container_name: mysql_mv
        ports:
            - "6603:3306"
        volumes:
            - /home/wrf/container-dtc-metviewer/output/metviewer/mysql:/var/lib/mysql
    
        environment:
            MYSQL_ROOT_PASSWORD: mvuser
        tty: true
    #
    metviewer:
        image: metviewer
        container_name: metviewer
        ports:
        - "8080:8080"
        volumes:
          - /home/wrf/container-dtc-nwp/components/scripts:/scripts
          - /home/wrf/METout:/data
          - /home/wrf/container-dtc-metviewer/output/metviewer/output/xml:/opt/tomcat/webapps/metviewer_output/xml
          - /home/wrf/container-dtc-metviewer/output/metviewer/output/plots:/opt/tomcat/webapps/metviewer_output/plots
          - /home/wrf/container-dtc-metviewer/output/metviewer/output/data:/opt/tomcat/webapps/metviewer_output/data
          - /home/wrf/container-dtc-metviewer/output/metviewer/output/scripts:/opt/tomcat/webapps/metviewer_output/scripts
        links:
          - db:mysql_mv
        tty: true
    
  4. 启动 METviewer

    $ cd container-dtc-nwp/components/metviewer/
    $ docker-compose up -d
    Creating mysql_mv ... done
    Creating metviewer ... done
    

    打开网页浏览器,输入网址 :http://localhost:8080/metviewer/metviewer1.jsphttp://10.86.41.176:8080/metviewer/metviewer1.jsp

    ../../_images/metviewer_gui.PNG

    注解

    在线图形显示可能有问题,请使用右上角的图形保持功能