El Capitan gem 命令由于访问权限问题不能正常使用

一、问题

最近换了笔记本,原来的一些命令行工具都需要重新配置一下,发现gem install不好使了,即使使用sudo获取管理员权限也不行,想起来以前升级mac os 10.11时也有同样的问题,想起来是ruby版本的问题。

以下是一些错误

  • 错误1
$sudo gem update

ERROR:  While executing gem ... (Errno::EPERM) 
Operation not permitted - /usr/bin/aws-rb
  • 错误2
$sudo gem install cocoapods

ERROR:  While executing gem ... (Errno::EPERM) 
Operation not permitted - /usr/bin/pod


$gem install cocoapods

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
  • 错误3
$sudo gem install shenzhen

ERROR:  While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/ipa

二、为什么

Apple在OS X El Capitan中全面启用了名为System Integrity Protection (SIP)的系统完整性保护技术。受此影响,大部分系统文件即使在root用户下也无法直接进行修改。

三、解决方案

1. 升级ruby(推荐)

  1. 安装RVM
$ curl -L get.rvm.io | bash -s stable
  1. 测试安装结果
$ rvm -v
  1. 查看当前ruby版本
$ ruby -v

如果只使用了mac系统自带的ruby,则获取不到,会有相应提示,你可以忽略,直接安装最新版本的ruby即可。

  1. 列出所有可用的ruby版本
$ rvm list known
  1. 安装最新版本的ruby(以2.4.1为例)
$ rvm install 2.4.1

2. 关闭SIP机制

  1. 重启mac
  2. 按住command+r
  3. 选择实用工具菜单中的命令行(terminal/终端)
  4. 输入csrutil disable并回车
  5. 重启mac
  6. 进入终端执行sudo gem update --system

更新完毕后你可以进行相关的gem命令操作。不过此时你的电脑处于SIP的关闭状态,对于系统来说可能是不安全的,所以这种操作需要谨慎。
你也可以按照上述步骤,使用csrutil enable指令重新打开你的SIP。

相关指令:

  • 查看SIP开关状态

     $csrutil status
    
  • 打开SIP开关

     $csrutil enable
    
  • 关闭SIP开关

     $csrutil disable
    
  • 清除SIP标志位(等同于SIP完全开启)

     $csrutil clear
    

3.自定义GEM_HOME

在终端输入以下指令:

$ mkdir -p $HOME/Software/ruby
$ export GEM_HOME=$HOME/Software/ruby
$ gem install cocoapods
$ export PATH=$PATH:$HOME/Sofware/ruby/bin

4.将/usr/bin下的链接转到/usr/local/bin

你只需要在终端执行以下一条指令

$sudo gem install cocoapods -n /usr/local/bin

参考

1.http://stackoverflow.com/questions/31972968/cant-install-gems-on-macos-x-el-capitan
2.http://bbs.pcbeta.com/viewthread-1605186-1-1.html

你可能感兴趣的:(El Capitan gem 命令由于访问权限问题不能正常使用)