なぜ yumで Rubyをインストールするのか?
Rubyを使った開発経験がある人ならわかると思いますが、yumで Rubyをインストールすることはあまりないと思います (そんなことなかったらすみません。。)
少なくとも私は、新卒未経験からこれまで2年間半ありませんでした。大体は rbenvや ソースコードからコンパイルするのではないでしょうか。
ではなぜ yumで Rubyをインストールしようとしたのか。
特に深い意味はなく、DevOps 導入指南 という書籍の中に Playbookで yumを使って Rubyをインストールするよう書かれていたからです。
ただそれだけの話なのですが(笑)、ちょっとした問題が起こり勉強になったのでメモとして残そうと思った次第です。
ちょっとした問題とは?
Ruby gemがインストールできない
Playbookでは、 yumで Rubyをインストールするときに以下のような記述をします。
( 本記事ではあまり重要ではないですが、Playbookってなんぞやという方はこちら → Ansible 入門 playbook )
- name: install ruby
yum:
name: ruby
state: installed
実行してみると以下のようにエラーが発生しました。
Error installing rake:\n\trake requires Ruby version >= 2.2.
上のソースコードには書かれていませんが、Rubyをインストールしたあとに gemの rakeもインストールしています。つまり、その rakeが Rubyのバージョン2.2.0 以上じゃないと動かないよってことです。
あれ、インストールされる Rubyのバージョンは最新ではないの?
てっきりバージョンを指定しない場合、最新版がインストールされると思っていました。
確認してみると...
$ ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
なぜかバージョン2.0ですね。
なるほどね (わかっていない)。
Playbookでバージョンを指定してみました。
No package matching, found available
だめでした。
おそらく yumのパッケージが古いのだな。核心を得た気がしたので Rubyをアンインストールして、
yum -y remove ruby
yumを更新して、
yum update
再実行。
Error installing rake:\n\trake requires Ruby version >= 2.2.
何の成果も!!得られませんでした!!
原因はなにか?
Rubyのコミュニティサイトに以下のような記述がありました。
Rubyのインストール - パッケージ管理システム
もしあなたが Ruby をコンパイルできず、サードパーティツールを使いたくないのであれば、 あなたのシステムのパッケージマネージャを使って Ruby をインストールすることができます。
Ruby コミュニティの中の一部のメンバーは Ruby をインストールするのに、 パッケージマネージャを使わず、代わりに専用のツールを使うべきであると強く考えています。 その利点・欠点を詳述するのはこのページの範囲から逸脱するため割愛しますが、 最大の理由は大半のパッケージマネージャは公式リポジトリに古いバージョンの Ruby しかないからです。 もしあなたが新しい Ruby を使いたければ、パッケージ名が正しいか確認するか、 上述した専用ツールを使ってください。
なるほど。
私の環境は以下の通りです。
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
以下のバージョンのリリース日は 2019年9月17日のようなので、Ruby 2.0はさすがに古すぎだろと思ってしまいます。
pkgs.org
CentOS 7の Rubyのパッケージ を調べてみました。
どうやら、CentOS 7は Ruby 2.0しか yumでインストールできないようです (CentOS 8では バージョン 2.5.5と 2.6.3だけのようです)。
正直、これは予想外でした。Rubyの新しいバージョンが出ればパッケージも用意されると思っていたのですが、そういうものではないのですね。
たしかに Rubyのようなプログラミング言語はいくつもありますし、それらがバージョンアップするたびに新しいパッケージを用意していたら大変ですもんね。それに OSがカバーする範囲でもないわけですし。
それからどしたの
私の環境では yumで Rubyのバージョンが 2.0以外インストールできないとなると、エラーが起きている gemのバージョンを下げるか、yumを諦めて rbenvもしくはソースコードからコンパイルするしかありません。
結局、rbenvで Rubyをインストールすることにしました。今回の目的は Rubyのインストールではないので、なんでもいいやといった感じです。
Ansibleと Serverpecを学習したかったのですが、思わぬところで時間を取られてしまいました。ただこれまでに OSのパッケージを眺めることはあまりなかったので、良い経験になりました。これを機に、もう少し詳しいところまで学習してみたら楽しいのかもしれません。
以上です。最後まで読んでくださりありがとうございます。