0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

conoha wingで gem install mysql2するときの話

Posted at

conoha wingのデフォルト状態だとgem install出来ないので、
前回の記事の手順でconoha wingにruby3.2.0を入れている前提の話です。

ホームディレクトリで作業しているので、conoha_user_id等は、各自置き換えてください。

まず試しにgem install mysql2してみたところ、エラーになる。

$  gem install mysql2
Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

    current directory: /home/conoha_user_id/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/mysql2-0.5.5/ext/mysql2
/home/conoha_user_id/.rbenv/versions/3.2.2/bin/ruby extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_gc_mark_movable()... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_enc_interned_str() in ruby.h... yes
-----
Using --with-openssl-dir=/usr/local
-----
-----
Using mysql_config at /usr/bin/mysql_config
-----
/usr/bin/mysql_config: line 8: rpm: command not found
/usr/bin/mysql_config: line 8: rpm: command not found
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/conoha_user_id/.rbenv/versions/3.2.2/bin/$(RUBY_BASE_NAME)
        --with-openssl-dir
        --with-openssl-dir
        --with-openssl-include
        --without-openssl-include=${openssl-dir}/include
        --with-openssl-lib
        --without-openssl-lib=${openssl-dir}/lib
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysql-config
        --without-mysql-config

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /home/conoha_user_id/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/extensions/x86_64-linux/3.2.0/mysql2-0.5.5/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /home/conoha_user_id/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/mysql2-0.5.5 for inspection.
Results logged to /home/conoha_user_id/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/extensions/x86_64-linux/3.2.0/mysql2-0.5.5/gem_make.out

言われた通りmkmf.logを見てみると

$ cat /home/conoha_user_id/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/extensions/x86_64-linux/3.2.0/mysql2-0.5.5/mkmf.log
have_func: checking for rb_absint_size()... -------------------- yes

略)

have_func: checking for rb_wait_for_single_fd()... -------------------- yes

LD_LIBRARY_PATH=.:/home/conoha_user_id/.rbenv/versions/3.2.2/lib:/home/conoha_user_id/gcc85/lib:/home/conoha_user_id/gcc85/lib64: "gcc -o conftest -I/home/conoha_user_id/.rbenv/versions/3.2.2/include/ruby-3.2.0/x86_64-linux -I/home/conoha_user_id/.rbenv/versions/3.2.2/include/ruby-3.2.0/ruby/backward -I/home/conoha_user_id/.rbenv/versions/3.2.2/include/ruby-3.2.0 -I. -I/usr/include/mysql/mysql -I/home/conoha_user_id/.rbenv/versions/3.2.2/include    -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wundef  -fPIC conftest.c  -L. -L/home/conoha_user_id/.rbenv/versions/3.2.2/lib -Wl,-rpath,/home/conoha_user_id/.rbenv/versions/3.2.2/lib -L/usr/lib64/mysql/ -Wl,-rpath,/usr/lib64/mysql/ -L. -L/home/conoha_user_id/.rbenv/versions/3.2.2/lib  -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed     -Wl,-rpath,/home/conoha_user_id/.rbenv/versions/3.2.2/lib -L/home/conoha_user_id/.rbenv/versions/3.2.2/lib -lruby  -lm -lpthread  -lc"
conftest.c: In function 't':
conftest.c:14:57: error: 'rb_wait_for_single_fd' undeclared (first use in this function)
 int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_wait_for_single_fd; return !p; }
                                                         ^~~~~~~~~~~~~~~~~~~~~

略)

「rb_wait_for_single_fdとかrb_enc_interned_strが未定義ですよ」ってエラーを吐いてるっぽい。
いつもなら何も考えずyum mysql-develするところですが、conoha wingなのでyumやrpm等は使えない。

失敗した方法

ライブラリとヘッダーの場所が分かってないみたいなのでは?
/usr/lib64/mysqlや/usr/include/mysqlにmysql関連のファイルがあるのでoptionで教えてみる。

$  gem install mysql2 -- --with-opt-include=/home/conoha_user_id/mysql/include/ --with-opt-lib=/home/conoha_user_id/mysql/lib/

変わらずエラー。

その後、いろいろパスを通したりしてみたけど、全然うまくいかない・・・。

うまくいった方法

面倒なので、インストール済みのmysqlとは別にmysqlのバイナリを置いてしまう。
「要は、中間ライブラリとヘッダーとmysql_configがあればいいんでしょ?」
ということでバイナリインストール用のファイルを丸っと置いてしまうことにした。

まずmysqlのインストールファイルを取ってくる。
https://dev.mysql.com/downloads/mysql/

8系はrpmしかみつからなかったので5.7を選択する。
Archivesから5.7.27を選ぶ。

※5.7.43を利用したら下記のエラーが出た。

ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

https://stackoverflow.com/questions/31413031/mysql-error-2026-hy000-ssl-connection-error-error00000001lib0func0re

とりあえずバージョンをそろえると出ないようなので、wingのデフォルトの5.7.27と揃える。

OSはRed Hat/Oracle linuxを選択。

mysql-5.7.27-el7-x86_64.tarか
mysql-5.7.27-el7-x86_64.tar.gzをダウンロード

後はホームディレクトリなどに配置。

wgetで直ダウンロードする場合は↓で。

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.27-el7-x86_64.tar.gz

ホームディレクトリで解凍

tar -zxvf mysql-5.7.27-el7-x86_64.tar.gz

フォルダ名が長いとあとのコマンド入力が面倒なのでリネーム

mv mysql-5.7.27-el7-x86_64 mysql

これでmysqlの仮設置が出来たので後は、mysql-config,include,libの場所をoptionで渡してあげる。

# gem install mysql2 -- --with-opt-include=/home/conoha_user_id/mysql/include --with-opt-lib=/home/conoha_user_id/mysql/lib --with-mysql-config=/home/conoha_user_id/mysql/bin/mysql_config
Building native extensions with: '--with-opt-include=/home/conoha_user_id/mysql/include --with-opt-lib=/home/conoha_user_id/mysql/lib --with-mysql-config=/home/conoha_user_id/mysql/bin/mysql_config'
This could take a while...
Successfully installed mysql2-0.5.5
Parsing documentation for mysql2-0.5.5
Installing ri documentation for mysql2-0.5.5
Done installing documentation for mysql2 after 0 seconds
1 gem installed

でけた!

irbで試す

$ irb
irb(main):001:0> require "mysql2"
=> true
irb(main):002:0> client = Mysql2::Client.new(:host => "mysqlserver.conoha.ne.jp", :username => "username" ,:password=> 'password')
=>
#<Mysql2::Client:0x000000000000000
...
irb(main):003:0> client.query("use database_name")
=> nil
irb(main):004:0> client.query("show tables")
=>
#<Mysql2::Result:0x000000000000000
 @query_options=
  {:as=>:hash,
   :async=>false,
   :cast_booleans=>false,
   :symbolize_keys=>false,
   :database_timezone=>:local,
   :application_timezone=>nil,
   :cache_rows=>true,
   :connect_flags=>000000000000,
   :cast=>true,
   :default_file=>nil,
   :default_group=>nil,
   :host=>"mysqlserver.conoha.ne.jp",
   :username=>"username",
   :password=>"password"},
 @server_flags={:no_good_index_used=>false, :no_index_used=>true, :query_was_slow=>false}>

OK!


取り急ぎ「gem install mysql2」したかったので、無理やり解決しましたが、本当であれば、もっとスマートなやり方があるはずです。時間があるときに後でいろいろ調査したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?