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

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

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

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

1回答

299閲覧

Apache2でcannot open shared object fileが出る

michikusa-mc

総合スコア26

Ruby

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2024/03/11 00:14

編集2024/03/11 08:56

実現したいこと

  • Apache2を正常に動かす (Phusion Passenger 6.0.20を使用)

前提

発生している問題・エラーメッセージ

/var/log/apache2/error.log

log

1App 4407 output: /opt/.rbenv/versions/3.1.3/bin/ruby: error while loading shared libraries: libruby.so.3.1: cannot open shared object file: No such file or directory

これのせいで、閲覧できなくなってしまっています。
イメージ説明

該当のソースコード

/etc/apache2/sites-available/XXX.conf

apache2

1 ServerName 192.168.2.118 2 <IfModule mod_passenger.c> 3 PassengerRoot /opt/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/passenger-6.0.20 4 PassengerDefaultRuby /opt/.rbenv/versions/3.1.3/bin/ruby 5 PassengerRuby /opt/.rbenv/versions/3.1.3/bin/ruby 6 PassengerUser www-data 7 PassengerGroup www-data 8 SetEnv LD_LIBRARY_PATH /opt/.rbenv/versions/3.1.3/lib 9 SetEnv GEM_PATH /opt/.rbenv/shims 10 </IfModule> 11 <Directory /var/www/source> 12 Options Indexes FollowSymLinks 13 AllowOverride All 14 Require all granted 15 </Directory> 16 17<VirtualHost *:80> 18 DocumentRoot /var/www/source/public 19 RailsEnv production 20 ErrorLog ${APACHE_LOG_DIR}/error.log 21</VirtualHost>

~/.bashrc

bash

1# bash自体の設定は省略 2export PATH="/opt/.rbenv/bin:$PATH" 3eval "$(rbenv init -)" 4export LD_LIBRARY_PATH=/opt/.rbenv/versions/3.1.3/lib

試したこと

  1. 過去問題となっていたPassengerAgent, エラーメッセージを出していると思われるrubyに対してlddを実行

bash

1$ sudo ldd /opt/.rbenv/versions/3.1.3/bin/ruby 2 linux-vdso.so.1 (0x00007ffec3b68000) 3 libruby.so.3.1 => /opt/.rbenv/versions/3.1.3/lib/libruby.so.3.1 (0x00007f0827acd000) 4 libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f0827aab000) 5 libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f0827a71000) 6 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f082798a000) 7 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0827761000) 8 /lib64/ld-linux-x86-64.so.2 (0x00007f0827f16000) 9$ sudo ldd /opt/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/passenger-6.0.20/buildout/support-binaries/PassengerAgent 10 linux-vdso.so.1 (0x00007ffd4e0ff000) 11 libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4 (0x00007f8d0acd8000) 12 libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007f8d0a894000) 13 libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f8d0a668000) 14 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8d0a581000) 15 libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f8d0a561000) 16 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8d0a336000) 17 libnghttp2.so.14 => /lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f8d0a30c000) 18 libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007f8d0a2eb000) 19 librtmp.so.1 => /lib/x86_64-linux-gnu/librtmp.so.1 (0x00007f8d0a2cc000) 20 libssh.so.4 => /lib/x86_64-linux-gnu/libssh.so.4 (0x00007f8d0a25f000) 21 libpsl.so.5 => /lib/x86_64-linux-gnu/libpsl.so.5 (0x00007f8d0a24b000) 22 libssl.so.3 => /lib/x86_64-linux-gnu/libssl.so.3 (0x00007f8d0a1a5000) 23 libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f8d0a151000) 24 libldap-2.5.so.0 => /lib/x86_64-linux-gnu/libldap-2.5.so.0 (0x00007f8d0a0f2000) 25 liblber-2.5.so.0 => /lib/x86_64-linux-gnu/liblber-2.5.so.0 (0x00007f8d0a0e1000) 26 libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f8d0a012000) 27 libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f8d0a004000) 28 libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8d09fe6000) 29 /lib64/ld-linux-x86-64.so.2 (0x00007f8d0b462000) 30 libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007f8d09e3c000) 31 libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f8d09c51000) 32 libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007f8d09c09000) 33 libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007f8d09bc3000) 34 libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f8d09b3f000) 35 libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f8d09a74000) 36 libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f8d09a45000) 37 libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f8d09a3f000) 38 libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f8d09a31000) 39 libsasl2.so.2 => /lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007f8d09a14000) 40 libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f8d099f1000) 41 libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f8d098b6000) 42 libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f8d0989e000) 43 libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f8d09897000) 44 libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f8d09881000) 45 libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007f8d09874000)

特にnot foundとなっている項目が見つからないため、解決できませんでした。
2. 共通ライブラリ一覧を参照

bash

1$ cat /etc/ld.so.conf.d/* | grep -v "#" 2/usr/lib/x86_64-linux-gnu/libfakeroot 3/usr/local/lib 4/usr/local/lib/x86_64-linux-gnu 5/lib/x86_64-linux-gnu 6/usr/lib/x86_64-linux-gnu

関係ない情報だと考えました。(OS側の情報?)
3. libruby.so.3.1を検索

bash

1$ sudo find / -name "libruby.so.3.1" 2/opt/.rbenv/versions/3.1.3/lib/libruby.so.3.1

存在しました。
4. sudo ldconfigを実行
→ダメでした。変わりません。

補足情報(FW/ツールのバージョンなど)

  • OS: Ubuntu 22.04 LTS Server
  • Apache2, Passenger 6.0.20
  • Ruby 3.1.3p185 Rails 7.0.8

こちらのスレッドで@otn 様から回答をいただきましたが、エラーが変わり別問題になってしまったので、
こちらで質問させていただきました。過去の履歴が必要であれば、過去のスレッドをご覧ください。

追記 2024/03/11 14:54 (編集済み 2024/03/11 16:16)

(gemをフルパスで実行いたしました。)
tmpdir gemは存在します。

bash

1$ sudo /opt/.rbenv/shims/gem list | grep "tmpdir" 2tmpdir (default: 0.1.2)

また、gemのサーチパスはこれです。

bash

1$ sudo /opt/.rbenv/shims/gem env 2... 3 - /opt/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0 4 - /root/.local/share/gem/ruby/3.1.0 5...

さらに、以下のコマンドを実行しました。

bash

1$ sudo ls /opt/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0 2build_info cache doc extensions gems plugins specifications

/opt/.rbenv/shimsがなかったため、Apache側でSetEnvで指定してみました。
/etc/apache2/sites-available/XXX.conf

conf

1... 2 <IfModule mod_passenger.c> 3 ... 4 SetEnv LD_LIBRARY_PATH /opt/.rbenv/versions/3.1.3/lib 5 SetEnv GEM_PATH /opt/.rbenv/shims 6 </IfModule> 7...

(これ、もしかするとSetEnv GEM_PATH /opt/.rbenv/shimsSetEnv GEM_PATH /opt/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0にするべきだったりするでしょうか?)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2024/03/11 02:43

PassEnv ディレクティブで LD_LIBRARY_PATH を設定してみてはどうでしょうか。 <IfModule mod_passenger.c> : PassEnv LD_LIBRARY_PATH </IfModule> ただ、suexec が有効化されている場合には SetEnv ディレクティブで直接指定する必要があるかもしれません。
michikusa-mc

2024/03/11 02:50

コメントありがとうございます。PassEnvの設定を試しましたがまだ解決できていません。 エラーが変わりません...。
melian

2024/03/11 02:59

それでは SetEnv はどうでしょうか。 SetEnv LD_LIBRARY_PATH /opt/.rbenv/versions/3.1.3/lib
michikusa-mc

2024/03/11 04:47

エラーは解決しましたが、別のエラーが発生しました。(話が少々脱線するかもしれません) /opt/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/passenger-6.0.20/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb:26:in `require': cannot load such file -- tmpdir (LoadError)
melian

2024/03/11 05:07

tmpdir gem がインストールされていないか、gem のサーチパスが適切に設定されていないのかもしれません。 GitHub - ruby/tmpdir: Retrieve temporary directory path https://github.com/ruby/tmpdir
otn

2024/03/11 05:12

前の質問では本題に戻る前に終わってしまいました。 まずコマンドラインでコマンドを確認する時には、Bashでexport ~~ でよかったのですが、 Apacheで実行時に設定されていて欲しいのなら、コメントの通り、Apacheの設定ファイルですね。 tmpdir.rbは標準装備なので、無いはずは無いです。 端末で、 /opt/.rbenv/versions/3.1.3/bin/ruby -rtmpdir -e "p :OK " ではエラーになりますか?
michikusa-mc

2024/03/11 05:18

>@otn 様 コメントありがとうございます。 $ sudo /opt/.rbenv/versions/3.1.3/bin/ruby -rtmpdir -e "p :OK " :OK エラーになりませんでした。 >@melian 様 @otn 様の示して下さったコマンドにより存在確認が取れているので、ない、ということではなさそうです。gemのサーチパスが適切ではない可能性が高そうです。現在調べております。
melian

2024/03/11 06:11

gem env の結果をみると、その gem コマンドは /usr/bin/gem なのではありませんか?
otn

2024/03/11 06:20 編集

SetEnvの構文が間違っています。 すぐ上に正しい行があるのに、参考にしないで書いたのでしょうか? > $ gem list > $ gem env 普段はこれでいいですが、rbenvを使っているなど複数Ruby稼働環境があり、かつ、「何かおかしいの調査している」場合は、コマンドは全てフルパスで実行しましょう。
michikusa-mc

2024/03/11 06:20

なぜ、そのように判断したのでしょうか。解説をお願いしたいです。(GEM PATHSにも書かれていなかったので、なぜそう判断したのかがわかりませんでした。)
michikusa-mc

2024/03/11 06:26

@otn 様 コメントありがとうございます。私のケアレスミスでした。 質問を修正したのでご確認よろしくお願いいたします。
melian

2024/03/11 06:30

表示されているサーチパスに /opt/.rbenv/versions/3.1.3/... が含まれていないから、です。もしかして、以前に apt install ruby-rubygems を実行したのではないでしょうか?
otn

2024/03/11 06:51

> 質問を修正したので gemもフルパスで実行し直してみましょう。
michikusa-mc

2024/03/11 07:26

@melian 様 apt list --installedで確認すると、存在しました。アンインストールした方が良いでしょうか? @otn 様 本文を、gemをフルパスで書き換えたものに編集しました。ご確認願います。
melian

2024/03/11 07:39

> apt list --installedで確認すると、存在しました。アンインストールした方が良いでしょうか? いえ、それはシステムデフォルトな Ruby 環境でしょうから、そのままにしておく方がよいでしょう。(gem コマンドが /opt/.rbenv/bin/gem ではなく /opt/.rbenv/shims/gem としてインストールされているのですね)
michikusa-mc

2024/03/11 07:57

@melian様 わかりました。そのままにしておきます。引き続き模索してみます。
otn

2024/03/11 08:25 編集

/opt/.rbenv/shims/gem は、gemコマンドじゃなくて、gemコマンドを起動するrbenv提供のラッパーコマンドです。 /opt/.rbenv/versions/3.1.3/bin/ruby に付随する gemコマンドは /opt/.rbenv/versions/3.1.3/bin/gem です。 > ldd /opt/.rbenv/versions/3.1.3/bin/ruby とかお書きなので、分かっているかと思っていました。 まあ、/opt/.rbenv/versions/3.1.3/bin/gem が起動されてそうなのでいいですけど。 sudo を付けているのは、今実行中のユーザーからはアクセス権が無い場所だということですかね? そうだとすると、その辺が原因かも知れません。
otn

2024/03/11 08:24

> これ、もしかするとSetEnv GEM_PATH /opt/.rbenv/shimsを そもそも「SetEnv GEM_PATH /opt/.rbenv/shims」の意図は何だったんでしょうか? > SetEnv GEM_PATH /opt/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0にするべき それは最初から含まれているのでは? /opt/.rbenv/versions/3.1.3/bin/gem which tmpdir の結果はどうでしょうか?
michikusa-mc

2024/03/11 08:43

@otn 様 順に回答いたします。 1. www-dataとは違うアカウントでテストをしています(www-dataにはセキュリティ上ログインできなく   なっているため) なので、sudoをsudo -u www-dataに変えても動きます。 2. SetEnv GEM_PATH /opt/.rbenv/shimsの意図としては、私がラッパーコマンドの方が正しいパスと   思って、明示指定を行おうと思って書きました。しかしラッパーコマンドだと気づき、今となっては   意味がないと思っております。 3. それはそうですね...。変えておきます。 4. 以下のようになりました。 $ sudo /opt/.rbenv/versions/3.1.3/bin/gem which tmpdir /home/xxx/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tmpdir.rb ↑あれ?なんでホームディレクトリにあるの?と思いました。 4に関して、怪しいと考えております。自分でも混乱しております。どうかご教授お願い致します。
otn

2024/03/11 09:34 編集

> www-dataとは違うアカウントでテストをしています /opt以下へのアクセス権が同じならコマンドを直接実行で良いと思います。 ログインユーザーと www-data のアクセス権が違うなら、sudo -u www-data で確認するのは意味がありますが、sudo でrootで確認するのは意味不明です。 > 4に関して、怪しいと考えており /home/xxx/.rbenv をまるごと全部削除するのがいいでしょう。 とりあえず、下記の確認もか。 sudo -u www-data /opt/.rbenv/versions/3.1.3/bin/gem which tmpdir 意味なく sudoでrootで実行する習慣を直さないといずれ痛い目に遭うかも知れません。
michikusa-mc

2024/03/11 10:13

@otn 様 ありがとうございます。今後はwww-dataで実行してみます。 そして、/home/xxx/.rbenvを丸ごと削除しました。 sudo -u www-data /opt/.rbenv/versions/3.1.3/bin/gem which tmpdirに関してなのですが、 なぜか消えている判定となります。しかしlsで存在は確認できます。 それと、またもやこのスレッドの当初の内容と今の内容が大きく脱線しているので、 スレッドを立て直した方が良いでしょうか?それとも無駄にスレッドを乱立しない方よいでしょうか? 自分的には、変えた方が新たに状況を整理しなおすことができますし、他のユーザーにも 分かりやすくなると考えているので、変えた方がよいと考えています。 もし変えた方が良いなら、SetEnvの解決策を提案してくださった@melian 様に回答を投稿してもらうようにお願いし、立て直そうと思います。 もしもこの先もご協力くださるのなら、よろしくお願いいたします。 @melian 様 申し訳ございませんが、今の内容とこのスレッドの当初のエラー内容が大きく脱線しています。 スレッドを立て直した方が良いでしょうか?それとも無駄にスレッドを乱立しない方よいでしょうか? もし変えた方が良いなら、 @melian 様が「SetEnvの指定」を提案してくださったので、そのことを回答欄に投稿 いただけますでしょうか。ベストアンサーに選ばせていただきます。 もしもこの先もご協力くださるのなら、よろしくお願いいたします。
melian

2024/03/11 10:23

はい、了解です。回答欄に投稿しました。
otn

2024/03/11 17:35

アドバイスとしては、ある程度使ってみてもrbenvの仕組みが把握し切れない場合は、使うのを止めるのが良いかと思います。普通にインストール(注※)する。 ただし、「複数のバージョンのRubyをプロジェクトごと(具体的にはディレクトリーごと)に切り替えながら使う」場合には使わざるを得ないので、その場合は、rbenvの仕組みを理解することにまず注力するのでしょうか。 注※:ある時点において1つの種類のバージョンだけ使えれば良いのであれば、 ・OS標準のRubyを使う ・それではバージョンが古すぎる場合は、該当バージョンをソースを公式サイトから取得してビルドする (rbenv install ~~~ で裏で動いていることを手動で明示的に行う)
guest

回答1

0

ベストアンサー

※ コメントから転記

PassEnv ディレクティブで LD_LIBRARY_PATH を設定してみてはどうでしょうか。

<IfModule mod_passenger.c> : PassEnv LD_LIBRARY_PATH </IfModule>

ただ、suExec が有効化されている場合には SetEnv ディレクティブで直接指定する必要があるかもしれません。

エラーが変わりません...。

それでは SetEnv はどうでしょうか。(これで解決した模様)

SetEnv LD_LIBRARY_PATH /opt/.rbenv/versions/3.1.3/lib

投稿2024/03/11 10:22

melian

総合スコア19818

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

michikusa-mc

2024/03/11 11:17

回答ありがとうございます。 ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問