有機化合物の分子構造図 を書けるプログラムchemtoolを使えるようになるまで


Macbookに有機化合物の分子構造図 を書けるプログラムchemtoolをインストールしたかった。
4年前には、Macminiにインストールしているのだがその時のメモが見つからないので、一から再度インストールしてみた。
(MacOS10.15(Catalina)ではDockerを使うことに、結果としてなった。それは最後に記述) 
http://ruby.chemie.uni-freiburg.de/~martin/chemtool/
には、「Windows版はzip形式であるが、Macでは、finkを使えばできるよ」と書いてある。

Finkの準備として
・Xcode のインストール
・JDK のインストール
を行い、
finkはhttps://sourceforge.net/projects/fink/files/ からダウンロードして、

cd Downloads/
tar -xvf fink-0.xx.0.tar
cd fink-0.xx.0
./bootstrap

この後で質問があって「基本的に全てEnterで問題ない」らしいが、
Enterでは処理を中止してしまう質問があったので、注意が必要。

Catalinaで下記の説明があって、InstallFink.tgzをダウンロードして、ダブルクリックするとfinkのインストールが始まった。

macOS 10.9-10.15 では、 helper script を使うことができます。 これは、下のダウンロードとビルドを自動化したものです。

下記コマンドでパスのセットアップを行いターミナルを再起動すればFinkが使える。

/sw/bin/pathsetup.sh

Fink を使ってパッケージをインストールするには
sudo apt-get install パッケージ名

Fink を使ってインストールしたパッケージはデフォルトだと/swディレクトリ配下にインストールされる。

~$ sudo apt-get install chemtool
chemtool (1.6.14-3) を設定しています ...

$ cht -h
The Chemtool drawings analyzer 1.7
***   Gizmo Head Software   ***
    Radek Liboska (c) 2001

syntax: cht [-options] <filename.cht>

Finkのインストールにやたら長い時間が必要だった。(夕方に始めてほったらかして、朝になって見ると終わっていた)

Xcode Toolsをインストールしておく。
MacPortsのサイトからMacPortsをダウンロードしてインストールする。
環境変数の設定、MacPortsは/opt/local以下にインストールされるので、
それに関連した環境変数を設定する。

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/man:$MANPATH

## MacPorts自身とそのリストを最新の状態に更新する
$ sudo port selfupdate

## インストールしたいパッケージを探すコマンドは、
$ port search 検索語句

## パッケージをインストールするコマンドは、
$ sudo port install パッケージ名

## パッケージをアンインストールするコマンドは、
$ sudo port uninstall パッケージ名

Catalinaではインストールできない?

やっとの思いでCatalinaにもfinkをインストールしたものの、下記のエラーです
(2020/05/16時点)

~ $ sudo apt-get install chemtool
Password:
Reading Package Lists... Done
Building Dependency Tree... Done
E: Couldn't find package chemtool

やはりdockerを使うべきなのか..... できた方がいらしたら教えてください。
   ↑  やってみました 追記しています

【余話】
Finkのインストール時に、何も考えず既定値で応答し続けて、インストールができなくて頭を抱えた時に、CentOS上でソースからインストールすればと考えた。

chemtoolのソースをダウンロードして解凍し、.configure のあとmakeを実行すると、下記のエラーなって諦めかけました。

$ make
main.c:18:22: 致命的エラー: gdk/gdkx.h: そのようなファイルやディレクトリはありません
 #include <gdk/gdkx.h>

メッセージを英語にしていたらたぶん
gtk/gtk.h: No such file or directory  かな

yum でgtkをインストールしてもupdateされるだけで、インストールされていたし....
これは、gtkの-develをインストールしたら解決した。

  $ sudo yum install gtk2-devel
  $ sudo yum install gtk3-devel

【すいぶん経ってからの追記】 2020.03.18
CentOSであればパッケージもある
Dockerイメージを作っておけばOSに関わらず使えるようになりそうなので、
試して見る価値がありそうです
epelリポジトリを有効にしてyumでchemtoolをインストール
chtコマンドが動作するかとchemtool 1.6.14 の起動を確認した

$ ssh -Y 192.168.1.1
$ sudo yum --enablerepo=epel install chemtool
$ cht -h
The Chemtool drawings analyzer 1.7
$ chemtool

MacOS 10.15.4(Catalina)ではDockerで実行

Catalinaではfinkのインストールも時間がかかる上に、「apt-get install chemtool」で
「Couldn't find package」となってしまうので、コンテナを作成した。
chemtoolの本来の機能であるGUIではなく、まず、chtコマンドで分子量と分子式を求めるにはこの手順でできました。

ホスト側
x11を起動する(インストールしていなかったらインストールしてください)

$ open -a XQuartz 

XQuartzが起動したらセキュリティ設定(環境設定>セキュリティ)を変更しておく
1. 「接続の認証」をOFF
2. 「ネットワーク・クライアントからの接続」をON

ゲスト側

~ $ docker pull centos:7 
~ $ cd inDir 
inDir $ docker run --name cos7  -d -v $(pwd):/molData centos:7 /sbin/init
inDir $ docker exec -it 96 /bin/bash
[root@737d9cc121b6 /]# yum -y install epel-release 
[root@737d9cc121b6 /]# yum --enablerepo=epel install chemtool
[root@737d9cc121b6 /]# yum -y --enablerepo=epel install openbabel

[root@737d9cc121b6 /]# cd /molData/
[root@737d9cc121b6 molData]# babel -h sample.mol wk.cht
[root@737d9cc121b6 molData]# cht wk.cht 
C90H152O76 [2450.145] Me=2448.8029182640 44.12%C;6.25%H;49.63%O;

次にchemtoolをdcoker上で起動しました。

(Guest:Docker側の準備)
[root@0d79311d4bd7 /]# yum install libX11-devel
[root@0d79311d4bd7 /]# export DISPLAY=host.docker.internal:0.0
(Host:PC側の準備)
# Mac OS X 上で UNIX の X アプリケーションを動作させるためのx11を起動
open -a XQuartz
(Guest:Docker側でchemtoolの起動)
[root@0d79311d4bd7 /]# chemtool

PC上に表示されたchemtoolの画面です

Dockerfileを書いてみた

他の環境でも使いたいと考えたので、Dockerfileを書いておいた方が便利だと、勉強を兼ねて、書いてみました。

FROM centos:7
RUN  yum -y install epel-release &&                \                 
     yum -y --enablerepo=epel install chemtool &&  \  
     yum -y --enablerepo=epel install openbabel && \ 
     yum -y install libX11-devel                
ENV  DISPLAY=host.docker.internal:0.0