Mac OS X Lion 10.7.4 如何安装Homebrew
为了研究iPhone4上的越狱插件开发,我开始捣鼓起古老的iOS 6。而iOS 6开发需要使用XCode 4.5以上到XCode 5之间的版本,系统需要Mac OS X 10.7.4以上到Mac OS X 10.8之间的版本,这些条件我都满足了,可以参考VMWare安装Mac OS X 10.7.4。接下来需要解决的是,给Mac安装Homebrew,因为越狱插件需要。然而安装过程并不顺利。
升级OpenSSL
安装Homebrew的命令很简单,只需要命令行
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
但是安装过程报错
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
我在网上找到的说法是,Homebrew的安装需要使用CURL工具,需要从GitHub获取源代码,而GitHub 停止了对加密弱 TLS 1.0 和 1.1 协议的支持,并且仅支持与 TLS 1.2 协议以上的连接。而自带的CURL工具仅支持TLS 1.0协议。而CURL工具的加密解密部分又依赖于OpenSSL工具,我的Mac Lion上的OpenSSL版本有点低,才0.9.8,可以使用命令行查看
1 | openssl version |
索性,我编译安装一个新版的OpenSSL吧。
因为系统太旧,只能选择从OpenSSL官网下载源代码,而无法使用CURL工具从GitHub下载。下载完成后,第一步先备份一下原OpenSSL工具。
1 | // 查看openssl命令文件路径,一般位于/usr/bin/openssl |
在使用make
命令之前有个前提,先给XCode安装Command Line Tools for Xcode
,不然没有gcc
以及make
等命令。可以通过Xcode->Open Developer Tool->More Developer Tools,输入苹果开发者账号后(没有的话注册一个),找到Command Line Tools (OS X Lion) for Xcode 2012下载安装即可。
这样,就拥有了一个最新版本的OpenSSL,再次查看版本,显示1.1.1。记得一定要加上sudo
,我之前因为没加上,导致好几次都没安装成功,如果安装失败也没关系,只需要执行命令清理一下就行,然后重新安装
1 | // 进入openssl源代码目录 |
升级CURL
升级完OpenSSL之后,接下来就是要升级CURL工具了。这个过程比较艰辛,踩了很多坑。首先一样是去CURL官网去下载源代码。我下载的是最新的7.61.1版本。
有一个问题,我的虚拟机没法安装VMWare Tools,即便安装了成功了,虚拟机和主机之间依然无法互相访问。而Lion自带的Safari浏览器连CURL官网都打不开,我不得不用到自己的VPS来实现中转下载,多一步过程,总是觉得麻烦。
还有最重要的一点是,需要从CURL官网上下载证书文件,它的内容是一些可以信任的服务器,少了该证书文件,每次使用CURL命令时都会报
curl: (60) SSL certificate problem: self signed certificate in certificate chain More details here: https://curl.haxx.se/docs/sslcerts.html
虽然在使用CURL命令时可以加上-k
参数,允许暂时信任访问的服务器,但是在使用brew命令的时候,brew默认调用CURL命令时不会带上-k
参数,如果要自己加上还要修改Homebrew源代码进行编译,极其麻烦。
整个编译CURL的过程是这样的
1 | // 重命名证书文件(为了方便),将其放到一个某个目录下,我放在了~/.ssh隐藏目录下 |
特别要注意的是上面的--with-ssl
以及--with-ca-bundle
参数,这两个参数很重要,如果不指定--with-ca-bundle
就会出现上面的没有信任服务器的问题,使用CURL命令访问无论哪个网站,都无法直接访问,必须带上-k
参数才行。这个问题困扰了我很久,可能是我没有好好读CURL官网的文档。
还有一个就是--with-ssl
参数,这个参数也很重要,它告诉CURL命令,使用哪个版本的OpenSSL的关键所在,上一步升级OpenSSL就是为了在这里指定。如果不指定该参数,仍然会报错
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
使用make命令的时候可能会提示
make[1]: Nothing to be done for `all-am’
忽略它就是了,并没有什么影响
安装Homebrew
貌似安装完CURL之后,系统就默认给安装上了Homebrew,我是在下载到了Homebrew的源码后才发现,原来已经安装好了,我推算可能和安装CURL有关,但我还是介绍一下下载哪个版本的Homebrew。
通过查看Homebrew的install文件可以得知,旧版的Homebrew源代码位于https://github.com/Homebrew/brew/tarball/master。因为我已经安装好了,所以就不需要编译安装了。
总结
终于可以使用brew命令了,深感安装环境的不易。当然我也学到了一点皮毛,但下次还是老老实实先看看官方文档再来安装吧。如果着急想搭环境,效果可能会适得其反。