前提・実現したいこと
AWS EC2(Amazon Linux2 t4g ARM)の本番環境構築(古いAmazon Linux1 t3からの移行)をしています。
アプリ側(Rails5.2.5)の動作のために、 mecab
をインストールする必要があります。(形態素解析の natto
gemを使うため)
mecabのソースをインストールしビルドしたところ、
libmecab.so.2.0.0
のようなファイルが生成されると想定していたのですが生成されないため、原因または解決策を把握したいと考えています。
発生している問題・エラーメッセージ
Railsアプリ側でのEC2へデプロイ(capistranoでの自動デプロイ)した際、
以下エラーが出ました。
なお、エラーになったCapistranoタスク箇所については、deploy:bundle
(bundle install時)と推測しています。
(下記エラーメッセージで Tasks: TOP => deploy:migrate
と出ていることから、その前のタスクであるdeploy:bundle
がエラー箇所に該当しそう)
Could not open library '/usr/local/lib/libmecab.so': /usr/local/lib/libmecab.so: cannot open shared object file: No such file or directory
と出ています。
$ docker-compose run --rm -e NODE_OPTIONS=--max-old-space-size=8192 web bundle exec cap production deploy INFO [3d4b685d] Running $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate as ec2-user@ec2-***.ap-northeast-1.compute.amazonaws.com DEBUG [3d4b685d] Command: cd /home/ec2-user/***/releases/20220302111503 && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.6.6" RAILS_ENV="production" ; $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate ) DEBUG [3d4b685d] rake aborted! LoadError: Could not open library '/usr/local/lib/libmecab.so': /usr/local/lib/libmecab.so: cannot open shared object file: No such file or directory (中略) Tasks: TOP => deploy:migrate (See full trace by running task with --trace) The deploy has failed with an error: Exception while executing as ec2-user@ec2-*****.ap-northeast-1.compute.amazonaws.com: Exception while executing as ec2-user@*****.ap-northeast-1.compute.amazonaws.com: rake exit status: 1 rake stdout: Nothing written rake stderr: rake aborted! LoadError: Could not open library '/usr/local/lib/libmecab.so': /usr/local/lib/libmecab.so: cannot open shared object file: No such file or directory /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/ffi-1.13.1/lib/ffi/library.rb:145:in `block in ffi_lib' /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/ffi-1.13.1/lib/ffi/library.rb:99:in `map' /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/ffi-1.13.1/lib/ffi/library.rb:99:in `ffi_lib' /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/natto-1.2.0/lib/natto/binding.rb:64:in `<module:Binding>' /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/natto-1.2.0/lib/natto/binding.rb:6:in `<module:Natto>' /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/natto-1.2.0/lib/natto/binding.rb:2:in `<top (required)>' /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/activesupport-5.2.5/lib/active_support/dependencies.rb:291:in `require' (中略) /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/natto-1.2.0/lib/natto/natto.rb:2:in `<top (required)>' /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/activesupport-5.2.5/lib/active_support/dependencies.rb:291:in `require' (中略) /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/natto-1.2.0/lib/natto.rb:2:in `<top (required)>' /home/ec2-user/****/releases/20220302084015/config/application.rb:12:in `<top (required)>' (中略) /home/ec2-user/****/shared/bundle/ruby/2.6.0/gems/rake-12.3.0/exe/rake:27:in `<top (required)>' (中略) /home/ec2-user/.rbenv/versions/2.6.6/bin/bundle:23:in `<main>'
ディレクトリの状態
「ファイルがない」と言われているので、EC2側のディレクトリを見にいったところ、
確かに「.so」の拡張子が付いたファイルはありませんでした。
bash
1[ec2-user@***1 ~]$ ls -l /usr/local/lib 2-rw-r--r-- 1 root root 3118314 3月 2 20:01 libmecab.a 3-rwxr-xr-x 1 root root 900 3月 2 20:01 libmecab.la 4drwxr-xr-x 3 root root 17 3月 2 20:45 mecab
なお、旧環境(Amazon Linux1 x86_64)では以下のように.soのファイルも存在しました。
当時の担当者はおらず、インストール手順なども残っていない状態です。
bash
1[ec2-user@*** current]$ ls -al /usr/local/lib 2-rw-r--r-- 1 root root 2971836 11月 16 2016 libmecab.a 3-rwxr-xr-x 1 root root 956 11月 16 2016 libmecab.la 4lrwxrwxrwx 1 root root 17 11月 16 2016 libmecab.so -> libmecab.so.2.0.0 5lrwxrwxrwx 1 root root 17 11月 16 2016 libmecab.so.2 -> libmecab.so.2.0.0 6-rwxr-xr-x 1 root root 1951681 11月 16 2016 libmecab.so.2.0.0 7drwxr-xr-x 3 root root 4096 11月 16 2016 mecab
試したこと
ファイル名で検索しても見つからずでした。
bash
1[ec2-user@*** ~]$ sudo find /usr/* -name *mecab*so* 2/usr/local/src/mecab-0.996/doc/doxygen/mecab_8h-source.html 3/usr/local/src/mecab-0.996/doc/doxygen/mecab_8h_source.html 4[ec2-user@*** ~]$ sudo find /usr/* -name *mecab* 5/usr/local/bin/mecab 6/usr/local/bin/mecab-config 7/usr/local/etc/mecabrc 8/usr/local/include/mecab.h 9/usr/local/lib/libmecab.la 10/usr/local/lib/libmecab.a 11/usr/local/lib/mecab 12/usr/local/libexec/mecab 13/usr/local/libexec/mecab/mecab-dict-index 14/usr/local/libexec/mecab/mecab-dict-gen 15/usr/local/libexec/mecab/mecab-cost-train 16/usr/local/libexec/mecab/mecab-system-eval 17/usr/local/libexec/mecab/mecab-test-gen 18/usr/local/share/man/man1/mecab.1 19/usr/local/src/mecab-0.996.tar.gz 20/usr/local/src/mecab-0.996 21/usr/local/src/mecab-0.996/mecabrc.in 22/usr/local/src/mecab-0.996/man/mecab.1 23/usr/local/src/mecab-0.996/src/libmecab.cpp 24/usr/local/src/mecab-0.996/src/mecab.h 25/usr/local/src/mecab-0.996/src/mecab-test-gen.cpp 26/usr/local/src/mecab-0.996/src/mecab-dict-index.cpp 27/usr/local/src/mecab-0.996/src/mecab-dict-gen.cpp 28/usr/local/src/mecab-0.996/src/mecab-cost-train.cpp 29/usr/local/src/mecab-0.996/src/mecab.cpp 30/usr/local/src/mecab-0.996/src/mecab-system-eval.cpp 31/usr/local/src/mecab-0.996/src/libmecab.o 32/usr/local/src/mecab-0.996/src/libmecab.lo 33/usr/local/src/mecab-0.996/src/.libs/libmecab.a 34/usr/local/src/mecab-0.996/src/.libs/libmecab.lai 35/usr/local/src/mecab-0.996/src/.libs/libmecab.la 36/usr/local/src/mecab-0.996/src/libmecab.la 37/usr/local/src/mecab-0.996/src/mecab.o 38/usr/local/src/mecab-0.996/src/mecab 39/usr/local/src/mecab-0.996/src/mecab-dict-index.o 40/usr/local/src/mecab-0.996/src/mecab-dict-index 41/usr/local/src/mecab-0.996/src/mecab-dict-gen.o 42/usr/local/src/mecab-0.996/src/mecab-dict-gen 43/usr/local/src/mecab-0.996/src/mecab-cost-train.o 44/usr/local/src/mecab-0.996/src/mecab-cost-train 45/usr/local/src/mecab-0.996/src/mecab-system-eval.o 46/usr/local/src/mecab-0.996/src/mecab-system-eval 47/usr/local/src/mecab-0.996/src/mecab-test-gen.o 48/usr/local/src/mecab-0.996/src/mecab-test-gen 49/usr/local/src/mecab-0.996/doc/mecab.css 50/usr/local/src/mecab-0.996/doc/mecab.html 51(中略) 52/usr/local/src/mecab-0.996/doc/libmecab.html 53/usr/local/src/mecab-0.996/mecab.iss.in 54/usr/local/src/mecab-0.996/mecab-config.in 55/usr/local/src/mecab-0.996/mecab.iss 56/usr/local/src/mecab-0.996/mecab-config 57/usr/local/src/mecab-0.996/mecabrc 58/usr/local/src/mecab-ipadic-2.7.0.tar.gz 59/usr/local/src/mecab-ipadic-2.7.0-20070801 60[ec2-user@*** ~]$ sudo find / -name libmecab.so* 61[ec2-user@*** ~]$ 62
インストールしたときの手順
参考にした手順は以下です。
https://qiita.com/hoto17296/items/7add794de677112566bc
ソースからビルドする形式
EC2内にて、公式のページからダウンロードしたソースからmake installしました。
bash
1$ sudo wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE' -O mecab-0.996.tar.gz 2$ sudo tar xzf mecab-0.996.tar.gz 3$ cd mecab-0.996 4$ sudo ./configure --build=arm --with-charset=utf8 5$ sudo make 6$ sudo make check 7$ sudo make install 8# IPA 辞書の方も同様にインストールしました(こちら細かい部分は省略) 9$ sudo wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM' -O mecab-ipadic-2.7.0.tar.gz 10# インストールされたことを確認 11$ mecab --version 12mecab of 0.996 13$ mecab -D 14filename: /usr/local/lib/mecab/dic/ipadic/sys.dic 15version: 102 16charset: utf8 17type: 0 18size: 392126 19left size: 1316 20right size: 1316
mecabコマンドで形態素解析も正常にできる状態です。
アンインストールして再インストールなども試しましたが、直らずの状態です、、
その他調査時の参考サイト
下記なども参照しましたが、「ファイルはあるが環境変数に設定されていない」ような事象であり、
今回の事象とは異なるようでした(今回はそもそも.soファイル自体ができていない)
https://qiita.com/Takka_Log/items/a534680ad224ea3e6b62
https://stackoverflow.com/questions/59278226/could-not-open-library-usr-lib-libmecab-so-2-usr-lib-libmecab-so-2-cannot
別の方法で試したこと
以下のようにgroongaのリポジトリを入れて行う方法も各所で紹介されていたので試しましたが、yum installができませんでした。
https://mebee.info/2021/02/18/post-29277/
bash
1[ec2-user@*** ~]$ sudo yum install --nogpgcheck -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm 2# こちらは正常完了 3[ec2-user@*** ~]$ sudo yum repolist enabled | grep groonga 4groonga-amazon-linux/aarch64 The Groonga Project for Amazon Lin 24 5[ec2-user@*** ~]$ sudo yum -y install mecab mecab-ipadic mecab-devel --nogpgcheck 6読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd 7235 packages excluded due to repository priority protections 8パッケージ mecab は利用できません。 9パッケージ mecab-ipadic は利用できません。 10パッケージ mecab-devel は利用できません。 11エラー: 何もしません
こちらの方法でも、もし可能な方法や、エラーの原因であり得るものなどありましたらご教示いただけますと幸いです。
補足情報(FW/ツールのバージョンなど)
Ruby 2.6.6
Rails 5.2.5
Amazon Linux 2
お手数をお掛けしますが、原因の検討がついていないため「これっぽいのでは?」という推測だけでも大変助かります。
ご確認いただけますと幸いです。よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー