通过 vfox 安装管理多版本 Erlang 和 Elixir

https://upload-images.jianshu.io/upload_images/14206039-0a271179a8758c1e.png

vfox (version-fox) 是最近比较热门的一个通用版本管理工具,使用 Go 语言进行编写,插件机制使用了 Lua 去实现扩展性. 目前 vfox 已经支持管理大多数主流编程语言的版本,生态还算强大。在这里你可以看到目前 vfox 所支持管理的编程语言版本和工具 -> vfox-Available Plugins

Elixir 和 Erlang 社区一直以来都比较流行通过 asdf 去安装和管理多版本环境。asdf 也是一个通用的版本管理工具,生态非常的丰富。

vfox 的版本管理上和 asdf 很像,均通过 .tool-versions 文件去管理项目级和全局的版本信息。这意味着如果你之前使用了 asdf,那么切换到 vfox,不会很困难。因为 vfox 和 asdf 的核心实现有有点不一样,vfox 的执行速度比 asdf 快了将近 5 倍~,官方文档也给出了基准测试结果:version-fox Comparison with asdf-vm

https://upload-images.jianshu.io/upload_images/14206039-d44fb34fa1daf030.png

如果你之前使用 asdf 去管理维护多个 ErlangElixir 的版本,那么 vfox 也是一个不错的选择,值的一试。

本篇文章将会介绍如果通过 vfox 去安装和管理多个 Erlang 和 Elixir 的版本。

安装 vfox

vfox (version-fox) 的跨操作系统支持上很友好,这意味可以 Windows 和 Unix-like 系统上使用它。本篇文章的核心是通过 vfox 去安装和管理多个 Erlang 和 Elixir 语言的版本。因为目前 vfox 的两个管理 Erlang 和 Elixir 版本的插件实现上还没有去支持在 Windows 操作系统下的管理,所以本篇文章的示例环境主要是 Ubuntu 20.04 Linux 环境。让我们开始吧~

先安装下 vfox (version fox):

echo "deb [trusted=yes] https://apt.fury.io/versionfox/ /" | sudo tee /etc/apt/sources.list.d/versionfox.list
sudo apt-get update
sudo apt-get install vfox

为了能让 vfox 找到已经安装的 Elixir 和 Erlang 版本,需要将 vfox 默认挂载到 shell 中。接下来修改下 shell 的配置 (以 Bash 为例):

echo 'eval "$(vfox activate bash)"' >> ~/.bashrc

你也可以参考这个官方文档安装 vfox -> https://vfox.lhan.me/guides/quick-start.html。安装好 vfox 之后,我们再安装下插件:

# 添加 vfox-erlang 插件
vfox add erlang
# 添加 vfox-elixir 插件
vfox add elixir

接下来我们就可以通过上面安装好的两个 vfox 插件 vfox-erlangvfox-elixir 去安装管理多个 Erlang 和 Elixir 的版本了。

通过 vfox-erlang 插件安装 Erlang/OTP

因为 Elixir 依赖于 Erlang,所以在安装 Elixir 之前,我们需要先安装下 Erlang。Erlang 的安装是通过对应版本的源码进行安装的,所以我们需要有对应的编译工具链,这里以 Ubuntu 20.04 为例:

sudo apt-get -y install build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk

接下来可以安装 Erlang 了。

# 通过 vfox search 找到你想要安装的版本
❯ vfox search erlang
Please select a version of erlang [type to search]: 
->  v25.0.4
   v24.3.4.16
   v24.1.3
   v24.0
   v24.3
   v24.3.2
   v25.2
   v27.0-rc2
   v24.3.4.1
Press ↑/↓ to select and press ←/→ to page, and press Enter to confirm

# 当然你也可以指定安装一个版本,比如
vfox install erlang@26.2.2

理论上,你可以安装任何一个出现在 https://github.com/erlang/otp/releases 的版本。因为是从源码编译安装的, 所以安装过程会花费点时间。当你看到如下信息,就表明安装完成了。

compile info.......
...
Install erlang@26.2.2 success! 
Please use vfox use erlang@26.2.2 to use it.

我们使用 vfox 切换下到刚才安装好的 Erlang/OTP 版本来验证下安装是否成功:

❯ vfox use erlang@26.2.2
Now using erlang@26.2.2.
❯ erl
Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns]

Eshell V14.2.2 (press Ctrl+G to abort, type help(). for help)
1> 

如果能正确唤醒 REPL,那么安装就好啦~。接下来开始安装 Elixir 吧~

安装 Elixir

因为安装 Elixir 也是从对应版本的源码进行编译安装的,Elixir 的编译需要依赖到 Erlang,我们先让当前使用的 shell 能找到刚才安装好的 Erlang。

# 切换 Erlang 版本
❯ vfox use erlang@26.2.2
Now using erlang@26.2.2.
# 安装 Elixir,将会使用对应的 erlc 编译器
> vfox install elixir@1.15.2
.........
.........
Generated ex_unit app
==> logger (compile)
Generated logger app
Generated eex app
==> iex (compile)
Generated iex app
Install elixir@1.15.2 success! 
Please use vfox use elixir@1.15.2 to use it.

当你看到 Install elixir@1.15.2 success!,也就意味着安装成功了。可以通过 iex 确认下安装彻底成功:

❯ vfox use elixir@1.15.2
Now using elixir@1.15.2.
❯ iex
Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit:ns]

Interactive Elixir (1.15.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 

如果你想要安装其他版本的 Elixir,请确保当前使用的 Erlang/OTP 版本和 Elixir 版本是兼容的,可以查看这个文档去确认兼容性: 《compatibility-and-deprecations.html#between-elixir-and-erlang-otp》

设置全局使用版本

我们可以使用 vfox use -g xxx 设置默认使用的 Erlang 和 Elixir 版本。

> vfox use -g erlang@26.2.2
> vfox use -g elixir@1.15.2

# 可以查看 .tool-versions 确认设置是否完成
> cat ~/.version-fox/.tool-versions 
erlang 26.2.2
elixir 1.15.2

最后

vfox 的两个安装管理 Erlang/OTP 和 Elixir 版本的插件同时也支持在 MacOS Darwin 下管理多个版本。你可以查看这个文档去了解更多信息: https://github.com/version-fox/vfox-elixir?tab=readme-ov-file#install-in-darwin-macos-13.

Happy & funny!

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容