[ RoR ] 解決在WSL環境時,安裝RVM出現 SSL_ERROR_SYSCALL

Windows Subsystem for Linux,簡稱WSL,是一套由微軟開發的Linux相容的核心介面(不包含Linux核心程式碼),並可在該下桶下使用 Bash shell、命令語言與 GNU/Linux 命令列工具,然而WSL無法完全取代 Linux環境,一般還是建議使用 VM 作為主機使用。 在 Ruby on Rails 的課程中,我們使用 WLS 作為 Ruby 的練習環境,然而在安裝RVM的過程中,出現了 SSL_ERROR_SYSCALL 錯誤,以下為完整錯誤碼:

curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to get.rvm.io:443

這個問題發生在安裝 RVM 時,在 WSL 環境下達  \curl -sSL https://get.rvm.io | bash -s stable 指令後出現的。看到這一段我的判定方法是抓關鍵字,在錯誤訊息中有幾個跟網路比較有關係的詞彙,像是 SSL、443這兩個詞彙,看到這兩個字基本上已經可以先抓網路連線可能問題,這時我們可以先來做一下小測試;

Step 1. 我們在 主系統端開啟網路瀏覽器,在網址列輸入 https://get.rvm.io ,如果可以看到類似下列畫面,代表連線應該是正常的。

#!/usr/bin/env bash

shopt -s extglob
set -o errtrace
set -o errexit

rvm_install_initialize()
{
  DEFAULT_SOURCES=(github.com/rvm/rvm bitbucket.org/mpapis/rvm)

  BASH_MIN_VERSION="3.2.25"
  if
    [[ -n "${BASH_VERSION:-}" &&
      "$(\printf "%b" "${BASH_VERSION:-}\n${BASH_MIN_VERSION}\n" | LC_ALL=C \sort -t"." -k1,1n -k2,2n -k3,3n | \head -n1)" != "${BASH_MIN_VERSION}"
    ]]
  then
    echo "BASH ${BASH_MIN_VERSION} required (you have $BASH_VERSION)"
    exit 1
  fi

  export HOME PS4
  export rvm_trace_flag rvm_debug_flag rvm_user_install_flag rvm_ignore_rvmrc rvm_prefix rvm_path

  PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()}  \${LINENO} > "
}

...略

這樣我們確定了 RVM 主機是沒有問題的,接下來我們往下思考哪裡可能造成SSL錯誤,那暉哥家裡其實沒有特別裝什麼防火牆之類的,可能造成這個問題的大概有只剩下防毒軟體了。

暉哥安裝的是 卡巴斯基免費版 的防毒軟體,索性直接把整個防毒軟體移除,節省逐一抓 BUG 的時間,在移除完軟體後我們將電腦重新開機,再開啟 WSL 執行安裝,這一次就順利安裝成功了!

網路上對於此問題的描述(像是 stackoverflow…之類的網站),多半卡在 IPv4 / IPv6 協定導致認證錯誤,但這個方法暉哥在測試後還是失敗了。另一種解法是直接把 https://get.rvm.io 的內容另存下來,使用 bash 執行安裝,但這個方法我沒有試過,有興趣的朋友可以 點擊這裡 參考說明。

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

Close Menu
%d 位部落客按了讚: