2020/11/25

JAGURS on MacOS Big Sur with homebrew

自分の環境のパッケージ管理を MacPorts から homebrew に乗り換えたりしたので改めてJAGURS を作り直してみる.ソースコードは,github から latest release になってる V0515a を持ってくる.使う環境は以下の通り:

MacBook Air (13-inch, 2017)

2.2GHz dual core Intel Core i7

8GB 1600MHz DDR3 memory

Big Sur

ライブラリのインストール

% brew install gmt fftw

 どうやら,proj_api.h が標準include pathに入ってくれなくなった?ようです.ので,

% find /usr/local -name proj_api.h

で探して,出てきたディレクトリを 

PROJ4_DIR=/usr/local/Cellar/proj@7/7.2.1

のように設定して下さい.以下のMakefileでは設定されていません (汚い).

Makefileの編集(編集後のファイルをリンク先に置いておきます)

Makefile@ -> Makefile.SC_ICE されてるので,とりあえず解除してから編集しています.編集箇所は,コンパイラを gcc-10, gfortran-10 にして,ライブラリ関係を /usr/local に設定. -lfftw が必要.MPI= なしに設定.-openmp は -o penmp として機能してしまうので, -fopenmp に修正.

% rm Makefile

% cp Makefile.SC_ICE Makefile

% rcsdiff Makefile

===================================================================

RCS file: Makefile,v

retrieving revision 1.1

diff -r1.1 Makefile

2c2

< FC=ifort

---

> FC=/usr/local/bin/gfortran-10

7,9c7,9

< PROJ4_DIR=/home/G10004/t-katou/JAGURS/local

< CC=icc

< CFLAGS=-g -traceback -I$(PROJ4_DIR)/include

---

> PROJ4_DIR=/usr/local

> CC=/usr/local/bin/gcc-10

> CFLAGS=-I$(PROJ4_DIR)/include

12c12

< BASE=-fpp -assume byterecl

---

> BASE=-cpp

18c18

< FFTW3_LIB=-mkl=sequential

---

> FFTW3_LIB=-lfftw3

23c23

< OPT=-O2 -openmp -openmp-report2 -I$(FFTW3_INCLUDE_DIR)

---

> OPT=-O2 -fopenmp

27c27

< NETCDF=/opt/atlocal/netcdf/4.1.3

---

> NETCDF=/usr/local

31c31

< LIBS=-i-dynamic -L$(NETCDF)/lib -lnetcdff -lnetcdf -L/opt/atlocal/supplibs/lib -lhdf5_hl -lhdf5 -lcurl -lsz -L$(PROJ4_DIR)/lib -lproj $(FFTW3_LIB) # for NetCDF4!

---

> LIBS=-L$(NETCDF)/lib -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lcurl -lsz -lproj $(FFTW3_LIB) # for NetCDF4!

47c47

< MPI=ON

---

> MPI=


あと,mapproject.c の修正が必要です.#include <proj_api.h> の前に #define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H を追加します.

% rcsdiff -p mapproject.c

===================================================================

RCS file: mapproject.c,v

retrieving revision 1.1

diff -p -r1.1 mapproject.c

*** mapproject.c        2020/11/25 05:49:41     1.1

--- mapproject.c        2020/11/25 05:50:08

***************

*** 1,6 ****

--- 1,7 ----

  #include <stdio.h>

  #include <string.h>

  #include <stdlib.h>

+ #define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H

  #include <proj_api.h>


  static  projPJ pj_tmerc, pj_latlong;

 

2020/07/24

Postfix on MacOS

なんか試行錯誤してやっとたどり着いたので記録.自宅などで,private net に隠れた Mac から,プロバイダのSMTPサーバ経由で外にメールを送る設定をする手順.

まず,relayhost を main.cf に設定する.
relayhost = smtpserver.example.com:port#

あとは巷にあふれるSMTPの設定."Mac postfix gmail" とかで検索すると情報いっぱいある.
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes

で,最後にやっと解決できたのは,メールの from アドレスの書き換え.SMTP認証が通っても,from が正しくないと通してくれない.うちの場合は, "Sender address rejected: not owned by user xxx@xxxx.example.com" と言われました.ので,これを強制的に書き換えてあげる必要があって,sender_canonical_maps に変換テーブルを作ってあげる.
sender_canonical_maps = hash:/etc/postfix/sender_canonical
local_header_rewrite_clients = static:all

中身↓
naotaka@(hostname).local email-address-in-provider

% sudo postmap /etc/postfix/sasl_passwd
% sudo postmap /etc/postfix/sender_canonical

(余談)
From アドレスの書き換えには, main.cf の myhostname を書き換えることでも対応可能なようにも思えるのですが,そこでは,naotaka@$myhostname になってしまいます.この naotaka がプロバイダのアカウントと一致してないといけないので,弾かれてしまいました.かつ,xxx@$myhostname の xxx が Mac に存在しないと不達になるという罠もあるので, myhostname は無視で,sender_canonical が正解でした.

(残課題)
SMTPUTF8 is required, but was not offered by host [provider-smtp-server] というエラーは出ていて,どうやら subject に日本語が入っていると通らなくて,crontab でディレクトリに日本語が入ってるスクリプトを起動してると subject に日本語が入ってしまって送れないという罠が残ってます.これはsmtp server 側の機能不足?か,client でencode してあげれば良いだけ?

(参考) https://tech-lab.sios.jp/archives/12289

2020/06/08

Matplotlib on Mac

http://ekbo.blogspot.com/2020/02/matplotlib-on-mac-homebrew.html

混沌としてきた.Catalina にアップグレードするタイミングで, Python 3.8 が供給されたのか,タイミングは分からないけど,自分にとっては同時になってしまった.

>>> import matplotlib.pyplot as plt
ImportError: numpy.core.multiarray failed to import
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/homebrew/lib/python3.7/site-packages/matplotlib/__init__.py", line 205, in <module>
    _check_versions()
  File "/opt/homebrew/lib/python3.7/site-packages/matplotlib/__init__.py", line 190, in _check_versions
    from . import ft2font
ImportError: numpy.core.multiarray failed to import

発端はこいつ.Pythonでグラフが書けなくなった.何が起きているのか全く分からなかったのだが,

% brew search python3

で判明.python@3.8 が供給されていて,インストールされている!!何かが起きても仕方がない状況が生じてしまったようだ...諦めて,

% /opt/homebrew/opt/python@3.8/bin/pip3 install matplotlib

で入れ直し.動いた.3.7 の削除をすべきか?

ps.
pipにしようかどうしようかと思っていたところもあったが,brewでpython入れると,

# You can install Python packages with
# /opt/homebrew/opt/python@3.8/bin/pip3 install <package>
って言われてる.従え.

2020/04/05

montageでフォントエラー

何故か, montage で画像を連結しただけで,フォントエラー

montage: unable to read font `helvetica' @ error/annotate.c/RenderFreetype/1391.

が出た.

対処作が簡潔すぎて驚いたのだが,gs (ghostcript) を入れたら解決とな...

% brew install gs

参考)
https://apple.stackexchange.com/questions/224285/why-does-image-magick-fail-to-read-fonts

2020/02/22

Matplotlib on Mac Homebrew

matplotlibの入れ方更新 -> https://ekbo.blogspot.com/2020/06/Matplotlib-on-Mac.html 2020.6.8

自分がどうするかの宣言も含めて,Mac OS X の Homebrew の Python (Version 3) でどう環境を構築するか.

そもそも Python 自体のインストールが混沌としてしまっている...

  1. QGISのためのパッケージインストール.確か,QGISのインストールで,Python3 をバイナリパッケージで入れろと言われた気がする.
  2. MacPorts がまだ Homebrew への完全移行が終わっていないので残ってる.
  3. Homebrew で入れた

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
/opt/homebrew/bin/python3
/opt/local/bin/python3
/usr/local/bin/python3
一つ多い....

で,Matplotlib をはぢめましょう.と思ったときに,ふと,,,どうすんだ?

確実に,Homebrew の環境で作業するために,
/opt/homebrew/bin/pip3.7 install matplotlib
にしました.pip3 で十分ですが... pip とすると, Version 2 と Version 3 を見失う場合があるので念の為(自分は,Python2 をインストールしていないので混乱しませんが).

#!/opt/homebrew/bin/python3

import sys
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

t = np.arange(0,2*np.pi, 0.1)
plt.figure(1)
plt.plot(t, np.sin(t))
plt.show()

sys.exit(0)

動いた!


2020/02/21

sshpass on Homebrew

MacPorts から, HomeBrew へ乗り換えを進めています.

% brew install sshpass
Error: No available formula with the name "sshpass"
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.

1つ,移行が出来なかったのが sshpass.まぁ,言ってることも分からんでもない.が,今どきログインパスワード(公開鍵を使ってない)な時点で意識低いということで,自分専用端末からだけは使う.

macOS に Homebrew で sshpass をインストールするに書かれているようなHomebrew の中でなんとかする!という方針もありですが,それも面倒なので,ソースから.

どこにあるかは,port に教えてもらう.
% port info sshpass | grep Homepage
Homepage:             http://sourceforge.net/projects/sshpass/

私の趣味的には, ~/local なので,
% ./configure --prefix=$HOME/local
% make
% make install

2020/01/15

M 6.4 - 8km S of Indios, Puerto Rico on 7 Jan. 2020

津波波形データベース構築の一例として,1月7日にプエルトリコで発生した地震による津波のデータ収集と計算をやってみた.

波源断層モデル
Moment Tensor (USGS)
(17.916, 293.187) 13.5 km,  Dip: 43 deg., Strike: 268 deg., Rake: -58 deg.

M0 - S 関係 (cite) から,
(L, W) = (20.0073963517812 km, 10.00369817589060 km)
slip amount: 0.500816743451796 m

DEM作成
GEBCO 2019から,当該領域の切り出し (grdcut) を行った.GEBCO_2019.nc は, grdmath を用いて正負を反転してある.
% grdmath GEBCO/GEBCO_2019/GEBCO_2019.nc NEG = GEBCO_2019.nc

% grdcut -R290/300/15/20 $bathymetry/GEBCO_2019.nc -Ggebco.grd


GEBCO 2019 から切り出した地形データでJAGURSを走らせると,北西の領域端にかかっている島のところで発散が生じた.そのため,周囲3分角(15秒角の12メッシュ)は,水深100 mよりも浅い海と陸地を水深 100 mで固定する修正を grdmask と grdmath で行った.下記は, GMT 6.0.0 (Homebrew on OS X)  を使用している( -I15s は, -I15c に相当).

% cat<<EOF | grdmask -A -Gmask.grd -I15s -Rgebco.grd -N100/100/NaN
290:3  15:3
290:3  19:57
299:57 19:57
299:57 15:3
EOF
% grdmath gebco.grd mask.grd LT mask.grd MUL 0 NAN gebco.grd AND = masked_gebco.grd=cf

(解説)
grdmask で,標準入力から縁取りの4点を入力して, -N 領域外/線上/内側 の値を指定する. -Rgebco.grd で元のDEMと範囲を合わせて,分解能も指定する(-I15s).さらに,大円ではなく直線で四角にするため -A オプションを付ける.
        -A Suppress connecting geographic points using great circle arcs, i.e., connect by straight lines,
           unless m or p is appended to first follow meridian then parallel, or vice versa.

験潮所
ITIC (International Tsunami Information Center) のアラートで 0.02 mの津波が観測されたようなので,UNESCO IOC Sea Level Station Monitoring Facilityevent からMagueyes Island PR staion のデータを "show data" から取得. 200〜2000秒のバンドパスフィルタをかけた.


(lat, lon) = (17.9701, -67.0464)  だったが,DEMに重ね合わせると,ずれていたので, (17.9636, 292.9536) に移動した.

JAGURS計算
設定した断層パラメータで, dt=1.0 s で計算した.

2020/01/12

autofs & NFS on Catalina (途中経過)

データ共有がNFSでされているので,Macからも autofs 使って NFS にあるデータにアクセスできるようにしていたのですが, Catalina にした瞬間からアクセス不能. autofs は動いているようで,マウント先ディレクトリの作成は出来てる.が,remote の情報が必要になる瞬間から, ls しても, no such file or directory になってしまう.2台とも同じ症状なので, Catalina化が原因なのはほぼ確定.Mojave がなくなってしまったので確定とまではいかないけど...

どうやら,「【解決済】macOS Catalinaで NFS マウントに失敗する。(stale NFS file handle or permission denied)」のように,MacOS を NFS サーバにしていると, /etc/exports の書き方が変わった(相対パス→絶対パス)ようで,そのトラブルが多い模様.

私の場合 autofs / automount から NFS をマウントしているだけど, automount によるマウントポイントのディレクトリは作成されるものの, ls しても無いと言われる・・・ので, NFS クライアントに何らかの不具合がありそう.

と思ったけど, mount_nfs 使って手動でマウントしたところ,アクセスできた!ということは,automount から NFS クライアントへの連携のところか...

(一旦,公開)

2020/01/09

JAGURS on Catalina with HPC Compiler for MacOS X

HPC Compiler for MacOS X を Catalina で使うには,ちょっと面倒なようです.

コマンドラインで gcc を利用すると,「開発元を検証できないため開けません。」というポップアップが表示されてしまいます.よくあるセキュリティ上の警告ですが,なにせ,実行ファイルを1つ1つ対処してあげなければいけないので,JAGURS を make するには,

/usr/local/bin/gcc
/usr/local/bin/gfortran
/usr/local/libexec/gcc/x86_64-apple-darwin19/9.2.0/cc1
/usr/local/libexec/gcc/x86_64-apple-darwin19/9.2.0/collect2

の4つが必要でした.さらに,実行時にダイナミックライブラリのリンクでも必要で, .dylib 毎に聞かれます・・・一気にYesにする方法もありますが,ちまちまやるとしたら,システム環境設定を開いておくと,一つ一つ聞かれました.Ctrl+open よりは楽です.



2020/01/06

iLogScanner

いくつかのサーバ運用を今でもやっていますが,可能な限り省力化したいところ.その中で,ログ監視をやらなきゃいけないので, iLogScanner を使っていますが,備忘録がなかったので自分用のメモです.

やることは簡単で,ダウンロードして,展開して,

iLogScanner/1_bin/iLogScanner.sh mode=cui logtype=apache accesslog=log1,log2... reporttype=html level=detail outdir=$outdir

とかです.accesslog= のところは,複数ファイルをカンマ区切りで繋ぎます.日付ごとにファイルが異なる場合には,ファイルリストが必要になるので,スクリプトを作ると良いでしょう.閲覧用に reporttype=html と日々のメール送信用に reporttype=text の両方を実行しています.

あと,java が必要なので,
 % sudo yum install java-1.8.0-openjdk
しました.

参考)
iLogScannerでログのセキュリティスキャンを自動化する