最近流行りの言語も良いんだが、古い開発言語へのリスペクトも忘れちゃならない。と思う。AI関連で熱いPythonだって、プログラミング教育で注目のSwiftだって、いろんな開発言語での知見を踏まえて開発されたもんだしね。
というわけで、C/C++、アセンブラと来て、今度は実務では全く触ったことのないCOBOLにチャレンジ。
参考サイト
- https://postd.cc/3-open-source-projects-for-modern-cobol-development/
- https://gist.github.com/up1/4967faea083439899f57247ab87a9053
- https://takkaaaaa.com/install-gnu-cobol-on-centos7/
- https://sutepulu.com/set-up-opensource-cobol-centos6-vagrant/
- http://blog.adjust-work.com/680/
- https://qiita.com/kaizen_nagoya/items/9d9a216ce1b7b05dbb43
- http://www.osscons.jp/osscobol/download/
Macではbrewでインストールできるものもあるようだが、Linuxはどうか。
と思って調べてると、DockerHubには、COBOL環境のイメージも結構ある。
“gregcoleman/docker-cobol” というのがあって、Dockerfileも公開されている。それによると、Ubuntuに open-cobol とgcc を入れているようだ。
その他にも、Fedoraにopen-cobol入れた事例、CentOSでソースからコンパイルして環境作った事例、VagrantでCentOSに入れた事例、WindowsのMinGWに入れた事例、「kaizenjapan/cobol」というイメージを使ったパターン、といろいろ出てくる。
DockerHubを調べてみると、Debianにopen-cobol入れたもの、Ubuntuにopen-cobol入れたもの、さらにCGIとして動作させようというものなどもある。数は50個位出てきたが、Dockerfileが無いものも多く、何をベースにしているのかわからないので、そういったものを入れるのはためらわれる。
どうせなので、Alpine Linuxにインストール出来ないか検討してみる。Alpine Linux にとなると、ソースからコンパイルするしか無いようだ。あとは、必要なライブラリが揃うかどうか。
1.ライブラリ関係
- gmp 任意精度で算術演算を行うためのライブラリ。
- これはAlpine用もあった。
- db4 順編成ファイルを読み書きするための、Berkeley DBのライブラリ。
- db4という名前ではなかったが、dbという名前で、Alpine用のパッケージもある模様。
- ncurses 「SCREEN SECTION」というので使うらしい。ただ、入れてない手順もある。
- これもAlpine用があった。
- gcc、make ソースからコンパイルするので必要。
- Alpine用にもちろんそれぞれのパッケージもあるが、gccやmakeを含んだ、build-baseというパッケージがある模様。さらに、build-baseに加えて、abuild(curlとかtarとかが入ってる)にgitも加えた、alpine-sdkというのもある。
とりあえず、gmp、dbを入れて、ビルド環境はbuild-baseでやってみる。
# apk add --no-cache gmp db build-base (1/21) Upgrading musl (1.1.20-r3 -> 1.1.20-r4) (2/21) Installing binutils (2.31.1-r2) (3/21) Installing libmagic (5.35-r0) (4/21) Installing file (5.35-r0) (5/21) Installing gmp (6.1.2-r1) (6/21) Installing isl (0.18-r0) (7/21) Installing libgomp (8.3.0-r0) (8/21) Installing libatomic (8.3.0-r0) (9/21) Installing libgcc (8.3.0-r0) (10/21) Installing mpfr3 (3.1.5-r1) (11/21) Installing mpc1 (1.0.3-r1) (12/21) Installing libstdc++ (8.3.0-r0) (13/21) Installing gcc (8.3.0-r0) (14/21) Installing musl-dev (1.1.20-r4) (15/21) Installing libc-dev (0.7.1-r0) (16/21) Installing g++ (8.3.0-r0) (17/21) Installing make (4.2.1-r2) (18/21) Installing fortify-headers (1.0-r0) (19/21) Installing build-base (0.5-r1) (20/21) Installing db (5.3.28-r1) (21/21) Upgrading musl-utils (1.1.20-r3 -> 1.1.20-r4) Executing busybox-1.29.3-r10.trigger OK: 165 MiB in 33 packages
2.ソースの入手
ソースを落としてきてビルド&インストールできる Linux 用のCOBOLとしては、GnuCOBOL というのがあるので、それを落としてくる。日本向けにGnuCOBOLをカスタマイズした、「opensource COBOL」というのもあるようだが、本家のほうがメンテナンスされているようだったので、本家の方を落としてくる。
# wget https://sourceforge.net/projects/open-cobol/files/gnu-cobol/3.0/gnucobol-3.0-rc1.tar.gz/download # tar zxvf download # cd gnucobol-3.0-rc1 # ./configure configure: Checks for GMP ... checking gmp.h usability... no checking gmp.h presence... no checking for gmp.h... no configure: error: gmp.h (GMP) is required
gmp.hが無いと怒られた。gmp のパッケージ入れただけでは、開発用のライブラリは入らんらしい。別途、gmp-dev というパッケージがあったので、それを入れる。
# apk add --no-cache gmp-dev # ./configure configure: Checks for Berkeley DB ... checking db.h usability... no checking db.h presence... no checking for db.h... no configure: error: Berkeley DB db.h is missing
今度は、db.hが無いと怒られた。これも開発用ライブラリは別パッケージだった。ということで、db-dev というのを入れる。
# apk add --no-cache db-dev # ./configure # make && make install # cobc -version cobc (GnuCOBOL) 3.0-rc1.0 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart Built Apr 14 2019 14:20:30 Packaged Apr 22 2018 22:26:54 UTC C version "8.3.0"
なんか、警告はいろいろ出てたんだが、インストールはできたらしい。
Hello Worldもできたし、手順的にはこれで問題ないようだ。ということで、Dockerfile化してみる。
## Dockerfile FROM alpine WORKDIR /home/cobol RUN set -x && \ apk update && \ apk add --no-cache gmp gmp-dev db db-dev build-base && \ wget https://sourceforge.net/projects/open-cobol/files/gnu-cobol/3.0/gnucobol-3.0-rc1.tar.gz/download && \ tar zxvf download && \ cd gnucobol-3.0-rc1 && \ ./configure && \ make && make install && \ cobc -version CMD ["/bin/sh"] ## docker-compose.yaml version: '3' services: cobol: build: . container_name: cobol volumes: - .:/home/cobol tty: true
一応、このDockerfileでビルドして起動して、Hello Worldのコンパイルが出来るところまでは確認している。