由于网络问题无法在 WSL 上安装 nvm
Unable to install nvm on WSL due to network issues
我正在尝试在 WSL2 上使用 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
安装 nvm
,但出现了不同的错误。最初,curl
命令会 return 以下内容:
> $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com
在 Windows 中的 运行 netsh int ip reset
之后,在 another question 中建议,相同的命令开始计时:
> $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:04:59 --:--:-- 0
curl: (28) Connection timed out after 300000 milliseconds
我也试过手动将 install.sh
保存到我的机器上,然后 运行 在本地保存(在使用 chmod +x install.sh
设置其权限后),但是 return 是一个类似错误:
> $ ./install.sh
=> Downloading nvm from git to '/home/mparra/.nvm'
=> Cloning into '/home/mparra/.nvm'...
fatal: unable to access 'https://github.com/nvm-sh/nvm.git/': Failed to connect to github.com port 443: Connection timed out
Failed to clone nvm repo. Please report this!
我可以成功 ping github.com。 ping -c 100 github.com
return 如下:
--- github.com ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 99156ms
rtt min/avg/max/mdev = 15.280/20.739/85.205/9.141 ms
This issue 建议 Windows 更新解决了这个问题,但这对我来说不是一个选择,因为它是一台工作机器,我无法更新到 build 18363.2039 之后。我还检查了我的 VPN 是否未启用,并将我的 DNS 设置为 8.8.8.8
和 8.8.4.4
,但没有任何效果。
我觉得你可能是对的,这与 Github 中提到的问题相同,已在 Windows 更新中得到解决。
如果情况确实如此,即使在安装 nvm
之后,您也可能会继续 运行 解决问题。例如,nvm
可能会在下载 Node 版本时遇到问题。
我可以提出的最简单的解决方案(如果适合您的话)就是简单地转换为 WSL1 而不是 WSL2。 WSL1 将处理大多数(但不是全部)节点 use-cases,就像 WSL2 一样。 WSL1 处理网络的方式与 WSL2 非常不同。如果 Windows 网络堆栈适合您,那么 WSL1 也应该如此。
如 Github 问题所述,这似乎是仅在 Hyper-V 实例中发生的问题。 WSL2 运行s 在 Hyper-V,但 WSL1 没有。
如果你走这条路,你可以:
创建现有 WSL2 发行版的副本并将该副本转换为 WSL1。来自 PowerShell:
wsl --shutdown
wsl -l -v # Confirm <distroname>
wsl --export <distroname> path\to\backup.tar
mkdir .\path\for\new\instance
wsl --import WSL1 .\path\for\new\instance path\to\backup.tar --version 1 # WSL1 can be whatever name you choose
wsl -d WSL1
请注意,默认情况下您将成为 root 用户。要更改默认用户,请遵循 this answer.
或者,只需将 WSL2 实例转换为 WSL1:
wsl --shutdown
wsl -l -v # Confirm <distroname>
wsl --export <distroname> path\to\backup.tar # Just in case
wsl --set-version <distroname> 1
如果 WSL1 不适合您(至少在您的公司推送该更新之前的短期内),那么可能还有另一个选项类似于 in this comment 在 [=46= 上提到的选项] 问题。如果您需要走那条路,请告诉我,我会看看我是否可以简单一点。
我正在尝试在 WSL2 上使用 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
安装 nvm
,但出现了不同的错误。最初,curl
命令会 return 以下内容:
> $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0curl: (6) Could not resolve host: raw.githubusercontent.com
在 Windows 中的 运行 netsh int ip reset
之后,在 another question 中建议,相同的命令开始计时:
> $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:04:59 --:--:-- 0
curl: (28) Connection timed out after 300000 milliseconds
我也试过手动将 install.sh
保存到我的机器上,然后 运行 在本地保存(在使用 chmod +x install.sh
设置其权限后),但是 return 是一个类似错误:
> $ ./install.sh
=> Downloading nvm from git to '/home/mparra/.nvm'
=> Cloning into '/home/mparra/.nvm'...
fatal: unable to access 'https://github.com/nvm-sh/nvm.git/': Failed to connect to github.com port 443: Connection timed out
Failed to clone nvm repo. Please report this!
我可以成功 ping github.com。 ping -c 100 github.com
return 如下:
--- github.com ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 99156ms
rtt min/avg/max/mdev = 15.280/20.739/85.205/9.141 ms
This issue 建议 Windows 更新解决了这个问题,但这对我来说不是一个选择,因为它是一台工作机器,我无法更新到 build 18363.2039 之后。我还检查了我的 VPN 是否未启用,并将我的 DNS 设置为 8.8.8.8
和 8.8.4.4
,但没有任何效果。
我觉得你可能是对的,这与 Github 中提到的问题相同,已在 Windows 更新中得到解决。
如果情况确实如此,即使在安装 nvm
之后,您也可能会继续 运行 解决问题。例如,nvm
可能会在下载 Node 版本时遇到问题。
我可以提出的最简单的解决方案(如果适合您的话)就是简单地转换为 WSL1 而不是 WSL2。 WSL1 将处理大多数(但不是全部)节点 use-cases,就像 WSL2 一样。 WSL1 处理网络的方式与 WSL2 非常不同。如果 Windows 网络堆栈适合您,那么 WSL1 也应该如此。
如 Github 问题所述,这似乎是仅在 Hyper-V 实例中发生的问题。 WSL2 运行s 在 Hyper-V,但 WSL1 没有。
如果你走这条路,你可以:
创建现有 WSL2 发行版的副本并将该副本转换为 WSL1。来自 PowerShell:
wsl --shutdown wsl -l -v # Confirm <distroname> wsl --export <distroname> path\to\backup.tar mkdir .\path\for\new\instance wsl --import WSL1 .\path\for\new\instance path\to\backup.tar --version 1 # WSL1 can be whatever name you choose wsl -d WSL1
请注意,默认情况下您将成为 root 用户。要更改默认用户,请遵循 this answer.
或者,只需将 WSL2 实例转换为 WSL1:
wsl --shutdown wsl -l -v # Confirm <distroname> wsl --export <distroname> path\to\backup.tar # Just in case wsl --set-version <distroname> 1
如果 WSL1 不适合您(至少在您的公司推送该更新之前的短期内),那么可能还有另一个选项类似于 in this comment 在 [=46= 上提到的选项] 问题。如果您需要走那条路,请告诉我,我会看看我是否可以简单一点。