代码之家  ›  专栏  ›  技术社区  ›  Flame_Phoenix

“下载内核”后,在Ubuntu上通过asdf安装erlang失败

  •  0
  • Flame_Phoenix  · 技术社区  · 4 年前

    背景

    我有一个Ubuntu,我正试图通过 asdf-erlang plugin .

    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 20.04.1 LTS
    Release:    20.04
    Codename:   focal
    

    问题

    事实上,我想安装任何版本的Erlang,但都不起作用。

    $ asdf install erlang 22.2.8
    Downloading kerl...
    $
    

    它在“下载内核”后停止,然后什么也没发生。它就像完成了。 我已经按照步骤做了 before-asdf-install 同样在安装插件之前,但这并不能防止错误。

    我该怎么解决这个问题?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Flame_Phoenix    4 年前

    经过我和Elixir社区的几个人的大量调查,我们终于发现了问题所在。

    问题

    第一个线索是命令本身的退出信号:

    $ asdf install erlang 22.2.8
    Downloading kerl...
    $ echo $?
    1
    

    退出代码为1。这意味着发生了错误。

    因此,在深入研究代码后,我们发现有一个curl调用我无法执行:

    $ curl -v -Lso ~/.asdf/plugins/erlang/kerl https://raw.githubusercontent.com/kerl/kerl/2.0.2/kerl
    *   Trying 151.101.16.133:443...
    * TCP_NODELAY set
    * Connected to raw.githubusercontent.com (151.101.16.133) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    *   CAfile: /etc/ssl/certs/ca-certificates.crt
      CApath: /etc/ssl/certs
    } [5 bytes data]
    * TLSv1.3 (OUT), TLS handshake, Client hello (1):
    } [512 bytes data]
    * TLSv1.3 (IN), TLS handshake, Server hello (2):
    { [122 bytes data]
    * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
    { [6 bytes data]
    * TLSv1.3 (IN), TLS handshake, Certificate (11):
    { [3400 bytes data]
    * TLSv1.3 (OUT), TLS alert, unknown CA (560):
    } [2 bytes data]
    * SSL certificate problem: self signed certificate in certificate chain
    * Closing connection 0
    

    我遇到了SSL证书问题。这是由于VPN/Proxy公司造成的。

    可以使用以下方法找到快速修复/解决方法 -k 选项允许curl连接到不安全的连接。在尝试了卷发之后 k 请求成功,证明了理论的正确性。

    解决方案

    随着问题的确定,是时候寻找解决方案了。我认为最合适的解决方案是将公司证书添加到ssl certs.pem中。以下SO帖子对此进行了更好的描述:

    How to fix "SSL certificate problem: self signed certificate in certificate chain" error?

    快速解决方法

    然而,这个解决方案对我不起作用。所以我最终决定选择一个有风险的选择,那就是使用 ~/.curlrc .

    https://ec.haxx.se/cmdline/cmdline-configfile#default-config-file

    设置此文件并添加 k 选择它,它奏效了。我现在终于可以安装我需要的erlang版本了。

    应当注意, 这是一种风险 事实上, 这是一种变通方法,而不是真正的解决方案 .

    然而,就目前而言,我很乐意接受它。

    历史

    这是我与Elixir社区进行的整个讨论的总结。如果你对整个过程感兴趣,你可以查看帖子:

    https://elixirforum.com/t/installing-erlang-via-asdf-on-ubuntu-fails-after-downloading-kerl/36806/25

    推荐文章