介绍Erlang/OTP两种安装方式及使用又拍云镜像解决国内下载源码超级慢问题。
Erlang/OTP安装方式
| 类型 | 优点 | 缺点 |
|---|---|---|
| 二进制安装包 | 完整release包(包含依赖周边) | 无法修改编译参数(比如在原release上再加hipe参数) |
| 源码构建安装 | 允许自定义各种编译参数 | 需要按需安装依赖,安装过程复杂且构建时间长 |
- 二进制包安装 Windows系统下载
*.exe,即开即用。 - 源码安装 下载
*.tar.gz,安装各种依赖,配置环境变量,解压后make & make install。
Erlang/OTP下载来源
- Erlang org 最权威下载源,包含所有历史版本的源码(文档)及Windows版的
*.exe。 - Erlang Github Release 提供历史版本的所有的源码(文档)。
- Erlang Solution 提供主流操作系统的多种编译选项组合的二进制安装包,及部分老版本的源码。
- 又拍云镜像 erlang.b0.upaiyun.com (直接点击链接无法访问)是erlang.org下载镜像站,国内下载速度超快。后续会详细介绍:使用它改造
asdf做到下载Erlang只要30秒,彻底解决国内下载Erlang源慢的问题。
二进制安装包
二进制安装包的安装非常简单,直接解压运行exe或./Install按提示配置。关键在于如何选择下载源?
Erlang Solution提供主流系统(Ubuntu、CentOS、Mac OS X、Debian、Windows、Fedra、Raspbian)的各种编译好的二进制版本。主要优势有:
- 提供最新稳定OTP包,操作系统自带源版本更新通常会滞后,比如Ubuntu 12.04 LTS Precise Pangolin 系统自带源最新为
R14B02时,Erlang solution已为它提供R16B02。 - 如果你需要安装
hipe编译的包,也有提供:erlang-base-hipe。 - 灵活提供了多种含有不同Application的源:
erlang,esl-erlang,erlang-base package。
| 类型(package) | 描述 |
|---|---|
| erlang | 包括所有OTP组件及OTP Suite,没有erlang-doc erlang-manpages erlang-mode |
| esl-erlang | 里面包含所有的OTP组件,比erlang package体积大一些 |
| erlang-base | 里面只包含了必要OTP组件,只有大约13M |
除了直接在Erlang Solution网页里下载二进制包,然后再解压使用外,更加推荐使用Erlang Solution源替换系统原有的源,这样就可以使用系统自带的包管理工具管理它,操作系统使用的包管理工具各不相同,Elixir官网提供了一份非常详细的指引。
源码构建安装
当找不到满足需求的二进制包时 ,就必须选择源码安装。
基本流程
- 安装必要依赖工具(解压&编译工具),例如:
unzip make gcc Perl5 m4 ncurses termcap; - 根据需要安装Application依赖,例如:
crypto(OpenSSL) observer(wxWidgets); - 下载
*tar.gz, 设置你需要选项的环境变量; ./configure & make & make install。
上面四步是源码安装必须的过程,所以社区大佬们想尽办法把这些繁杂过程写成脚本,让安装方便一些。其中功能做得全且好用被大家一致认可的有asdf与kerl。
Kerl(Easy building and installing of Erlang/OTP)
kerl是专注于构建安装Erlang/OTP程序的纯shell脚本,没有任何依赖。特点是:
- 可以同时安装多个版本的OTP并随意在不同版本间切换。
- 可定制性强,很多命令和定制选项,带来的坏处就是上手相对于
asdf会复杂一些。
从实际使用效果看,命令确实不好记,有build install两大命令,每次使用前都需要查看文档才能记起来:( 。
ASDF(Extendable version manager)
asdf是支持安装管理多个版本Ruby,Node.js,Elixir,Erlang(支持安装的语言越来越多,可以通过asdf plugin-list-all查看)版本管理系统。特点:上手容易,支持的语言多,命令简单好记。
最初asdf使用的Erlang插件asdf-erlang是自己维护的插件脚本,后来因为kerl功能齐全且好用,没有必要再重新造相同功能的轮子,所以在
2017年12月30号 后依赖于kerl来管理。
同时,如果你以前使用kerl,现在也可以无缝迁移过来,因为它也支持kerl的所有设置(本来依赖的就是kerl)。唯一要做的就是把.kerlrc移到~/.asdf/plugins/erlang/kerl-home/下,目前使用的是此目录下kerl,后续kerl路径应该会改成可配置的。
确定我们只需要使用asdf后,我们重点解决如何设置从又拍云下载源码,解决国内从erlang.org下载速度超级慢的痛点!
- 根据before-asdf-install指引安装所需的依赖,比如:
build-essentialautoconf。 -
根据asdf-setup安装
asdf。$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.4.1 $ echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc $ echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc -
使用
asdf装载asdf-erlang插件。$ asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git -
改造插件:设置从又拍云下载源码。
$ vim ~/.asdf/plugins/erlang/bin/install install_erlang() { ensure_kerl_setup export MAKEFLAGS="-j$ASDF_CONCURRENCY" export ERLANG_DOWNLOAD_URL="http://erlang.b0.upaiyun.com/download" $(kerl_path) build "$ASDF_INSTALL_VERSION" "asdf_$ASDF_INSTALL_VERSION" $(kerl_path) install "asdf_$ASDF_INSTALL_VERSION" "$ASDF_INSTALL_PATH" $(kerl_path) cleanup "$ASDF_INSTALL_VERSION"}目的是在install文件install_erlang中指定kerl的下载URL
export ERLANG_DOWNLOAD_URL="http://erlang.b0.upaiyun.com/download" -
下载构建指定OTP。
$ asdf install erlang 20.0 Downloading OTP-20.0.tar.gz to /Users/zhongwen/.asdf/plugins/erlang/kerl-home/archives % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 120 0 120 0 0 101 0 --:--:-- 0:00:01 --:--:-- 101 100 50.3M 100 50.3M 0 0 1345k 0 0:00:38 0:00:38 --:--:-- 2512k可以看到下载速度都在
1M以上!!!速度飙升,不过下完后还要等待编译过程,大约要5~10分钟。 -
全局设置Erlang版本。
$ asdf global erlang 20.0 -
其它使用命令直接使用命令
asdf就可以查看到。
以上基本满足了本地及测试日常开发所需要,但是如果需要在大量生产机器上都批量安装Erlang,通过以上方法则,每台机器都需要重新编译源码,编译一次需要5~10分钟,耗时不讨好。
如何一次编译,到处安装运行?
最直接的方法:
- 在其中一台机器编译后,写脚本把
~/.asdf/installs/erlang/20.0整个打包复制到目标机器; - 登录目标机器,解包,执行
./Install,按提示配置应该的变量,比如ERL_ROOT
这是一个安装过程,没有编译所以也是非常快的。类似于使用Erlang Solution下载的二进制编译包,只不过这个编译包是我们自己打包的。
但是,kerl把上面的过程浓缩成了一个命令,不需要你自己写脚本。
$ kerl deploy anotherhost /path/to/install/dir
Cloning Erlang/OTP 20.0 (/path/to/install/dir) to anotherhost (/path/to/install/dir) ...
On anotherhost, you can activate this installation running the following command:
. /path/to/install/dir/activate
Later on, you can leave the installation typing:
kerl_deactivate
额外
- 如果你想在Shell中像Elixir一样方便的查找文档,那么可以使用kerl install-docsh。
- 在shell中查看使用的环境变量有那些:
system_information:environment(). - Cross compile means using one type of system to compile the Erlang runtime system for a different type of system。典型的应用就是通过X86的Linux为嵌入式系统构建Erlang/OTP。
参考资源
- 官方Erlang install guide
- BASHO install erlang guide
- Elixir install guide
- Erlang Solution download
- 如何排查TLS/SSL 是否被正确地安装配置
- Kerl readme
- ASDF readme
失败并不可耻,低级的目标才是可耻的。伟大的努力中,即使失败也是光荣的。–李小龙