# 编程日记：安装本地编程环境（2022-08-19）

By [Corror](https://paragraph.com/@corror) · 2022-08-25

---

编程学习
----

### 我做了什么？

1.  成功在 Windows 系统中安装 Node.JS 以及其附带的工具 Chocolaty 1.0.0 和 Python 10.6.0；
    
2.  成功在 StackOverflow 上问出了第一个问题；
    
3.  成功安装 WSL；
    
4.  成功安装 VSCode 插件 Remote Development；
    
5.  成功设置 WSL 的代理端口；
    
6.  成功在 Ubuntu 系统中安装 NVM；
    

### 我解决了什么问题？

#### 1\. 利用NodeJS安装额外工具的问题

🔻第一次报错

在我尝试通过NodeJS安装额外工具的时候，进入到了1/3的进度时，发现出现了问题。

问题在于：在使用Chocolately脚本安装Python的时候，出现了安装失败，并且 exit with 1603.

经过查阅[资料](https://stackoverflow.com/a/42319287)后发现，**导致 exit 1603 的原因是：系统已经存在一个安装好过的应用了**。

于是我选择卸载Python，并尝试重新通过NodeJS来安装额外工具。

🔻第二次出错

在卸载完python，打算重新安装的时候，发现 power shell 处于蓝屏的状态，没有任何内容弹出来。

于是我觉得卸载并重装 NodeJS，试试看能否重新加载出工具下载界面。

结果：在等待了一段时间后，成功出现了安装内容。

推测之前不成功的原因：自己等待的时间不够，这次等待了好几分钟才出现了内容。

🔻第三次出错

问题：现在又卡在了安装 visualstudio2019-workload-victools 上，等待了一个多小时后，还是没有安装好。

原因 & 方案：可能是因为，电脑会在20分钟后自动动睡眠，所以可以尝试将电脑自动睡眠这条给关闭。

🔻第四次出错

!\[\[Pasted image 20220819024016.png\]\]

报错一：

> 使用“1”个参数调用“DownloadString”时发生异常:“基础连接已经关闭: 发送时发生错误。”

> Error retrieving packages from source '[https://community.chocolatey.org/api/v2/](https://community.chocolatey.org/api/v2/)': 无法连接到远程服务器

原因：无法访问服务器，需要打开梯子才行。

方案：尝试打开梯子的全局模式，发现能够显示进入报错网址：[https://community.chocolatey.org/api/v2/](https://community.chocolatey.org/api/v2/)

报错二：

> python was not found with the source(s) listed.

原因：关于这一点，[StackOverflow上说](https://stackoverflow.com/a/72614445)也许是自己下载的软件没有添加到环境变量当中。

方案：尝试搜索了我的用户变量，发现里面有 Python 10 的环境变量，只不过位置指向的不是 Chocolatey 安装的 Python，而是使用安装包安装的 Python 时自动添加的环境变量。

!\[\[Pasted image 20220819025152.png\]\]

问题：根据本地的\\Log\\来看，具体的错误信息如下：

    2022-08-19 02:23:23,380 14868 [DEBUG] - Using 'https://community.chocolatey.org/api/v2/'.
    2022-08-19 02:24:05,598 14868 [WARN ] - Error retrieving packages from source 'https://community.chocolatey.org/api/v2/':
     无法连接到远程服务器
    2022-08-19 02:24:05,599 14868 [WARN ] - 
    python was not found with the source(s) listed.
     If you specified a particular version and are receiving this message, it is possible that the package name exists but the version does not.
     Version: ""; Source(s): "https://community.chocolatey.org/api/v2/"
    

#### 2\. 单独升级Chocolatey的问题

> 今日成长：第一次尝试在 StackOverflow 上问问题。

问题：无法更新 Chocolatey

原因：Chocolatey 已经是最新版本，无需操作。

详细信息：[https://stackoverflow.com/q/73408615/14640362](https://stackoverflow.com/q/73408615/14640362)

#### 3\. Node.JS 未添加到环境变量的问题

问题：

> node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写，如果包括路径，请确保路径正确，然后再试一次。

解决方案：

1.  删除原先在 /Software/nodejs 下的系统变量；
    
2.  添加在 `C:\Program Files\nodejs` 下的系统变量；
    

问题解决！

#### 4\. 如何解决 WSL 的翻墙问题？

报错：

    corror@CorrorCollins:~/folder$ 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     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
    

原因：

WSL 与 Windows 使用的不是同一个网络端口，因此当 VPN 代理Windows上的网络端口时，就无法去代理 WSL 上的网络端口，因此访问 Github 会出现翻墙之前才会出现的 DNS 域名污染问题。

解决方案：

根据[参考资料](https://zhuanlan.zhihu.com/p/153124468)可以知道，WSL 的网关和 DNS 服务器，全部指向 Windows，因此可以在 Unbuntu 子系统中，通过运行命令行 `cat /etc/resolv.conf` 来将 Windows 的 IP 读取出来。

我的运行结果如下：

    corror@CorrorCollins:~/folder$ cat /etc/resolv.conf
    # This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
    # [network]
    # generateResolvConf = false
    nameserver 172.29.208.1
    

可以看到，WSL 指向的 Windows IP 地址为 172.29.208.1。

之后，我们需要将该 IP 地址和 Windows 的代理端口绑定。

!\[\[Pasted image 20220819054732.png\]\]

打开 PandaVPN 的本地代理权限后，将 HTTP/HTTPS 代理端口 41091 和 WSL 指向的 Windows IP 172.29.208.1 绑定，命令行如下所示：

    export ALL_PROXY="http://172.29.208.1:7890"
    

之后再执行 curl 命令就能够顺利访问 [githubusercontent.com](http://githubusercontent.com) 了。

---

*Originally published on [Corror](https://paragraph.com/@corror/2022-08-19)*
