有機化合物の分子構造図 を書けるプログラム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を使うべきなのか..... できた方がいらしたら教えてください。
　　　↑ 　やってみました　[追記](#macos-10154catalinaでは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
```
![スクリーンショット 2020-03-18 14.00.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/38e7d449-dcd3-c623-99d1-72455ec23488.png)

## 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の画面です
![スクリーンショット 2020-05-19 16.18.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/68ac46d6-34fa-381a-c91e-021682dc2b35.png)

### 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 
```