关于 OSX 升级到 EI Captain 的解决方案

作者 Gavin 日期 2015-10-06
OSX
关于 OSX 升级到 EI Captain 的解决方案

昨天把OSX升级到了 EI Captain,然后就遇到了各种奇怪问题。

  • 刚开始只是发现QQ变成英文了 => 没问题,重新安装了一遍好了…

  • 然后下午发现 Sequel 连接不到远程服务器,发现是 ssh 无法使用公钥的问题,删除~/.ssh/known_hosts(已经提前备份)后,发现还是不可以,重装后依然不行。最后下载了更高版本的 Sequel 没问题了…

  • 后来要更新blog的时候,发现ruby不能使用,( 因为blog使用的是Octopress ),ruby各种报权限不足的Error,什么鬼?

查看了下EI Captain的更新说明,原来是Rootless惹的祸:

一句话总结,即使是root用户,将无法对以下路径有写和执行权限:

/System

/bin

/sbin

/usr (except /usr/local)

只有Apple自身签名的软件(含命令行工具)可以。

尝试关掉Rootless

1
gavin:octopress gavin$ sudo nvram boot-args="kext-dev-mode=1 rootless=0";sudo reboot

重启后依然不行,再更新下 CommandLine Tool,新版本的XCode竟然把之前的CommandLine Tool删除了,从官网下载后进行了安装。

然后自定义GEM_HOME:

1
2
3
#Add For Custom Ruby
export GEM_HOME=/data/app/ruby
export PATH=$PATH:$GEM_HOME/bin
1
2
3
4
5
6
gavin:octopress gavin$ gem update
gavin:octopress gavin$ gem install bundler
gavin:octopress gavin$ bundle install # install RedCloth
gavin:octopress gavin$ gem install jekyll
gavin:octopress gavin$ gem install compass
gavin:octopress gavin$ rake generate

Success!

brew也受到了影响,把/usr/local的权限设置成 755,并重新update
update过程中会报错:brew update failure while executing git checkout
执行以下命令:

1
2
3
4
5
$ cd `brew --prefix`
$ git remote add origin https://github.com/Homebrew/homebrew.git
$ git fetch origin
$ git reset --hard origin/master
$ brew update

新机制Rootless出现后,很多软件安装都不能放到/usr下了,重新改变软件路径就可以了。

[参考资料]

  1. 在 OS X 10.11 中引入的 Rootless 是如何实现的?有什么优势与缺陷?

  2. brew update failure while executing git checkout

  3. 安装Cocoapods,更新gem出现的问题