CentOS8にRubyをインストールしてみたい

[CentOS7にRubyをインストール](https://qiita.com/jjjjjj/items/75a946fe84ca40b5d9a9) を参考にしました。
(参考というか、丸パクリ…)
この場を借りて陳謝します。ありがとうございます。

(2020/02/28 追記しました。centos7で諸々かくにん。)

## 前準備

必要な操作は上記リンクの内容と同じです。

```:terminal
$ sudo yum -y install git bzip2 gcc gcc-c++ openssl-devel readline-devel zlib-devel
$ sudo yum -y install epel-release
$ sudo yum -y install nodejs
```
おまじない。
上から順に、gitのインストール、リポジトリのインストール、Node.jsのインストールでしょうか。また後で調べましょう。

(2020/02/28 追記開始)
gitのソースファイルをもってきてそれをコンパイルしている。みたい。
(2020/02/28 追記終了)

```:terminal
$ sudo git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv
$ sudo git clone https://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-build
```
gitを使ってrbenvとruby-buildを借りてくる。

```:/etc/profile.d/rbenv.sh
export RBENV_ROOT=/usr/local/rbenv
export PATH=${RBENV_ROOT}/bin:$PATH
eval "$(rbenv init --no-rehash -)"
```
環境変数「RBENV_ROOT」にrbenvをインストールしたディレクトリを指定。
環境変数「PATH」に「RBENV_ROOT」/bin→「RBENV_ROOT」の順で走査するよう指定。
このshell内にて、rbenvのinit処理を実行。ただしrehashはしない。
(rehashは処理に時間がかかるから)

※bashは、/etc/profileによってprofile.dに配置されているシェルスクリプト(*.sh)を
　順次実行していく？みたいなので、profile.d配下にrbenv.shを置いておくと良きらしいです。
　参考リンク：[/etc/profile.d/とはなんのためのディレクトリなのか調べてみた](http://ztbuz.hateblo.jp/entry/2013/12/12/195113)

```:terminal(root)
# source /etc/profile.d/rbenv.sh
```
rootユーザでないとsourceコマンドを認識してくれない。なんで？
今試したらrootユーザでなくてもできた。なんで？？
まぁいいや。

(2020/02/28 追記開始)
後述のvisudoでsecure_pathを既存のものから変えたから、結果としてsourceコマンドがつながったみたい。
(2020/02/28 追記終了)

```:terminal(root)
# visudo
…
Defaults env_keep += "RBENV_ROOT"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims
…
```
sudoersの編集。visudoはsudoersの編集を行うためのコマンド。
~~知らなかったから普通にviで編集しちゃった~~
env_keep：sudo実行時の環境変数に引き継ぐ。(「RBENV_ROOT」を引き継ぐ)
secure_path：環境変数PATHをここに指定した内容で初期化する。(rbenv関連のPATHを追加。なので、既存のやつはコメントしておくなりなんなりと)

私の場合、なぜかrbenvのinstallコマンドが認識されていなかったり、
それまでは認識されていたrbenvコマンドそのものが認識されなくなったりと不明な問題が発生したりしました。
(rbenvコマンドが使えなくなったのは、installコマンドが認識されない原因を調べるために色々していたからだと思います)

確認すると、rbenv.shのRBENV_ROOTに指定したPATHが「usr」ではなく「user」になっていたので、そこを直した上で、借りてきたrbenvをいったん全消しして、再度借りてきたら解決しました。

#### おまけ
```:terminal(root)
# git clone https://github.com/sstephenson/rbenv-gem-rehash.git /usr/local/rbenv/plugins/rbenv-gem-rehash
```
rbenv installをしたときに自動でrehashしてくれるやつ。コマンド実行漏れによる不要な調査が減る。べんり。

## Rubyのインストール
```:terminal
$ rbenv install -l
```
```:実行結果
…
2.6.0-rc1
2.6.0-rc2
2.6.0
2.6.1
2.6.2
…
```
rbenvでインストール可能なもの一覧。たくさんある。
今回は参考記事にならって、とりあえず2.6.2を入れてみます。

```:terminal
$ sudo rbenv install 2.6.2
Downloading ruby-2.6.2.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.2.tar.bz2
Installing ruby-2.6.2...
(5分後ぐらい)
BUILD FAILED (略)
```
おやおや。
logファイルが出力されていて、最終10行が表示されていました。

```:terminal
…
Results logged to /tmp/ruby-build.20200226143834.18418.log

Last 10 log lines:
checking for _setjmp as a macro or function... yes
checking for sigsetjmp as a macro or function... no
checking for setjmp type... __builtin_setjmp
checking for prefix of external symbols... NONE
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking if make is GNU make... ./configure: line 27341: make: command not found
no
checking for safe null command for make... configure: error: no candidate for safe null command
…
```
たぶん、makeコマンドが見つからないのが原因みたい。
名称的には標準で入ってそうなコマンド名ですが…。

(2020/02/28 追記開始)
centos7だと標準で入ってる？？たぶん。
(2020/02/28 追記終了)

ともあれ、makeコマンドをインストールしてみましょう。

```:terminal
$ sudo yum -y install make
…
完了しました！
```
ではあらためて、rbenvを実行です。

```:terminal
$ sudo rbenv install 2.6.2
Downloading ruby-2.6.2.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.2.tar.bz2
Installing ruby-2.6.2...
(10～15分後ぐらい)
Installed ruby-2.6.2 to /usr/local/rbenv/versions/2.6.2
```
インストールにはそこそこ時間がかかります。
そういうものだと思ってコーヒーでも飲みましょう。砂糖とクリームたっぷりの甘々で。

```:terminal
$ sudo rbenv global 2.6.2
$ sudo rbenv rehash
```
Rubyのバージョン切り替え。globalとlocalがある。
globalはシステム全体でのバージョン。
localはプロジェクトで使用するバージョン。(カレントディレクトリに.ruby-versionを作成する)
`$ cat .ruby-version`→`2.6.2`

さあ、Rubyのバージョンが切り替わったことを確認しましょう。

```:terminal
$ ruby -v
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]
```
あっるぇー？

思えば、ここでterminalを再起動したらうまくいった疑惑がありますが、とりあえずググってみた内容を試してみました。

↓こちらです。(ありがとうございます)
[rbenvを利用してローカル環境にrubyをインストールする](https://qiita.com/sea_ship/items/195466a666cfd94f0225)

```:terminal
$ ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]
```
良きかな良きかな。
最後にお作法的なあれを。

```rb:sample.rb
puts "Hello, World!!"
puts "Good Night, World."
```

```:terminal
$ ruby sample.rb
Hello, World!!
Good Night, World.
```
やったね！

## 後処理
単純に.rbファイルを書いてそれを実行するだけなら前段までで十分ですが、
フレームワークを導入する場合、山のような依存関係で発狂してしまいます。
bundlerもいれましょう。

```:terminal
$ sudo gem install bundler --no-doc
Fetching: bundler-2.1.4.gem (100%)
Successfully installed bundler-2.1.4
1 gem installed
```
おしまい。

しかし凄いですよね。
これがSAPだとNote(パッチみたいなもの)を適用する際、
Note:AをあてるためのNote:BをあてるためのNote:Cをあてるための…となります。
最終的にベーシス(システムのインフラ周りの専門家)さんに泣きついていたものです…。

## 参考リンク
あらためて、ありがとうございました。

Qiitaの記事
[CentOS7にRubyをインストール](https://qiita.com/jjjjjj/items/75a946fe84ca40b5d9a9)
[rbenvを利用してローカル環境にrubyをインストールする](https://qiita.com/sea_ship/items/195466a666cfd94f0225)

Hatena
[/etc/profile.d/とはなんのためのディレクトリなのか調べてみた](http://ztbuz.hateblo.jp/entry/2013/12/12/195113)