mecab-ipadic-neologd で Hash value of /var/www/moyosy/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz don’t match のエラーが出てインストールできない

結論

(環境によって異なるかもですが)インストール用 shell script 内での、ダウンロードした tar.gz ファイルのハッシュ値比較で上手くいかず、強制的にインストールが止まってしまう状態。

生成したハッシュ値の最後に半角スペースがあり、これが原因でハッシュ値比較の結果が false になっていた。

Dockerfile 内で

RUN sed -i 's/\-f 2,2`/\-f 2,2 | xargs`/g' ./mecab-ipadic-neologd/libexec/make-mecab-ipadic-neologd.sh

を追加する( xargs がトリミングしてくれる )ことで、ハッシュ値比較結果が true となり、問題なくインストールできましたとさ。

手順

おそらく環境によって挙動が違うと思うのですけど、自分の場合は Dockerfile 内で自動的にインストールされるようにコマンド記述したら、何度やってみても

  • 最初のダウンロード先 https://ja.osdn.net では、ダウンロード自体が失敗
  • 2つ目のミラーサイト https://drive.google.com と3つ目のミラーサイト https://sourceforge.net ではダウンロード完了しているのに「ハッシュ値が違う」という理由でエラーで止まってしまう

という結果に。

画面上で確認できたログは以下の通り。

 > [11/11] RUN ./mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n --asuser -a -y -p /var/lib/mecab/dic/mecab-ipadic-neologd && rm -rf mecab-ipadic-neologd:
0.429 [install-mecab-ipadic-NEologd] : Start..
0.429 [install-mecab-ipadic-NEologd] : Check the existance of libraries
0.431 [install-mecab-ipadic-NEologd] : find => ok
0.432 [install-mecab-ipadic-NEologd] : sort => ok
0.433 [install-mecab-ipadic-NEologd] : head => ok
0.434 [install-mecab-ipadic-NEologd] : cut => ok
0.435 [install-mecab-ipadic-NEologd] : egrep => ok
0.436 [install-mecab-ipadic-NEologd] : mecab => ok
0.436 [install-mecab-ipadic-NEologd] : mecab-config => ok
0.437 [install-mecab-ipadic-NEologd] : make => ok
0.438 [install-mecab-ipadic-NEologd] : curl => ok
0.439 [install-mecab-ipadic-NEologd] : sed => ok
0.440 [install-mecab-ipadic-NEologd] : cat => ok
0.441 [install-mecab-ipadic-NEologd] : diff => ok
0.441 [install-mecab-ipadic-NEologd] : tar => ok
0.442 [install-mecab-ipadic-NEologd] : unxz => ok
0.443 [install-mecab-ipadic-NEologd] : xargs => ok
0.444 [install-mecab-ipadic-NEologd] : grep => ok
0.445 [install-mecab-ipadic-NEologd] : iconv => ok
0.446 [install-mecab-ipadic-NEologd] : patch => ok
0.447 [install-mecab-ipadic-NEologd] : which => ok
0.448 [install-mecab-ipadic-NEologd] : file => ok
0.449 [install-mecab-ipadic-NEologd] : openssl => ok
0.450 [install-mecab-ipadic-NEologd] : awk => ok
0.575
1.229 [install-mecab-ipadic-NEologd] : mecab-ipadic-NEologd is already up-to-date
1.229
1.229 [install-mecab-ipadic-NEologd] : mecab-ipadic-NEologd will be install to /var/lib/mecab/dic/mecab-ipadic-neologd
1.229
1.229 [install-mecab-ipadic-NEologd] : Make mecab-ipadic-NEologd
1.233 [make-mecab-ipadic-NEologd] : Start..
1.233 [make-mecab-ipadic-NEologd] : Check local seed directory
1.233 [make-mecab-ipadic-NEologd] : Check local seed file
1.236 [make-mecab-ipadic-NEologd] : Check local build directory
1.236 [make-mecab-ipadic-NEologd] : create /var/www/mecab-ipadic-neologd/libexec/../build
1.237 [make-mecab-ipadic-NEologd] : Download original mecab-ipadic file
1.237 [make-mecab-ipadic-NEologd] : Try to access to https://ja.osdn.net
1.893 [make-mecab-ipadic-NEologd] : Try to download from https://ja.osdn.net/frs/g_redir.php?m=kent&f=mecab%2Fmecab-ipadic%2F2.7.0-20070801%2Fmecab-ipadic-2.7.0-20070801.tar.gz
1.896 % Total % Received % Xferd Average Speed Time Time Time Current
1.896 Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
5.241 curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to osdn.dl.osdn.net:443
5.247 /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz: No such file or directory
5.247 088BF1C1CE7F0000:error:80000002:system library:file_ctrl:No such file or directory:crypto/bio/bss_file.c:297:calling fopen(/var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz, r)
5.247 088BF1C1CE7F0000:error:10080002:BIO routines:file_ctrl:system lib:crypto/bio/bss_file.c:300:
5.248
5.248 Hash value of /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz don't match
5.248 [make-mecab-ipadic-NEologd] : Try to download from https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM
5.251 % Total % Received % Xferd Average Speed Time Time Time Current
5.251 Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 11.6M 100 11.6M 0 0 1926k 0 0:00:06 0:00:06 --:--:-- 2525k
11.45
11.45 Hash value of /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz don't match
11.45 [make-mecab-ipadic-NEologd] : Try to download from https://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz/download?use_mirror=autoselect#
11.45 % Total % Received % Xferd Average Speed Time Time Time Current
11.45 Dload Upload Total Spent Left Speed
100 663 0 663 0 0 2514 0 --:--:-- --:--:-- --:--:-- 2511
100 417 100 417 0 0 586 0 --:--:-- --:--:-- --:--:-- 586
100 11.6M 100 11.6M 0 0 805k 0 0:00:14 0:00:14 --:--:-- 436k
26.28
26.28 Hash value of /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz don't match
26.29 [make-mecab-ipadic-NEologd] : Fail to download /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz
26.29 [make-mecab-ipadic-NEologd] : You should remove /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz before retrying to install mecab-ipadic-NEologd
26.29 [make-mecab-ipadic-NEologd] : rm -rf /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801
26.29 [make-mecab-ipadic-NEologd] : rm /var/www/mecab-ipadic-neologd/libexec/../build/mecab-ipadic-2.7.0-20070801.tar.gz
------
Dockerfile:45
--------------------
45 | >>> RUN ./mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n --asuser -a -y -p /var/lib/mecab/dic/mecab-ipadic-neologd \
46 | >>> && rm -rf mecab-ipadic-neologd
47 |
--------------------
ERROR: failed to solve: process "/bin/sh -c ./mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n --asuser -a -y -p /var/lib/mecab/dic/mecab-ipadic-neologd && rm -rf mecab-ipadic-neologd" did not complete successfully: exit code: 1

エラーが発生している該当のシェルスクリプトは mecab-ipadic-neologd/libexec/make-mecab-ipadic-neologd.sh で、この中に

TMP_IPADIC_HASH_VAL=`openssl sha1 ${BASEDIR}/../build/${ORG_DIC_NAME}.tar.gz | cut -d $' ' -f 2,2`
    if [ "${TMP_IPADIC_HASH_VAL}" != "0d9d021853ba4bb4adfa782ea450e55bfe1a229b" ]; then

のようなダウンロードしたファイルのハッシュ値チェックロジックがあるのだけれど、この if 条件が false になっている模様。

調べてみると

`openssl sha1 ${BASEDIR}/../build/${ORG_DIC_NAME}.tar.gz | cut -d $' ' -f 2,2`

の結果は "0d9d021853ba4bb4adfa782ea450e55bfe1a229b " となっており、末尾に余分な半角スペースが…。

なので、

`openssl sha1 ${BASEDIR}/../build/${ORG_DIC_NAME}.tar.gz | cut -d $' ' -f 2,2 | xargs`

と書き換えてやることで末尾の半角スペースが除去され、 if 条件が true となり、無事にインストールが完了したのでした。