一、问题
最近换了笔记本,原来的一些命令行工具都需要重新配置一下,发现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(推荐)
- 安装
RVM
$ curl -L get.rvm.io | bash -s stable
- 测试安装结果
$ rvm -v
- 查看当前
ruby
版本
$ ruby -v
如果只使用了mac系统自带的ruby
,则获取不到,会有相应提示,你可以忽略,直接安装最新版本的ruby
即可。
- 列出所有可用的
ruby
版本
$ rvm list known
- 安装最新版本的
ruby
(以2.4.1为例)
$ rvm install 2.4.1
2. 关闭SIP机制
- 重启mac
- 按住command+r
- 选择实用工具菜单中的命令行(terminal/终端)
- 输入csrutil disable并回车
- 重启mac
- 进入终端执行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