发布于 

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

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

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

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

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

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

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

1
2
3
4
/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 出现的问题