写在前面
- 主要是记录一下如何安装和搭建基于WSL2的开发环境;
- 参考博文:搭建优雅的Windows终端 Windows terminal+scoop+starship;
一、安装WSL2
- 以管理员身份运行CMD,执行以下命令即可WSL和Linux的默认Ubuntu发行版:
wsl --install
- 等待安装完成后,重启计算机即可,输入以下命令可以查看安装的WSL版本信息;
- 一些常用的安装相关命令参考:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands;
二、初始化WSL2上的Ubuntu
- 打开开始菜单,点击Ubuntu,即可调出Ubuntu系统的终端(就像一个远程服务器一样!):
-
设置用户名和密码如下:
-
设置完成后,在CMD中执行以下命令可以查看已经安装的Lunix发行版本:
- 注意重启电脑后,需要打开一次Ubuntu终端以启动Ubuntu;
三、安装跨平台的终端
- 这个主要是因为CMD只能执行Windows的命令,而WSL对应的Linux发行版的命令需要用别的终端执行,就会显得比较混乱,因此可以下载Windows终端软件,对这些不同的终端作统一的管理(界面也好看一点);
- Windows终端的下载地址:https://apps.microsoft.com/store/detail/windows-terminal-preview/9N8G5RFZ9XK3?hl=zh-cn&gl=cn;
- 安装后,可以在Windows终端中切换不同的控制台终端,比如CMD、PowerShell和Ubuntu等:
- 另外,将PowerShell升级到Powershell7以上,因为Windows自带的版本比较低:
四、安装远程服务器的必要工具
- 从这一步开始,配置的过程就和用虚拟机或者真正的远程服务器类似了;
- 一些对应关系如下:
- 远程服务器:WSL下的Ubuntu;
- 远程路由器:Windows;
- 本地开发/客户端:Windows;
1. 替换源
- 执行以下命令打开源配置文件:
sudo vim /etc/apt/sources.list
- 在里面增加源连接如下:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
2. 安装必要工具
- 执行以下命令安装必要工具:
sudo apt update && sudo apt upgrade -y
sudo apt install curl wget git ca-certificates build-essential net-tools -y
sudo apt install g++ gdb make ninja-build rsync zip -y
五、配置远程服务器的SSH
1. 在服务器上安装SSH服务
- 在Ubuntu上执行以下命令以重新安装SSH服务:
# 卸载原有的ssh
sudo apt remove openssh-server
# 重新安装ssh
sudo apt install openssh-server -y
# 启动ssh服务
sudo service ssh start
# 查看ssh服务状态
sudo service ssh status
# 设置ssh开机自启动
sudo systemctl enable ssh
-
查看服务器上的ip地址:
-
然后就可以在本地通过以下命令连接服务器了:
- 注意重启服务器之后还需要重启SSH服务,这样本地才能通过SSH远程连接;
2. 固定服务器的ip地址
-
这里用到的是端口转发技术:
- 端口转发:将路由器的某个端口和内网的某个ip对应起来,外部的消息就可以由该端口转发给内网的ip,只能单向转发;
- 端口映射:将路由器的某个端口和内网的某个ip映射起来,外部的消息可以由该端口发给内网的ip,内网的ip也可以经该端口向外界发送消息,是双向映射;
-
服务器中打开ssh配置文件:
sudo vim /etc/ssh/sshd_config
- 设置端口转发,转发的端口是2000:
-
这里相当于是将本地电脑(充当服务器)的端口2000和WSL(充当服务器)的ssh对应起来,访问服务器的端口号2000就能转发到WSL的ssh服务;
-
执行以下命令使服务器上的修改生效:
# 打开防火墙的2000端口
sudo ufw allow 2000
# 重启ssh服务
sudo service ssh restart
# 重启防火墙
sudo ufw reload
- 以管理员身份在PowerShell配置端口转换:
netsh interface portproxy add v4tov4 listenport=2100 listenaddress=0.0.0.0 connectport=2000 connectaddress=localhost
- 这里相当于是将本地电脑(充当路由器)的端口2100监听到的消息转发到本地电脑(充当服务器)的端口2000上;
- 用以下命令打开本地电脑的2100端口的监听:
netstat -ano | findstr :2100
- 如果执行上述命令没有返回结果,则还需要在服务中启动IP Helper服务:
- 最后,就可以通过访问本地电脑(路由器)的2100端口访问服务器的ssh服务:
六、使用VS Code管理远程文件系统
1. 安装插件
- 在VS Code的扩展中搜索安装remote development插件:
- 如果安装失败,记得检查VS Code是否已升级到最新版本;
2. 新增SSH配置
- 安装后,会在左边栏出现远程资源管理器;
- 打开远程资源管理器,选择远程,点击下方的SSH栏右方的“+”按钮;
- 在弹出的命令行中输入SSH连接命令;
- 选择要更新的配置文件,这里选第一个;
- 这样就在配置文件中新增了一个SSH远程主机连接配置;
3. 连接远程主机
- 点击左下角的绿色按钮,打开远程窗口:
- 在弹出的选项中选择Connect to Host;
- 选择刚刚新建的远程主机地址:
- 当然这里也可以直接输入
user@host
格式的远程主机地址; - 在弹出窗口的上方命令行中输入密码,即可连接远程主机的文件系统:
-
选择Open Folder,在上方命令行中选择要打开的文件夹(通常选择根目录):
-
然后,就可以在左方看到该文件夹下的所有文件,而且可以很方便地查看和编辑文件中的内容:
七、使用VS进行远程开发
- 注意,使用WSL2作为远程主机要求VS版本在2022v17.0以上,使用WSL1作为远程主机要求VS版本在2019v16.1以上,参看官方文档:https://learn.microsoft.com/zh-cn/cpp/build/walkthrough-build-debug-wsl2?view=msvc-170;
1. 安装所需的开发包
- 控制面板->程序->程序和功能->卸载或更改程序中,找到安装的VS软件,右键更改调出VS安装器;
- 勾选以下安装包安装即可;
2. 创建新项目
- 安装完成后,创建一个Linux的C++项目:
3. 配置远程连接
- 打开工具->选项,配置远程连接:
- 打开项目->xxx属性->常规->平台工具集,选择WSL2 GCC Toolset;
4. 编写代码和运行程序
- 新建一个
.cpp
文件,然后点击GDB调试程序,即可将源代码迁移至服务器并在服务器上编译该程序,最后在控制台中执行;
- 然后在服务器的
/projects
路径下,能够找到创建的TinyWebserver项目,里面有源代码、可重定位目标文件.o
以及可执行目标文件.out
;