一、問題
最近換了筆記本,原來的一些命令行工具都需要重新配置一下,發現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