如何安装特定版本的 Erlang/OTP?

Posted

技术标签:

【中文标题】如何安装特定版本的 Erlang/OTP?【英文标题】:How do I install a specific version of Erlang/OTP? 【发布时间】:2017-11-24 22:20:54 【问题描述】:

我继承了一个带有 puppet/vagrant/Virtual box 设置的项目。流浪者的规定正在打破我围绕 rabbitmq-server 的 erlangs。

错误:

==> default: err: /Stage[main]/Rabbitmq::Install/Package[rabbitmq-server]/ensure: change from purged to present failed: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install rabbitmq-server' returned 100: Reading package lists...
==> default: Building dependency tree...
==> default: Reading state information...
==> default: Some packages could not be installed. This may mean that you have
==> default: requested an impossible situation or if you are using the unstable
==> default: distribution that some required packages have not yet been created
==> default: or been moved out of Incoming.
==> default: The following information may help to resolve the situation:
==> default:
==> default: The following packages have unmet dependencies:
==> default:  rabbitmq-server : Depends: erlang-nox (>= 1:16.b.3) but it is not going to be installed or
==> default:                             esl-erlang but it is not installable
==> default:                    Depends: init-system-helpers (>= 1.13~) but it is not installable
==> default: E: Unable to correct problems, you have held broken packages.

我已完成http://www.scotthelm.com/2013/11/27/rabbit-mq-and-erlang-and-ubuntu-oh-my.html 列出的步骤。我安装了 erlang 和 erlagn-nox,但是当我运行 erl 时,我的版本显示为 R14B04,而我想要 rabbitmq 可以很好地使用的 r16。如何安装特定版本的 erlang?

目前我已经尝试过sudo apt-get install erlang=1:16.b.3-dfsg-1ubuntu2,但找不到。尝试了几种变化,但没有运气。我的另一个想法是下载 tar 本身并构建它,但这似乎太过分了,而且我似乎遗漏了更明显的东西。

【问题讨论】:

你试过official guide吗? 你用的是什么ubuntu版本? 感谢您的帮助。我摧毁了这台机器,然后只用sudo apt-get install erlang 又做了一次,它成功了。然而,在这样做之前,官方指南@AlexBuyny 建议,我安装了指南建议的 erlang-esl,它也能正常工作。不知道为什么没有命令会在该特定机器上正确更新 erlang。 【参考方案1】:

您可以使用 Erlang-Solutions 存储库:

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install esl-erlang=1:19.3.6

【讨论】:

为什么我在执行此操作后会得到这个 sudo apt-get install esl-erlang=1:19.3.6 "E: 没有找到 'esl-erlang' 的版本 '1:19.3.6' " 对于遇到与上述相同问题的任何人“... esl-erlang was not found”。请使用以下命令检查可用的软件包 apt-cache policy esl-erlang。现在只有 1:19.3.6.8 或 1:19.3.6.12-1 是你应该使用的。 TL;DR: sudo apt-get install esl-erlang=1:19.3.6.8【参考方案2】:

你可以使用kerl在同一台机器上安装不同的Erlang/OTP。

【讨论】:

【参考方案3】:

1.删除以前的 Erlang 版本/包:

$ sudo apt-get purge erlang esl-erlang erlang-base erlang-crypto erlang-eldap erlang-inets erlang-mnesia erlang-os-mon
$ sudo apt-get 自动删除
$ sudo apt-get install -f

$ sudo rm -rf /usr/lib/erlang
$ cd /usr/local/bin
$ sudo rm -f erl
$ sudo rm -f erlc
$ sudo rm -f epmd
$ sudo rm -f run_erl
$ sudo rm -f to_erl
$ sudo rm -f 透析器
$ sudo rm -f 打字机
$ sudo rm -f escript
$ sudo rm -f ct_run

2。手动添加存储库条目:

要获取 Ubuntu 代号,请输入 $ lsb_release -c。就我而言,它是 xenial

$ sudo nano /etc/apt/sources.list 并在文件末尾添加以下文本:

# Erlang Solutions
deb https://packages.erlang-solutions.com/ubuntu xenial contrib
创建文件/etc/apt/preferences.d/erlang
$ sudo touch /etc/apt/preferences.d/erlang
$ sudo nano /etc/apt/preferences.d/erlang

内容如下:

Package: erlang* esl-erlang
Pin: version 1:21.3*
Pin-Priority: 501

其中 21.3 是 Erlang/OTP 的版本。

3.安装 Erlang:

$ sudo apt-get 更新
$ sudo apt-get install esl-erlang
$ sudo ln -s /usr/lib/erlang/bin/erl /usr/local/bin/erl

4.检查安装的 Erlang 版本:

$ erl -eval 'ok, Version = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell

相关链接:https://www.erlang-solutions.com/resources/download.html

【讨论】:

【参考方案4】:

先从http://erlang.org/download下载需要的版本

wget http://www.erlang.org/download/otp_src_R16B01.tar.gz
tar -xvzf otp_src_R16B01.tar.gz
sudo chmod -R 777 otp_src_R16B01
cd otp_src_R16B01
sudo ./configure
sudo make
sudo make install

一切顺利

【讨论】:

我在 ./configure 命令中出现以下错误... erts 失败 sudo apt-get install libncurses5-dev libncursesw5-dev github.com/kerl/kerl/issues/17#issuecomment-353278420【参考方案5】:

您也可以查看名为 EVM 的解决方案

这里是详细信息:https://github.com/robisonsantos/evm

【讨论】:

【参考方案6】:

安装二郎

cd /tmp/

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb

sudo dpkg -i erlang-solutions_1.0_all.deb

sudo apt-get update -y

sudo apt-get install erlang -y


Install RabbitMQ from source

cd /tmp/

echo 'echo "deb http://www.rabbitmq.com/debian/ testing main" >> 
/etc/apt/sources.list' | sudo -s

wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc

sudo apt-key add rabbitmq-signing-key-public.asc

sudo apt-get update -y

sudo apt-get install rabbitmq-server -y

【讨论】:

以上是关于如何安装特定版本的 Erlang/OTP?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 shell 中获取 Erlang 的发布版本号?

Erlang/OTP 升级丢失现有的 RabbitMQ 消息

RabbitMQ安装

您如何设计基于 Erlang/OTP 的分布式容错多核系统的架构?

Windows下安装RabbitMQ

CentOS 7 安装 RabbitMQ 就是这么简单