ネコでもつくれる人工知能

日記です。1日やったことを書いていきます。内容はそんなにレベルが高くないものになると思います。

【Ruby】rbenvから新バージョンをinstallするのに40時間くらいかかった

もうやだ…

敵1 configure: error: cannot compute sizeof (long long)

普通に$rbenv install 2.5.1を実行

MacBook-Pro:~ umemiya$ rbenv install 2.5.1
ruby-build: use openssl from homebrew
Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...
ruby-build: use readline from homebrew

BUILD FAILED (OS X 10.13.2 using ruby-build 20180601)

Inspect or clean up the working tree at /var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609021847.17207
Results logged to /var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609021847.17207.log

Last 10 log lines:
checking for long long... yes
checking for off_t... yes
checking char bit... 8
checking size of int... 0
checking size of short... 0
checking size of long... 0
checking size of long long... configure: error: in `/var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609021847.17207/ruby-2.5.1':
configure: error: cannot compute sizeof (long long)
See `config.log' for more details
make: *** No targets specified and no makefile found.  Stop.

対策:gccの切り替え

膨大なエラーログを凝視しているとgcc関連で引っかかっていることがわかった
OSXのデフォのgccはclangなのでそっからhomebrewでインスコしたgccに切り替える

$ sudo mv /usr/local/bin/gcc /usr/local/bin/gcc_clangver
mv: rename /usr/local/bin/gcc to /usr/local/bin/gcc_clangver: Operation not permitted

ふざけるな😡
El Capitanくらいからひっそりと導入されたSystem Integrity Protecton(SIP)とかいうわけのわからんプロテクトのせいでroot持ち垢でも/usr/あたりがいじくれないようになっているようだ

敵2 Operation not permitted

マシンをcmd+R押しながらrebootかけてリカバリーモードで起動
シェル起動して$ csrutil disable
さようならSIP😜
そのあと$ rebootで文字通り再起動

これでgccシンボリックリンクが作れる

$ ln -s /usr/local/Cellar/gcc/8.1.0/bin/gcc-8 /usr/local/bin/gcc
MacBook-Pro:~ umemiya$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/8.1.0/libexec/gcc/x86_64-apple-darwin17.5.0/8.1.0/lto-wrapper
Target: x86_64-apple-darwin17.5.0
Configured with: ../configure --build=x86_64-apple-darwin17.5.0 --prefix=/usr/local/Cellar/gcc/8.1.0 --libdir=/usr/local/Cellar/gcc/8.1.0/lib/gcc/8 --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-8 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-system-zlib --enable-checking=release --with-pkgversion='Homebrew GCC 8.1.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-nls
Thread model: posix
gcc version 8.1.0 (Homebrew GCC 8.1.0) 

O.K. 😄

では改めてrbenv install 2.5.1

MacBook-Pro:~ umemiya$ rbenv install 2.5.1
ruby-build: use openssl from homebrew
Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...
ruby-build: use readline from homebrew

BUILD FAILED (OS X 10.13.2 using ruby-build 20180601)

Inspect or clean up the working tree at /var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609020031.2281
Results logged to /var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609020031.2281.log

Last 10 log lines:
checking for long long... yes
checking for off_t... yes
checking char bit... 8
checking size of int... 0
checking size of short... 0
checking size of long... 0
checking size of long long... configure: error: in `/var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609020031.2281/ruby-2.5.1':
configure: error: cannot compute sizeof (long long)
See `config.log' for more details
make: *** No targets specified and no makefile found.  Stop.

ふざけるな😡😡

しゃーない切り替えていく
homebrewの超イケメン機能$ brew doctorでお医者さんに観てもらおう

診断結果

Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
  /opt/local/bin/xml2-config
  /opt/local/bin/ncursesw6-config
  /opt/local/bin/ncurses6-config
  /usr/local/var/pyenv/shims/libdynd-config
  /usr/local/var/pyenv/shims/python3.5m-config
  /usr/local/var/pyenv/shims/icu-config
  /usr/local/var/pyenv/shims/libpng16-config
  /usr/local/var/pyenv/shims/python3.6m-config
  /usr/local/var/pyenv/shims/python3.5-config
  /usr/local/var/pyenv/shims/python-config
  /usr/local/var/pyenv/shims/python3-config
  /usr/local/var/pyenv/shims/ncursesw6-config
  /usr/local/var/pyenv/shims/python3.6-config

Warning: You have MacPorts or Fink installed:
  /opt/local/bin/port

This can cause trouble. You don't have to uninstall them, but you may want to
temporarily move them out of the way, e.g.

  sudo mv /opt/local ~/macports

Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected header files:
  /usr/local/include/big_endian.h
  /usr/local/include/binary_log_types.h
  /usr/local/include/byte_order_generic.h
  /usr/local/include/byte_order_generic_x86.h
  /usr/local/include/cdefs.h
  /usr/local/include/decimal.h
  /usr/local/include/errmsg.h
  /usr/local/include/iconveh.h
  /usr/local/include/inline.h
  /usr/local/include/keycache.h
  /usr/local/include/little_endian.h
  /usr/local/include/localcharset.h
  /usr/local/include/m_ctype.h
  /usr/local/include/m_string.h
  /usr/local/include/my_alloc.h
  /usr/local/include/my_byteorder.h
  /usr/local/include/my_command.h
  /usr/local/include/my_compiler.h
  /usr/local/include/my_config.h
  /usr/local/include/my_dbug.h
  /usr/local/include/my_dir.h
  /usr/local/include/my_getopt.h
  /usr/local/include/my_global.h
  /usr/local/include/my_list.h
  /usr/local/include/my_sys.h
  /usr/local/include/my_thread.h
  /usr/local/include/my_thread_local.h
  /usr/local/include/my_xml.h
  /usr/local/include/mysql.h
  /usr/local/include/mysql/client_authentication.h
  /usr/local/include/mysql/client_plugin.h
  /usr/local/include/mysql/com_data.h
  /usr/local/include/mysql/get_password.h
  /usr/local/include/mysql/group_replication_priv.h
  /usr/local/include/mysql/innodb_priv.h
  /usr/local/include/mysql/mysql_lex_string.h
  /usr/local/include/mysql/plugin.h
  /usr/local/include/mysql/plugin_audit.h
  /usr/local/include/mysql/plugin_auth.h
  /usr/local/include/mysql/plugin_auth_common.h
  /usr/local/include/mysql/plugin_ftparser.h
  /usr/local/include/mysql/plugin_group_replication.h
  /usr/local/include/mysql/plugin_keyring.h
  /usr/local/include/mysql/plugin_trace.h
  /usr/local/include/mysql/plugin_validate_password.h
  /usr/local/include/mysql/psi/mysql_file.h
  /usr/local/include/mysql/psi/mysql_idle.h
  /usr/local/include/mysql/psi/mysql_mdl.h
  /usr/local/include/mysql/psi/mysql_memory.h
  /usr/local/include/mysql/psi/mysql_ps.h
  /usr/local/include/mysql/psi/mysql_socket.h
  /usr/local/include/mysql/psi/mysql_sp.h
  /usr/local/include/mysql/psi/mysql_stage.h
  /usr/local/include/mysql/psi/mysql_statement.h
  /usr/local/include/mysql/psi/mysql_table.h
  /usr/local/include/mysql/psi/mysql_thread.h
  /usr/local/include/mysql/psi/mysql_transaction.h
  /usr/local/include/mysql/psi/psi.h
  /usr/local/include/mysql/psi/psi_base.h
  /usr/local/include/mysql/psi/psi_memory.h
  /usr/local/include/mysql/service_command.h
  /usr/local/include/mysql/service_locking.h
  /usr/local/include/mysql/service_my_plugin_log.h
  /usr/local/include/mysql/service_my_snprintf.h
  /usr/local/include/mysql/service_mysql_alloc.h
  /usr/local/include/mysql/service_mysql_keyring.h
  /usr/local/include/mysql/service_mysql_password_policy.h
  /usr/local/include/mysql/service_mysql_string.h
  /usr/local/include/mysql/service_parser.h
  /usr/local/include/mysql/service_rpl_transaction_ctx.h
  /usr/local/include/mysql/service_rpl_transaction_write_set.h
  /usr/local/include/mysql/service_rules_table.h
  /usr/local/include/mysql/service_security_context.h
  /usr/local/include/mysql/service_srv_session.h
  /usr/local/include/mysql/service_srv_session_info.h
  /usr/local/include/mysql/service_ssl_wrapper.h
  /usr/local/include/mysql/service_thd_alloc.h
  /usr/local/include/mysql/service_thd_engine_lock.h
  /usr/local/include/mysql/service_thd_wait.h
  /usr/local/include/mysql/service_thread_scheduler.h
  /usr/local/include/mysql/services.h
  /usr/local/include/mysql/thread_pool_priv.h
  /usr/local/include/mysql/thread_type.h
  /usr/local/include/mysql_com.h
  /usr/local/include/mysql_com_server.h
  /usr/local/include/mysql_embed.h
  /usr/local/include/mysql_time.h
  /usr/local/include/mysql_version.h
  /usr/local/include/mysqld_ername.h
  /usr/local/include/mysqld_error.h
  /usr/local/include/mysqlx_ername.h
  /usr/local/include/mysqlx_error.h
  /usr/local/include/mysqlx_version.h
  /usr/local/include/plugin.h
  /usr/local/include/plugin_audit.h
  /usr/local/include/plugin_ftparser.h
  /usr/local/include/plugin_group_replication.h
  /usr/local/include/plugin_keyring.h
  /usr/local/include/plugin_validate_password.h
  /usr/local/include/sql_common.h
  /usr/local/include/sql_state.h
  /usr/local/include/sslopt-case.h
  /usr/local/include/sslopt-longopts.h
  /usr/local/include/sslopt-vars.h
  /usr/local/include/stdbool.h
  /usr/local/include/stdint.h
  /usr/local/include/thr_cond.h
  /usr/local/include/thr_mutex.h
  /usr/local/include/thr_rwlock.h
  /usr/local/include/typelib.h
  /usr/local/include/version.h
  /usr/local/include/woe32dll.h

Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  mysql

ほげえええええええええ
病気が多すぎる
やっぱりマシンも人間と同じでこまめに検診を行うことが大事ですな😅

とりあえず/usr/local/include/のどれかが悪さをしているので吐き出された大量のエラーログから気になったものを$ rm -rfしていく

そんで何度目かわからないrbenv install 2.5.1

MacBook-Pro:~ umemiya$ rbenv install 2.5.1
ruby-build: use openssl from homebrew
Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...
ruby-build: use readline from homebrew

BUILD FAILED (OS X 10.13.2 using ruby-build 20180601)

Inspect or clean up the working tree at /var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609023654.22314
Results logged to /var/folders/lq/7rcttkms3r9106by5s8qqj_40000gn/T/ruby-build.20180609023654.22314.log

Last 10 log lines:
In file included from /usr/local/include/stdbool.h:4:
In file included from /usr/local/include/stdbool.h:4:
In file included from /usr/local/include/stdbool.h:4:
In file included from /usr/local/include/stdbool.h:4:
/usr/local/include/stdbool.h:4:10: error: #include nested too deeply
#include <stdbool.h>
         ^
1 error generated.
make: *** [compile.o] Error 1
make: *** Waiting for unfinished jobs....

お、まだおかしいけど進捗あるやんけ!😌
今回ははっきりstdbool.hファイルが悪さしていることがわかったので

$ rm -rf /usr/local/include/stdbool.h

からのrbenv install 2.5.1

MacBook-Pro:~ umemiya$ rbenv install 2.5.1
ruby-build: use openssl from homebrew
Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...
ruby-build: use readline from homebrew
Installed ruby-2.5.1 to /Users/umemiya/.rbenv/versions/2.5.1

やっと入った!!
curlやopenssl入れ直したりPATH書きまくったりMacPortにまで手を出してたら丸3日ぐらいかかってしまった
まあシェルの勉強にはなった

最後にrubyのバージョン切り替えて終わり!閉廷!

MacBook-Pro:~ umemiya$ rbenv versions
* system (set by /Users/umemiya/.rbenv/version)
  2.5.1
MacBook-Pro:~ umemiya$ rbenv global 2.5.1
MacBook-Pro:~ umemiya$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]