今天重装了ubuntu系统(ubuntu server),发现开发环境几乎是裸的。再重新编译安装erlang需要一些关键库,去年装过,现在又忘了,记之备查。
当然可以用apt-get直接安装erlang,不过版本有些旧而已,本文说的是如何从源代码编译出一个在ubuntu下可用的erlang。
可以用如下命令察看apt安装erlang所依赖的其它库:
sudo apt-get build-dep erlang
不过这里的许多库其实不是必须的,比如openjdk,fop等等。
[size=large]1. 基础开发工具的安装[/size]
指gcc/g++、make
sudo apt-get install build-essential
[size=large]2. 其它Erlang依赖的关键库[/size]
sudo apt-get install libncurses5-dev
sudo apt-get install libssl-dev
基本上安装以上软件后就可以顺利的编译出一个可用的erlang/OTP及其虚拟机了:
./configure && make
sudo make install
缺省情况下,Erlang Home目录是/usr/local/lib/erlang/
缺少的是:
[list]
[*]对systemtap的支持,
[*]JInterface的支持,
[*]wx的GUI库(用不了observer),
[*]ODBC的支持,
[*]Erlang文档的生成
[/list]
如果还需要以上功能,继续往下看。
[size=large]3. 老版本的Erlang可能依赖的其它库[/size]
现在m4不再是必须的了,老版本的erlang可能需要
sudo apt-get install m4
还有这些,也不是必须的,可能老的版本需要
sudo apt-get install libncursesw5-dev libreadline6-dev
[size=large]4. 其它不影响erlang源代码编译的非必需软件的安装[/size]
[size=medium]4.0 systemtap的支持[/size]
首先安装systemtap需要linux内核debug symbols的支持,因此需要重新编译自己的内核。
好在有人为ubuntu-10.xx提供了linux-image-dbgsym的apt安装源,省下了这一步。详见 [url=http://cryolite.iteye.com/blog/1828649]这篇备忘录[/url]
安装好内核dbgsym后,开始安装systemtap和systemtap-sdt-dev:
sudo apt-get install systemtap systemtap-sdt-dev
在编译Erlang/OTP时要指定systemtap
./configure --with-dynamic-trace=systemtap --enable-vm-probes --enable-native-libs
注意如果只装systemtap,没有安装systemtap-sdt-deb会出现如下错误:
configure: error: No dtrace utility found.
[size=large]4.1. JDK的安装[/size]
因为JInterface的编译需要java编译器javac(JInterface是JDK5的, 若缺省JDK低于1.5,make到JInterface时依然会出错)。
JInterface不是必须的,不过要坚持使用的话就需要安装JDK了。有两种安装方法:
ubuntu可以通过apt-get安装,也可以去oracle官方网站下载安装包手工安装。
[size=medium]4.1.1 apt-get安装[/size]
很久以前,ubuntu是可以直接apt-get安装java的:
sudo apt-get install sun-java6-jdk
从Ubuntu 10.04开始,apt-get不再缺省提供sun-jdk,需要自己手动为apt添加JDK源
1) 在Ubuntu 10.04中手动添加源:
sudo apt-add-repository "deb http://archive.canonical.com/ lucid partner"
2) 在Ubuntu 10.10中,手动添加源:
sudo apt-add-repository "deb http://archive.canonical.com/ubuntu maverick partner"
3) 在Ubuntu 11.10中,手动添加源:
sudo add-apt-repository ppa:ferramroberto/java
完成安装:
sudo apt-get update
sudo apt-get install sun-java6-jdk
4) 在Ubuntu 12.10中,手动添加源:
sudo add-apt-repository ppa:webupd8team/java
完成安装:
sudo apt-get update
sudo apt-get install oracle-java6-installer
[size=medium]4.1.2 下载JDK安装包安装[/size]
当然也可以去oracle的网站直接下载JDK(需要注册)安装,jrockit和sun的JDK都可以
sun:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
jrockit:
http://www.oracle.com/technetwork/middleware/jrockit/downloads/index.html
[size=medium]4.1.3 安装完成后需要为JDK设置环境变量[/size]
一般是设置JAVA_HOME和PATH(我习惯在/etc/profile中设置);
JAVA_HOME=/my/path/to/jdk
PATH=$JAVA_HOME/bin:$PATH
注:
安装完jdk后最好检查一下javac,因为新安装的JDK不一定会自动成为缺省的JDK。检查java编译器的版本:
javac -version
[size=medium]4.2 还有一些其他非关键库[/size]
比如关系数据库,图形界面。
sudo apt-get install libc6 (Ubuntu 9.10以后自动带这个,所以不用再装了)
sudo apt-get install unixodbc unixodbc-dev ODBC方式提供对传统关系数据库支持
erlang的新GUI工具是基于wxWidgets开发的,因此要使用这些工具必须安装wxWidgets
在ubuntu下安装wx:
sudo apt-get install freeglut3-dev libwxgtk2.8-dev
注意只有wx也不会顺利的make出支持GUI的erlang/otp,freeglut3-dev也是必须的,否则提示如下错误:
Can not link the wx driver, wx will NOT be useable
老版本的erlang使用的旧图形工具(如toolbar、appmon、pman、debugger、tv等),都是用的tcl/tk的wish做GUI界面,因此需要安装tk
sudo apt-get install tk8.5
tk不会影响老版本erlang的编译和安装,但是当在开发中想使用toolbar提供的一系列图形监控工具时就会出现问题。
[size=medium]4.3 生成erlang帮助文档所需要的软件[/size]
在R13B03后,要想自动生成帮助文件,需要安装xsltproc和fop:
sudo apt-get install xsltproc
sudo apt-get install fop
都挺大的(上百MB),如果不在乎文档,可以不安装,不会影响erlang的make。
[size=large]5. 安装man手册[/size]
官方除了源码包,还提供了man手册的下载,将该man压缩包下载后,解压缩到erlang home目录下,以后可以用erl -man命令察看相关模块的定义和说明了,如察看lists模块:
erl -man lists
[size=large]6. 卸载[/size]
缺省情况下,Erlang home目录是/usr/local/lib/erlang/, 直接删掉该目录即可卸载erlang otp。
如果自己设置了ERL_LIBS之类的环境变量,也记得删掉对应的目录。
cryolite不保证blog文章的稳定性,如有时间和需要随时会修改原文。
[size=large]7. 其它安装方法[/size]
7.1 用clang编译erlang
关于clang可以看这里([url=http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html]在 Linux 下使用 clang 3.0 + llvm 3.0 + libc++[/url])的介绍。
ubuntu下有两种clang安装方法
1) 可以apt-get安装clang
sudo apt-get install clang
然后
CC=clang CXX=clang ./configure
2) 也可以去[url=http://llvm.org/releases/download.html]llvm网站下载[/url]最新的编译好的官方clang,然后
CC=/path/to/clang+llvm-3.0/bin/clang CXX=/path/to/clang+llvm-3.0/bin/clang ./configure
这样完成配置后就可以make R15B了。
make
sudo make install
但是R14B04不能成功make,[url=http://www.planeterlang.org/en/planet/article/CouchDB_Benchmarks_gcc_vs._clang/]有人[/url]在Mac OS X下设置CFLAGS 为 -Qunused-arguments编译成功。但在ubuntu下gcc不支持此参数。。。
我比较了下R14B和[url=http://www.erlang.org/doc/installation_guide/INSTALL.html]R15B的安装说明文档[/url],发现只有后者有提到clang,估计R14B可能官方不支持clang。
理论上clang也能编译R14B的,有人手动修改编译脚本成功完成编译,但编译出的R14B虚拟机运行时似乎有问题,所以我就不折腾R14B的编译了。
7.2. erlang-solutions官方提供的二进制安装包
现在erlang-solutions开始正式提供编译好的Erlang OTP,见[url=http://www.erlang-solutions.com/section/132/download-erlang-otp]这里[/url]
提供各种平台(Mac OSX,ubuntu,linux,OpenSUSE,CentOS,Debian)上编译好的各个版本Eralng OTP。
就ubuntu而言,它提供的版本要比ubuntu官方的新,而且发布非常及时,新版erlang OTP刚刚正式发布,二进制的就已经编译好了。
不过它要额外安装一些其他依赖,比如,openjdk、还有GUI gtk,wx什么的,即使是在无GUI的server ubuntu下。
可以apt-get,也可以rpm安装。