GNU AWK 5.0をGoogle Cloud プラットフォームで使ってみる -インストール編-


目的

Google Cloud プラットフォーム(以下GCP)を最近触り始めたのと、
「GNU AWK 5.0が出た!」ということで、GCPで仮想マシンインスタンス(以下VMI)を作成するところから通しでまとめてみようと思います。

Publickey記事
GNU AWK 5.0がリリース。8年ぶりのメジャーバージョンアップ。正規表現ライブラリがGLIBCからGNULIBへ移行、名前空間が実装

VMI作成

Google ChromeでGoogleアカウントにログインして、GCPのプロジェクトを開きます。
GCPのダッシュボードから「ナビゲーションメニュー」→「Compute Engine」→「VMインスタンス」とクリック。
VMIが1個もない状態だと下記のような表示になるようなので、素直に「作成」ボタンをクリックします。

「インスタンスの作成」画面では、今回はお試しでGNU AWK 5.0を使ってみたいだけなので、設定は弄らずに最下部の「作成」ボタンをクリック。なお、デフォルトOSはDebian GNU/Linux 9 (stretch)が指定されています。
クリックから1分弱でVMIが立ち上がりました。
「接続」列の「SSH」ボタンをクリックすると、ブラウザでコンソールが開きます。

VMIへGNU AWK 5.0をインストール

以下のQiita記事を参考しつつ、立ち上げたVMIへGNU AWK 5.0をインストールします。
GNU AWK 5.0を早速インストールしてみる

事前準備

まずはaptでupdateとupgradeをしておきます。

$ sudo apt update
・・・[結果省略]
$ sudo apt upgrade -y
・・・[結果省略]

次に、現時点でインストールされているawkのバージョンを確認します。

$ awk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

compiled limits:
max NF             32767
sprintf buffer      2040

デフォルトでmawk入ってる。軽くググったところgawkより2倍くらい早いらしいです。
これはこれで使ったことがないので興味がありますが、今回はgawkを触ります。

ソースの入手・展開

URLを指定してファイルをダウンロードするwgetコマンドを使います。
ファイルのURLはGNUオペレーティングシステムから「ソフトウェア」→「gawk」→「ftp server」と辿ったところ、以下のインデックスが見つかりました。

最新で圧縮形式がgzのものは以下のURLでした。(2019/05/07執筆時点)
https://ftp.gnu.org/gnu/gawk/gawk-5.0.0.tar.gz
wgetでダウンロードします。

$ wget https://ftp.gnu.org/gnu/gawk/gawk-5.0.0.tar.gz
--2019-05-07 06:02:00--  https://ftp.gnu.org/gnu/gawk/gawk-5.0.0.tar.gz
Resolving ftp.gnu.org (ftp.gnu.org)... 209.51.188.20, 2001:470:142:3::b
Connecting to ftp.gnu.org (ftp.gnu.org)|209.51.188.20|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5763496 (5.5M) [application/x-gzip]
Saving to: ‘gawk-5.0.0.tar.gz’
gawk-5.0.0.tar.gz            100%[=============================================>]   5.50M  25.2MB/s    in 0.2s    
2019-05-07 06:02:00 (25.2 MB/s) - ‘gawk-5.0.0.tar.gz’ saved [5763496/5763496]
$ ls gawk-5.0.0.tar.gz
gawk-5.0.0.tar.gz

無事ダウンロードできたので展開します。

$ tar -zxvf gawk-5.0.0.tar.gz
・・・展開結果は省略
$ cd gawk-5.0.0
$ ls
ABOUT-NLS   ChangeLog.0   configure     extras        int_array.c  mkinstalldirs  posix        symbol.c
aclocal.m4  cint_array.c  configure.ac  field.c       interpret.h  mpfr.c         POSIX.STD    test
array.c     cmd.h         COPYING       floatcomp.c   io.c         msg.c          profile.c    TODO
AUTHORS     command.c     custom.h      floatmagic.h  m4           NEWS           protos.h     version.c
awkgram.c   command.y     debug.c       gawkapi.c     main.c       NEWS.0         README       vms
awkgram.y   compile       depcomp       gawkapi.h     Makefile.am  NEWS.1         README_d     ylwrap
awk.h       config.guess  doc           gawkmisc.c    Makefile.in  node.c         re.c
awklib      configh.in    eval.c        gettext.h     mbsupport.h  nonposix.h     replace.c
builtin.c   config.rpath  ext.c         INSTALL       missing      pc             str_array.c
ChangeLog   config.sub    extension     install-sh    missing_d    po             support

いい感じです。

ビルド

展開したファイルのうちREADMEとINSTALLを読んでみたところ、以下の記載がありました。

"README"より
If you don't have Bison, use the awkgram.c file here.

"INSTALL"より
Briefly, the shell command `./configure && make && make install'
hould configure, build, and install this package.

Bisonは入っていないのでawkgram.cを実行してみましょう。
そもそもgccも入っていないので、gccのインストールからです。

$ sudo apt install gcc -y
・・・[結果省略]
$ gcc -dumpversion
6.3.0

無事gccをインストールできたのでawkgram.cを実行します。

$ gcc ./awkgram.c
In file included from awkgram.y:31:0:
./awk.h:196:17: fatal error: dfa.h: No such file or directory
 #include "dfa.h"
                 ^
compilation terminated.

出来ないんかーい。
"use"というのは実行しろとは違う意味なのかもしれません。
要はBisonをインストールすればいいのだろうと当たりをつけて、aptでインストールします。

$ sudo apt install bison -y
・・・[結果省略]
$ bison -V
bison (GNU Bison) 3.0.4
Written by Robert Corbett and Richard Stallman.

Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

無事インストールできました。
では、INSTALLファイルの記述に従い、ビルドコマンドを実行してみます。
ただし、コマンドが3つ繋がっているので一つ一つ実行していきます。(上手くいくか分からない+それぞれ挙動を観察したいので)
まずは./configureの実行です。

$ ./configure
・・・[一部省略]
config.status: error: Something went wrong bootstrapping makefile fragments
    for automatic dependency tracking.  Try re-running configure with the
    '--disable-dependency-tracking' option to at least be able to build
    the package (albeit without support for automatic dependency tracking).
See `config.log' for more details

エラーのようです。メッセージに従い、オプションを追加して再実行します。

$ ./configure --disable-dependency-tracking
・・・[一部省略]
config.status: creating Makefile
config.status: creating po/Makefile.in
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing libtool commands

今度は正常終了したようです。
次はmakeを実行します。
makeもデフォルトでは入っていなかったのでaptインストールしました。

$ sudo apt install make -y
・・・[結果省略]
$ make
・・・[結果省略]

makeの出力結果はエラーとも成功とも出ないのでイマイチよくわかりません。
ひとまず成功したものと思ってmake installを実行します。

$ make install
Making install in support
make[1]: Entering directory '/home/km_wd0066/gawk-5.0.0/support'
make[2]: Entering directory '/home/km_wd0066/gawk-5.0.0/support'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/km_wd0066/gawk-5.0.0/support'
make[1]: Leaving directory '/home/km_wd0066/gawk-5.0.0/support'
Making install in .
make[1]: Entering directory '/home/km_wd0066/gawk-5.0.0'
make[2]: Entering directory '/home/km_wd0066/gawk-5.0.0'
 /bin/mkdir -p '/usr/local/bin'
  ./install-sh -c gawk '/usr/local/bin'
cp: cannot create regular file '/usr/local/bin/_inst.16602_': Permission denied
Makefile:616: recipe for target 'install-binPROGRAMS' failed
make[2]: *** [install-binPROGRAMS] Error 1
make[2]: Leaving directory '/home/km_wd0066/gawk-5.0.0'
Makefile:1050: recipe for target 'install-am' failed
make[1]: *** [install-am] Error 2
make[1]: Leaving directory '/home/km_wd0066/gawk-5.0.0'
Makefile:744: recipe for target 'install-recursive' failed
make: *** [install-recursive] Error 1

エラーです。燦然と輝く"Permission denied"の文字。
sudoをつけて再実行します。

$ sudo make install
・・・[結果省略]

長いので省略していますが、出力結果はmakeのときと似ています。
試しにgawkを実行してみます。

$ gawk -W version
GNU Awk 5.0.0, API: 2.0
Copyright (C) 1989, 1991-2019 Free Software Foundation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.

どうやらバッチリのようです。
これからGNU Awk 5.0.0を触っていきたいところですが、大分長くなってしまっているので一旦切ります。

終わりに

初めにVMIを立ち上げた後は、単にDebianにgawkをインストールしただけになってしまいました。
これでgcpタグを付けるのは詐欺まがいな気もしますが、VMIのDebianの挙動を確かめる的な言い訳で通します。
続きとして、GNU AWK 5.0を弄る記事を投稿したいと思いますが、gcpタグを付けるかは不明です。