ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

Amazon-Linux "ami-cbf90ecb"でrakeが使えない

nginx + mrubyを動かそうとしたとき、CentOSではyumで入るrubyで動くが、EC2のamazon-linux "ami-cbf90ecb"ではrakeが動かない。ngx_mrubyをbuildしようとしたときのことだ。

[ec2-user@ip-10-1-1-67 ngx_mruby]$ ruby --version
ruby 2.0.0p643 (2015-02-25) [x86_64-linux]
[ec2-user@ip-10-1-1-23 ~]$ rake
-bash: rake: command not found

なんでないんや

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake
lrwxrwxrwx 1 root root 22 Jul 15 09:55 /usr/bin/rake -> /etc/alternatives/rake

おっあるやん

[ec2-user@ip-10-1-1-23 ~]$ ls -la /etc/alternatives/rake
lrwxrwxrwx 1 root root 16 Jul 15 09:55 /etc/alternatives/rake -> /usr/bin/rake2.0

ほう

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake2.0
ls: cannot access /usr/bin/rake2.0: No such file or directory

なるほど

で、なんか2.4はあるのね

[ec2-user@ip-10-1-1-23 ~]$ ls -la /usr/bin/rake2.4
-rwxr-xr-x 1 root root 1185 Aug 18  2017 /usr/bin/rake2.4

結論

symlinkはりなおそ

[ec2-user@ip-10-1-1-23 ~]$ sudo rm /etc/alternatives/rake
[ec2-user@ip-10-1-1-23 ~]$ sudo ln -s /usr/bin/rake2.4 /etc/alternatives/rake
[ec2-user@ip-10-1-1-23 ~]$ rake --version
rake, version 12.0.0

/etc/alternative/rakeって何

せっかくなので軽くググる

なるほどー、symlinkでバージョンを切り替えるのをサポートするalternativeというのがあって、なんことやらrakeは2.0の実態がなくなって2.4しかない状態になっていた感じね。

じゃalternative使って2.4向けてやればよかったのね

(再)結論

rubyを2.4に切り替えてやればいい

alternativesコマンドで確認したところ、rakeはない。

[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --display rake

rubyはなんやかんやでて、2.0と2.4をサポートしてそうな雰囲気。

[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --display ruby | grep ruby
ruby - status is auto.
 link currently points to /usr/bin/ruby2.0
/usr/bin/ruby2.0 - priority 2000
 slave ruby.pc: /usr/lib64/pkgconfig/ruby-2.0.pc
 slave ruby.1: /usr/share/man/man1/ruby2.0.1.gz
/usr/bin/ruby2.4 - priority 243
 slave ruby.pc: /usr/lib64/pkgconfig/ruby-2.4.pc
 slave ruby.1: /usr/share/man/man1/ruby2.4.1.gz
Current `best' version is /usr/bin/ruby2.0.

切り替える。

[ec2-user@ip-10-1-1-227 ~]$ ruby -v
ruby 2.0.0p643 (2015-02-25) [x86_64-linux]
[ec2-user@ip-10-1-1-227 ~]$ sudo alternatives --config ruby

There are 2 programs which provide 'ruby'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/bin/ruby2.0
   2           /usr/bin/ruby2.4

Enter to keep the current selection[+], or type selection number: 2
[ec2-user@ip-10-1-1-227 ~]$ ruby -v
ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux-gnu]

[ec2-user@ip-10-1-1-227 ~]$ rake --version
rake, version 12.0.0

おしまい。