Dockerで開発環境:COBOL編

最近流行りの言語も良いんだが、古い開発言語へのリスペクトも忘れちゃならない。と思う。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のコンパイルが出来るところまでは確認している。

 

 

タグ: # #
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA