2.构建和安装Erlang / OTP | 2. Building and Installing Erlang/OTP

2构建和安装Erlang/OTP

2.1简介

本文档介绍如何构建和安装Erlang/OTP-20。Erlang/OTP应该可以在任何Unix/Linux系统(包括OS X)上从源代码构建。建议您在尝试构建和安装Erlang/OTP之前阅读整个文档。

源代码可以从Erlang/OTP或GitHub的官方站点下载。

  • http://www.erlang.org

2.2所需的实用程序

这些是您需要解包并构建Erlang/OTP的工具。

警告

请在Known platform issues开始之前查看该章节。

开箱

  • GNU解压缩,或现代解压缩。

建造

  • GNU make

Building in Git

  • autoconf至少版本2.59的GNU 。请注意,autoconf构建发布源的未修改版本时不需要。

Building on OS X

  • Xcode - 通过Mac App Store下载并安装。Building on a Mac在继续之前阅读。

安装

  • 一个install可以取多个文件名的程序。

2.3可选实用程序

如果不满足依赖关系,某些应用程序会自动跳过。以下是这些应用程序所需的实用程序列表。您还可以找到构建文档所需的实用程序。

Building

  • OpenSSL - 用于安全套接字层和传输层安全性的开源工具包。构建应用程序所需crypto。此外,sslssh需要一个可用的加密应用程序,并且如果缺少OpenSSL,它也将被跳过。该public_key应用程序没有crypto,但功能将非常有限。需要包含头文件的OpenSSL开发包以及二进制命令程序openssl。至少需要OpenSSL 0.9.8版本。阅读更多并从中下载http://www.openssl.org

构建文档

  • xsltproc - 一个命令行XSLT处理器。将XSLT样式表应用于XML文档的工具。从下载xsltproc http://xmlsoft.org/XSLT/xsltproc2.html

2.4如何构建和安装Erlang/OTP

以下说明适用于建筑物the released source tar ball

这个变量$ERL_TOP会被提及很多次。它指向源树中的顶层目录。有关更多信息$ERL_TOP,请参阅make and $ERL_TOP下面的部分。如果你在git中建立,你可能想Building in Git在继续之前看看下面的部分。

Unpacking

首先用GNU兼容的TAR程序解压Erlang/OTP分发文件。

$ tar -zxf otp_src_20.1.tar.gz # Assuming bash/sh

现在将目录切换到基本目录并设置$ERL_TOP变量。

$ cd otp_src_20.1 $ export ERL_TOP=`pwd` # Assuming bash/sh

配置

运行以下命令来配置构建:

$ ./configure [ options ]

注意

如果您从git构建Erlang/OTP,则需要运行./otp_build autoconf以生成配置脚本。

默认情况下,Erlang/OTP版本将安装在/usr/local/{bin,lib/erlang}。如果您没有在标准位置安装的权限,则可以在其他位置安装Erlang/OTP。例如,要安装/opt/erlang/20.1/{bin,lib/erlang},请使用--prefix=/opt/erlang/20.1选项。

在某些平台上,如果设置了某些语言环境,Perl可能会表现得很奇怪。如果您在构建时遇到错误,请尝试设置LANG变量:

$ export LANG=C # Assuming bash/sh

构建

构建Erlang/OTP版本。

$ make

测试

在安装之前,您应该通过运行烟雾测试来测试您的版本是否正常工作。烟雾测试是完整的Erlang/OTP测试套件的一个子集。首先,您需要构建并发布测试套件。

$ make release_tests

这将创建一个额外的文件夹中$ERL_TOP/releasetests。现在该开始抽烟测试了。

$ cd release/tests/test_server $ $ERL_TOP/bin/erl -s ts install -s ts smoke_test batch -s init stop

要确认一切正常,应$ERL_TOP/release/tests/test_server/index.html在Web浏览器中打开并确保没有失败的测试用例。

注意

在没有建立cryptossl并且ssh有一个失败的测试用例未定义功能。验证失败的测试用例日志只显示对跳过的应用程序的调用。

安装

您现在已准备好安装Erlang/OTP版本!以下命令将在您的系统上安装该版本。

$ make install

运行

你现在应该有一个Erlang/OTP的工作版本!跳转到System Principles有关运行Erlang/OTP的说明。

如何构建文档

确保您位于源代码树的顶部目录中。

$ cd $ERL_TOP

如果您刚刚在当前源代码树中构建了Erlang/OTP,那么您已经运行了configure,不需要再次执行此操作;否则,运行configure

$ ./configure [Configure Args]

在构建文档时,您需要完整的Erlang/OTP-20.1系统$PATH

$ export PATH=$ERL_TOP/bin:$PATH # Assuming bash/sh

对于FOP打印格式化程序,必须采取两个步骤:

  • 将您的安装位置fop$FOP_HOME。$ export FOP_HOME = / path / to / fop / dir#假设bash / sh

构建文档。

$ make docs

构建问题

我们有时会遇到Oracle java运行时内存不足的问题fop。在我们的例子中,增加可用内存的数量已经解决了这个问题。

$ export FOP_OPTS="-Xmx<Installed amount of RAM in MB>m"

更多信息可以在网上找到

  • http://xmlgraphics.apache.org/fop/0.95/running.html#memory.

如何安装文档

可以使用install-docs目标或使用release_docs目标来安装文档。

  • 如果您使用install目标安装了Erlang/OTP ,请使用目标安装文档install-docsconfigure将使用确定的安装位置。$DESTDIR可以以与做时相同的方式使用make install。$ make install-docs

访问文档

安装后,您可以通过访问文档

  • 阅读手册页。确保指的erl是已安装的版本。例如/usr/local/bin/erl。尝试查看Mnesia $ erl -man mnesia的手册页

如何安装预格式化的文档

预格式化html documentationman pages可以从中下载

  • http://www.erlang.org/download.html.

解压缩安装目录中的html存档。

$ cd <ReleaseDir> $ tar -zxf otp_html_20.1.tar.gz

为了erl -man <page>工作,Unix手册页必须以相同的方式安装,即

$ cd <ReleaseDir> $ tar -zxf otp_man_20.1.tar.gz

当<ReleaseDir>是

  • <PrefixDir>/lib/erlang如果你已经安装了Erlang / OTP make install。

2.5高级配置和Erlang/OTP构建

如果您想要量身定制您的Erlang/OTP构建和安装,请阅读有关各个步骤的详细信息。

make and $ERL_TOP

整个目录树中的所有makefile都使用环境变量ERL_TOP来查找安装的绝对路径。该configure脚本将解决这个问题并将其设置在顶层Makefile中(在构建时它将传递)。但是,在开发时,有时可以方便地在子目录中运行make。为此,您必须ERL_TOP在运行make之前设置变量。

例如,假设你的GNU make程序被调用make,你想重建应用程序STDLIB,那么你可以这样做:

$ cd lib/stdlib; env ERL_TOP=<Dir> make

哪里<Dir>会是你发现了什么ERL_TOP在顶层Makefile文件设置为。

otp_build vs configure/make

建筑二郎山/ OTP既可以做,通过使用$ERL_TOP/otp_build脚本,或通过调用$ERL_TOP/configuremake直接。构建使用otp_build更容易,因为它涉及更少的步骤,但otp_build构建过程不如configure/ makebuild过程那么灵活。我们提供的Windows二进制版本是使用构建的otp_build

配置

配置脚本由GNU autoconf实用程序创建,该实用程序检查系统特定的功能,然后创建许多makefile。

配置脚本允许您自定义一些参数; 类型./configure --help./configure --help=recursive细节。./configure --help=recursive将为configure所有应用程序中的所有脚本提供帮助。

你可以指定的一个地方是应该安装Erlang / OTP的地方。默认情况下Erlang / OTP将安装在中/usr/local/{bin,lib/erlang}。为了保持相同的结构,但安装在不同的地方,<Dir>比如说,使用这样的--prefix参数:./configure --prefix=<Dir>。

一些可用的configure选项是:

  • --prefix=PATH - 指定安装前缀。

如果您或您的系统有特殊要求,请阅读Makefile其他配置信息。

原子内存操作和虚拟机

具有SMP支持的虚拟机对原子内存操作进行了相当多的使用。提供本地原子内存操作的实现因此在构建Erlang / OTP时非常重要。默认情况下,如果本机原子内存操作不可用,虚拟机将拒绝构建。

Erlang / OTP本身提供本地原子内存操作的实现,可以在使用gcc32/64位x86,32/64位SPARC V9,32位PowerPC或32位Tile 的兼容编译器进行编译时使用。当使用gcc兼容编译器编译其他体系结构时,VM可能能够使用__atomic_*内建的本机原子操作(可能在使用gcc至少4.7版本时可用)和/或使用__sync_*内置函数(可能在使用一个gcc至少4.1版本)。如果只有gcc__sync_*内置的可用,性能将受到影响。这种配置只能用作最后的手段。在Windows上使用MicroSoft Visual C ++编译器进行编译时,Windows API提供本机原子内存操作。

本地原子执行顺序首选:

  • Erlang / OTP提供的实现。

建造

在相对较快的计算机上构建Erlang / OTP大约需要5分钟。为了加快速度,您可以使用-j<num_jobs>选项并行制作。

$ export MAKEFLAGS=-j8 # Assuming bash/sh $ make

如果您已使用补丁升级源代码,则可能需要在新版本之前从之前的版本中清除。Pre-built Source Release做一个之前请务必阅读下面的部分make clean

在Git中

在Git工作目录中构建时,autoconf您的系统上必须具有至少2.59版本的GNU ,因为configure在开始构建之前需要生成脚本。

configure脚本通过调用生成./otp_build autoconf$ERL_TOP目录。configure当文件configure.inaclocal.m4文件被修改时,脚本也必须重新生成。请注意,在检出分支时configure.inaclocal.m4文件或文件可能会更改内容,因此configure在检出分支时可能必须重新生成脚本。重新生成的configure脚本意味着您必须重新运行configure并重新构建。

注意

运行./otp_build autoconf不是建筑释放源的未修改的版本时需要。

其他有用的信息可以在我们的GitHub wiki中找到:

  • http://wiki.github.com/erlang/otp

OS X (Darwin)

确保该命令hostname返回一个有效的完全限定主机名(在此配置/etc/hostconfig)。否则,运行分布式系统时可能会遇到问题。

如果你开发链接驱动程序(共享库),你需要链接使用gcc和标志-bundle -flat_namespace -undefined suppress。您还包括-fno-commonCFLAGS编译时。使用.so的库后缀。

如果您有Xcode 4.3或更高版本,则还需要通过Xcode中的下载首选项窗格下载“命令行工具”。

用wxErlang构建

如果你想构建wx应用程序,你将需要获得wxWidgets-3.0(wxWidgets-3.0.0.tar.bz2from http://sourceforge.net/projects/wxwindows/files/3.0.0/)或者从github获得bug修复:

$ git clone --branch WX_3_0_BRANCH git@github.com:wxWidgets/wxWidgets.git

请注意,wxWidgets-3.0是wxWidgets的新版本,并不像旧版本那么成熟,OS X端口仍然落后于其他端口。

配置和构建wxWidgets(在Mavericks - 10.9上):

$ ./configure --with-cocoa --prefix=/usr/local or without support for old versions and with static libs $ ./configure --with-cocoa --prefix=/usr/local --with-macosx-version-min=10.9 --disable-shared $ make $ sudo make install $ export PATH=/usr/local/bin:$PATH

检查你是否得到了正确的wx-config

$ which wx-config && wx-config --version-full

构建Erlang / OTP

$ export PATH=/usr/local/bin:$PATH $ cd $ERL_TOP $ ./configure $ make $ sudo make install

预建源码版本

源代码发布提供了许多独立于平台的构建结果,这些结果已经预先构建完成。如果你想删除这些预建的文件,./otp_build remove_prebuilt_files$ERL_TOP目录调用。完成这些之后,您可以像以前一样构建,但构建过程需要更长的时间。

警告

这样make clean在源树的任意目录中,可能会删除需要提供引导构建文件。

这样./otp_build save_bootstrap$ERL_TOP做之前目录make clean将确保将有可能这样做之后建立make clean./otp_build save_bootstrap当将被自动调用make从调用$ERL_TOP与任一所述clean目标,或默认目标。如果./otp_build remove_prebuilt_files被调用,它也会自动调用。

如果您需要验证引导波束文件与提供的源文件匹配,请使用./otp_build update_primary创建一个包含差异(如果存在)的新提交。

如何构建一个启用调试的Erlang RunTime系统

完成上述所有常规构建步骤后,便可构建启用调试的运行时系统。要做到这一点,你必须改变目录$ERL_TOP/erts/emulator

在这个目录中执行:

$ make debug FLAVOR=$FLAVOR

哪里$FLAVORplain或者smp。flavor选项将分别产生一个beam.debug和beam.smp.debug可执行文件。这些文件连同普通(OPT)版本安装侧面beam.smpbeam

要启动启用调试的运行时系统,请执行:

$ $ERL_TOP/bin/cerl -debug

启用调试的运行时系统具有锁定违规检查,断言检查和各种健全性检查,以帮助开发人员确保正确性。其中一些功能可以使用适当的配置选项在普通光束上启用。

还有其他类型的运行时系统也可以使用刚刚描述的类似步骤来构建。

$ make $TYPE FLAVOR=$FLAVOR

其中$TYPEoptgcovgprofdebugvalgrind,或lcnt。这些不同的光束类型对调试和分析目的很有用。

安装

  • 分阶段安装使用DESTDIR。您可以在临时目录中执行安装阶段,然后通过使用DESTDIR变量将安装移动到正确的位置:$ make DESTDIR = <tmp install dir> install安装将在前缀为的位置创建$DESTDIR。但是,它不能从那里运行。它需要在可以运行之前移入正确的位置。如果DESTDIR尚未设置但INSTALL_PREFIX已设置,DESTDIR则会设置为INSTALL_PREFIX。请注意,INSTALL_PREFIX在R13B04之前是有问题的,表现如下EXTRA_PREFIX(见下文)。安装过程有很多使用领域DESTDIR,例如,在创建包,交叉编译等时使用。下面是安装应位于下面的示例/opt/local:$ ./configure --prefix = / opt / local $ make $ make DESTDIR = / tmp / erlang-build install $ cd / tmp / erlang-build / opt / local $#本例中使用gnu-tar $ tar -zcf /home/me/my-erlang-build.tgz * $ su - 密码:***** $ cd / opt / local $ tar -zxf /home/me/my-erlang-build.tgz

- `-minimal` Creates an installation that starts up a minimal amount of applications, i.e., only `kernel` and `stdlib` are started. The minimal system is normally enough, and is what `make install` uses. - `-sasl` Creates an installation that also starts up the `sasl` application. - `-cross` For cross compilation. Informs the install script that it is run on the build machine. - `<ERL_ROOT>` - The absolute path to the Erlang installation to use at run time. This is often the same as the current working directory, but does not have to be. It can follow any other path through the file system to the same directory.

如果两者都不是-minimal,也不会-sasl作为参数传递,您将被提示。

  • 测试安装使用EXTRA_PREFIX。在执行时,EXTRA_PREFIX变量的内容将作为所有安装路径的前缀make install。需要注意的是EXTRA_PREFIX类似DESTDIR的,但它并没有具有相同的效果DESTDIR。安装程序可以并且必须从指定的位置运行EXTRA_PREFIX。也就是说,如果你想在不进行真正的安装之前尝试系统,运行测试套件等,它会很有用EXTRA_PREFIX

--bindir中的符号链接

在执行make install和使用默认安装前缀时,相对符号链接将从/usr/local/bin所有公开的Erlang / OTP可执行文件中创建/usr/local/lib/erlang/bin。只要安装阶段将尝试创建相对符号链接,--bindir并且位于其下的Erlang bin目录--libdir都具有--exec-prefix前缀。当--exec-prefix默认--prefix--prefix--exec-prefix--bindir,并且--libdir是可以传递给所有的参数configure。可以通过在安装阶段传递BINDIR_SYMLINKS=relative|absolute参数来强制相对或绝对链接make。请注意,如果请求不能得到满足,这样的请求可能会导致失败。

运行中

使用HiPE

HiPE支持以下系统配置:

  • x86:所有32位和64位模式处理器都应该可以工作。

- Linux: Fedora Core is supported. Both 32-bit and 64-bit modes are supported. NPTL glibc is strongly preferred, or a LinuxThreads glibc configured for "floating stacks". Old non-floating stacks glibcs have a fundamental problem that makes HiPE support and threads support mutually exclusive.

- Solaris: Solaris 10 (32-bit and 64-bit) and 9 (32-bit) are supported. The build requires a version of the GNU C compiler (gcc) that has been configured to use the GNU assembler (gas). Sun's x86 assembler is emphatically **not** supported.

- FreeBSD:32位和64位模式下的FreeBSD 6.1和6.2应该可以工作。

- OS X / Darwin:32位模式下的Darwin 9.8.0应该可以工作。

  • PowerPC:所有的32位6xx / 7xx(G3)/ 74xx(G4)处理器都应该工作。970(G5)和POWER5处理器上的32位模式应该可以工作。

- 支持Linux(Yellow Dog)和OS X 10.4。

  • SPARC:所有运行32位用户代码的UltraSPARC处理器都应该可以工作。

- 支持Solaris 9。构建需要一个已经配置为使用Sun的汇编器和链接器的gcc。使用GNU汇编程序但Sun的连接器已知会导致问题。

- 支持Linux(Aurora)。

  • ARM:ARMv5TE(即XScale)处理器应该可以工作。支持big-endian和little-endian模式。

- Linux支持。

HiPE在以下系统上自动启用:

  • x86 in 32-bit mode: Linux, Solaris, FreeBSD

在其他支持的系统上,请参阅Advanced Configure如何启用HiPE。

如果您在支持HiPE的平台上运行,并且如果您尚未禁用HiPE,则可以将模块编译为Erlang外壳中的本地代码:

1> c(Module, native).

要么

1> c(Module, [native|OtherOptions]).

使用erlc程序,像这样写

$ erlc +native Module.erl

本机代码将被放入光束文件,并在光束文件加载时自动加载。

要添加hipe选项,请从Erlang shell中这样写:

1> c(Module, [native,{hipe,HipeOptions}|MoreOptions]).

使用hipe:help_options/0打印出可用的选项。

1> hipe:help_options().