質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Q&A

解決済

mecabをインストール・ビルドしても「.so」ファイルが生成されない

otdsh9432
otdsh9432

総合スコア55

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

1回答

2グッド

0クリップ

1246閲覧

投稿2022/03/02 12:07

編集2022/03/02 14:17

前提・実現したいこと

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 32 20:01 libmecab.a 3-rwxr-xr-x 1 root root 900 32 20:01 libmecab.la 4drwxr-xr-x 3 root root 17 32 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 1116 2016 libmecab.a 3-rwxr-xr-x 1 root root 956 1116 2016 libmecab.la 4lrwxrwxrwx 1 root root 17 1116 2016 libmecab.so -> libmecab.so.2.0.0 5lrwxrwxrwx 1 root root 17 1116 2016 libmecab.so.2 -> libmecab.so.2.0.0 6-rwxr-xr-x 1 root root 1951681 1116 2016 libmecab.so.2.0.0 7drwxr-xr-x 3 root root 4096 1116 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

お手数をお掛けしますが、原因の検討がついていないため「これっぽいのでは?」という推測だけでも大変助かります。
ご確認いただけますと幸いです。よろしくお願いいたします。

melian, endy👍を押しています

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

hoshi-takanori

2022/03/02 13:47

./configure の --build=arm が余計なのでは。あと、いちいち sudo してビルドする必要もないはず…。
otdsh9432

2022/03/02 14:19 編集

コメントいただき誠にありがとうございます。 >./configure の --build=arm こちら、付けない場合にエラーとなったため、解決策( https://www.servernote.net/article.cgi?id=you-must-specify-build-type )として付与した次第ですが、改めて確認してみます、、! (sudoに関してもpermission deniedのエラー回避のため付けた次第です、、)

回答1

2

ベストアンサー

configure スクリプトに --build=arm を指定していますので、host_osnone と判断されて shared library が作成されません。

bash

1$ sudo ./configure --build=arm --with-charset=utf8

config.log

text

1host='arm-unknown-none' 2host_alias='' 3host_cpu='arm' 4host_os='none' 5host_vendor='unknown' 6 : 7 8configure:12359: checking whether to build shared libraries 9configure:12380: result: no 10configure:12383: checking whether to build static libraries 11configure:12387: result: yes

なので、--build=arm-linux とするか、もしくはデフォルトの config.guess スクリプトによる自動判別に任せる方が良いかと思います。

bash

1$ sudo ./configure --with-charset=utf8

config.log (x86-64 アーキテクチャ CPU/Linux OS 上で実行)

text

1host='x86_64-unknown-linux-gnu' 2host_cpu='x86_64' 3host_os='linux-gnu' 4host_vendor='unknown' 5 : 6 7configure:12359: checking whether to build shared libraries 8configure:12380: result: yes 9configure:12383: checking whether to build static libraries 10configure:12387: result: yes

そちらの環境で configure スクリプトを実行後に以下を実行して確認してみて下さい。

bash

1$ grep -A1 'build shared libraries' config.log

投稿2022/03/02 14:22

melian

総合スコア16348

endy, otdsh9432👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

otdsh9432

2022/03/02 22:48 編集

ご回答いただき誠にありがとうございます。 configureスクリプトについては、実行したところ以下結果でした。 --build指定なし:エラー表示(error: cannot guess build type; you must specify one) --build=arm-linux指定あり:正常完了 正常完了後、記載いただいたgrepを実行したところ、以下表示が出ました。 configure:12359: checking whether to build shared libraries configure:12380: result: yes
otdsh9432

2022/03/02 22:53

こちら、上記に続けてインストール進めたところ、 libmecab.so libmecab.so.2 libmecab.so.2.0.0 の3ファイルが作成されました! (shared libraryの生成のされ方など今後理解していきたいと思います) 大変助かりました。ありがとうございます。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。