MacBook Pro erlang 环境安装

犹豫了很久,还是咬牙把macbook pro给买了。勒紧裤腰带啃干脆面的日子就在眼前,anyway,2015的第一个目标提前实现了。
苹果的笔记本无论是工艺设计还是性能都还是很让人眼热的,对于一个程序猿来说,不失为一件装逼利器。
pro到手之后这两天,一直在把玩。布环境,搞插件,装应用。这个过程中也遇到了不少坎,掉了许多次坑。把这些经验教训都扔在这篇文字里,以作备忘。

修改命令提示符

使用vi编辑/etc/profile文件,或者~/.bash_profile文件,在最后加上:export PS1='[/u@/h /W]/$ ' 即可,其中/u显示当前用户账号,/h显示当前主机名,/W显示当前路径,/$显示’$’符号

Vim和iTerm配色

摒弃了系统自带的Terminal,装了更为方便的iTerm,但是默认的颜色都不太喜欢,所以更改了默认的配色方案。对于配色方案,萝卜青菜各有所爱,因人而异。我选择的是Solarized。
Solarized图案简介
Solarized官网地址:http://ethanschoonover.com/solarized
下载完成后,将用于vim的配色文件solarized.vim放在 ~/.vim/colors/ 目录下,如果没有该目录,自行创建。
然后设置 ~/.vimrc:
.vimrc
1
2
3
4
5
6
syntax enable
syntax on #语法高亮
set nu #显示行号
set t_Co=256
set background=dark
colorscheme solarized

最后打开 ~/.barshrc 并添加 "export TERM=xterm-256color", 这样vim的配色方案就设置完成了。
和vim的设置相比,iTerm的配色设置就简单多了。

  1. $ git clone git@github.com:seebi/dircolors-solarized.git solarized 克隆到本地。
  2. 然后找到 iterm2-colors-solarized 目录, 点击是使用目录下的 Solarized Dark.itermcolorsSolarized Light.itermcolors 导入配色方案。
  3. 打开iTerm左上找到 iTerm > Preference > Prefiles > colors 界面上找到选择配色方案的下拉框,选择刚才导入的深色或者浅色的Solarized方案就成功了。

安裝 Git 的 Bash autocompletion 和其他设置

brew install bash-completion
cp /usr/local/etc/bash_completion.d/git-completion.bash ~/.git-bash-completion.sh

编辑 ~/.bash_profile 加入

.bash_profile
1
2
3
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi

给git指令的输出结果添加颜色,例如:git status, git branch

$git config —global color.ui true

设定git指令的简写形式

$git config —global alias.co checkout
$git config —global alias.ci commit
$git config —global alias.st status
$git config —global alias.br branch
$git config —global alias.pl pull
$git config —global alias.ph push

基于ssh使用git

  1. 生成git使用的公私钥匙githubgithub.pub
    $ssh-keygen
  2. 在~/.ssh/config里加上刚才生成的github(私钥)
    Host github.com
    <注意缩进>IdentityFile ~/.ssh/github
  3. 登录github个人账户里,找到ssh key管理 > Add…… 把github.pub文件里的内容填入。
  4. 完成。

对于应用软件的安装和管理,向来是一件很头疼的事情。但好在linux上有yumapt类似的软件包管理工具,让绝大部分的软件都能很优雅的进行安装和卸载,处理好软件的依赖关系。
与之相对应的,Mac OS X上有homebrew
brew的详细介绍和简单用法不说,网上相关的文章一搜一片。

如何用brew安装我需要的R16B03这个版本?

在安装erlang环境的过程中,brew search erlang的时候列出的版本有erlang-r13,erlang-r14,erlang-r15,erlang-r16,而在erlang官网上R16打头的版本就有5个。
解决办法:

  1. 查看 brew 支持哪些版本的 erlang
    brew versions erlang
    17.0 git checkout 30de282 /usr/local/Library/Formula/erlang.rb
    R16B03-1 git checkout 0c2d4c8 /usr/local/Library/Formula/erlang.rb
    R16B03 git checkout a1ade14 /usr/local/Library/Formula/erlang.rb
    R15B03-1 git checkout 8759d6c /usr/local/Library/Formula/erlang.rb
    R16B03在里边,那么我们就能用brew安装了。
  2. 进入 brew 所在的git仓库
    cd `brew —prefix`
  3. 切换到R16B03的安装环境里
    git checkout a1ade14 /usr/local/Library/Formula/erlang.rb
  4. 安装R16B03版本的erlang
    brew install erlang

安装好了我想要的erlang版本,但是这个erlang环境里没有我需要用到的crypto这个库,后来才知道是因为Erlang的crypto模块与最新的openssl动态链接库不兼容。

如何解决openssl的兼容问题?

  1. 下载openssl源码
    $ wget hhttp://www.openssl.org/source/openssl-1.0.2a.tar.gz
    $ tar zxvf openssl-1.0.2a.tar.gz
  2. 进入源码目录,注意如果不是最新下的目录,需要先执行 make clean 确保能够重新编译成功
  3. 为了不和系统的openssl冲突,我们安装的时候需要指定安装的路径
    $ ./configure --prefix=/usr/local/opt
  4. config之后,会生成Makefile,打开Makefile找到gcc,在CFLAG参数列表里加上-fPIC
    CC= gcc
    CFLAG= -fPIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,—noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
  5. 编译并安装
    $ make && make install

到这里之后,如果是用源码安装erlang的话,就可以进到erlang的源码目录下,先make clean一下,然后./configure --with-ssl=/usr/local/opt/ssl 配置,最后 make && make install 编译安装就大功告成了。

但是为了让brew继续管理我的erlang,我还是决定用brew安装,先卸载之前没有包含crypto的erlang(brew unistall erlang)。

使用brew安装erlang时,如何加入指定的参数,例如: —with-ssl=/usr/local/opt/ssl ?

  1. 执行 $brew edit erlang 打开brew安装erlang时的命令源码
  2. 在install方法里找到`
    args = %W[
    --disable-debug
    --disable-silent-rules
    --prefix=#{prefix}
    --enable-kernel-poll
    --enable-threads
    --enable-shared-zlib
    --enable-smp-support
    
    ]这个参数,然后把—with-ssl=/usr/local/opt/ssl` 加到从参数里
  3. 按照之前的办法安装erlang R16B03,问题就解决了。
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]  

Eshell V5.10.4  (abort with ^G)   
1> crypto:start().   
ok   
2>

Erlang环境安装就到此完事了。

工作上除了用到Erlang,还有lua和Python,系统没有带lua,但是lua的安装很简单,不多说。系统带了Python,版本很多,默认的是2.7.6,不需要我再费心思。
装pip(Python包管理工具)没什么大问题,先装setuptools然后下载pip源码,进到目录执行python setup.py install基本上就完事了。然后其余的大部分包都可以通过pip install XX来安装和卸载,方便省事。

通过pip安装m2crypto,报错 m2crypto unable to find ‘openssl/opensslv.h’?

报错日志很明白,找不到openssl的inlude和lib目录,需要的头文件找不到。

  1. 找到系统里的opensslv.h文件
    find / -name opensslv.h
  2. 把找到的结果都看了一遍,发现/Applications/Xcode.app/Contents/Developer/Platforms /MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/openssl这个目录最像是所需要的,通过软连接把这个目录放到pip能找到的地址下。
    ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.
    10.sdk/usr/include/openssl /usr/include/
  3. 重新安装pip install m2crypto,发现还有报错找不到 AvailabilityMacros.h,看了一下报错的文件 openssl/stack.h :62行有这么一句#include <AvailabilityMacros.h>,导入同级目录下的AvailabilityMacros.h头文件,但是这个文件不存在。
  4. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ MacOSX10.10.sdk/usr/include/AvailabilityMacros.h,通过find搜出来发现它是这样的。按照上边的方法把它也软连接到/usr/include/openssl/目录下。
  5. 再次pip安装,成功。

到这里,工作需要用到的环境基本上也就安装完成了。后来在clone转移我基于octopress搭建的个人时又遇到了不少问题,这一节另记,就不再这里写了。
总得说来,弄这些环境的过程中有时候卡在一个地方真的是想死的心都有,装一遍不成继续装第二遍,两遍三遍不成,担心自己本就不大的硬盘里残留的垃圾越来越多,真是着急。但好在在各种折腾之后,不管是网上找到解决办法,还是自己去看源码找到了解决的方案,整个过程对我来说都是进步的课程。

知道问题的原因,找到问题的解决办法。知其然,亦知其所以然。这也是我作为一个技术人员的理念,程序在于折腾。
上图几张,晒晒我的MacBook Pro。

Macbook Pro

完。