checkinstall 使用メモ

履歴

  • 2022-05-25 高橋芳幸 新規作成

動機

debian パッケージを作ってみようかと思い検索していたら checkinstall というのを見つけたので, 試しにそれを使ってみた.

方針

checkinstall を使って, ispack, gtool5, spml の debian パッケージを作成する. それら debian パッケージでインストールできるライブラリを使って DCPAM をコンパイルする.

準備

checkinstall のインストール

$ sudo apt install checkinstall

ruby のインストール

$ sudo apt install ruby

MPI, NetCDF のインストール

$ sudo apt install openmpi-bin libopenmpi-dev
$ sudo apt install netcdf-bin libnetcdff-dev

ispack

$ wget http://www.gfd-dennou.org/library/ispack/ispack-1.0.4.tar.gz
$ tar xvf ispack-1.0.4.tar.gz
$ cd ispack-1.0.4

Mkinclude を下のように変更.

FFLAGS          = -O3
--->
FFLAGS          = -O3 -fopenmp -fPIE

MPIFFLAGS       = -O3
--->
MPIFFLAGS       = -O3 -fopenmp -fPIE

Makefile の最後に下の行を追加.

install:
        cp libisp.a /usr/local/ispack/lib/libispack.a

make

$ make

ディレクトリがないと checkinstall が止まるので一時的に ディレクトリを作る.

$ sudo mkdir -p /usr/local/ispack/lib

パッケージの作成

$ checkinstall --type=debian --install=no --pkglicense=unknown

ディレクトリを削除

$ sudo rm -r /usr/local/ispack

できたパッケージをインストール

$ sudo dpkg -i ispack_1.0.4-1_amd64.deb

gtool

$ wget http://www.gfd-dennou.org/library/gtool/gtool5/gtool5_current.tgz
$ tar xvf gtool5_current.tgz
$ cd gtool5-20160613

$ export FC=mpif90
$ export FFLAGS=
$ export SYSFFLAGS="-I/usr/include"
$ ./configure \
      --with-netcdf-include=/usr/include/netcdf.inc \
      --with-netcdf=/usr/lib/x86_64-linux-gnu/libnetcdf.so \
      --with-netcdff=/usr/lib/x86_64-linux-gnu/libnetcdff.a \
      --enable-mpi
$ make
$ make test

一時的にディレクトリを作成 (ここではパーミッションも変えないといけないらしい)

$ sudo mkdir -p /usr/local/gtool5/lib
$ sudo chmod 777 /usr/local/gtool5/lib

パッケージの作成

$ checkinstall --type=debian --install=no --pkglicense=unknown

ディレクトリを削除

$ sudo rm -r /usr/local/gtool5

できたパッケージをインストール

$ sudo dpkg -i gtool5_20160613-1_amd64.deb

spml

$ wget http://www.gfd-dennou.org/library/spmodel/spml_current.tar.gz
$ tar xvf spml_current.tar.gz
$ cd spml-0.8.0

$ export FC=mpif90
$ export FCFLAGS="-O3 -fopenmp -fPIE"
$ ./configure \
      --with-netcdf=/usr/lib/x86_64-linux-gnu/libnetcdf.so \
      --with-netcdff=/usr/lib/x86_64-linux-gnu/libnetcdff.a \
      --with-netcdf-include=/usr/include/netcdf.h \
      --with-gtool5=/usr/local/gtool5/lib/libgtool5.a \
      --with-ispack=/usr/local/ispack/lib/libispack.a    \
      --with-mpifc=/usr/bin/mpif90            \
      --with-mpiexec=/usr/bin/mpiexec

libsrc/Makefile から ef_module を含む行・部分を削除. (ef_module 関連のコンパイルで止まるため. 原因不明.)

コンパイル

$ make

テスト

$ make test

一時的にディレクトリを作成

$ sudo mkdir -p /usr/local/spmodel/lib
$ sudo chmod 777 /usr/local/spmodel/lib/

パッケージの作成

$ checkinstall --type=debian --install=no --pkglicense=unknown

ディレクトリの削除

$ sudo rm -r /usr/local/spmodel

できたパッケージをインストール

$ sudo dpkg -i spml_0.8.0-1_amd64.deb

DCPAM

$ wget http://www.gfd-dennou.org/library/dcpam/dcpam5/dcpam5-20180304-2.tgz

$ tar xvf dcpam5-20180304-2.tgz
$ cd dcpam5-20180304-2

$ export FC=/usr/local/spmodel/bin/mpispmfrt
$ export FFLAGS="-O3 -fopenmp -pedantic -DSJPACK -DSLTT2D1DMONOTONIC"
$ ./configure \
    --with-netcdf=/usr/lib/x86_64-linux-gnu/libnetcdf.so \
    --with-netcdff=/usr/lib/x86_64-linux-gnu/libnetcdff.a \
    --with-netcdf-include=/usr/include/netcdf.mod \
    --with-ispack=/usr/local/ispack/lib/libispack.a \
    --with-gtool5=/usr/local/gtool5/lib/libgtool5.a \
    --with-spml=/usr/local/spmodel/lib/libspml-omp.a \
    --enable-mpi
$ make

感想

  • ここまでに書いた方法で debian パッケージは作れる.
  • gtool や spml に付随するコマンド (例えば mpispmfrt) のパスが問題.
    • /usr/bin の下にシンボリックを作れば良いのだが, それはどのようにすれば良いのかな.
  • 様々な情報の付加が課題.

参考ページ