win机器基于WSL2搭建开发环境

Catalogue
  1. 一、在mac跳到wsl环境
  2. 二、网络配置:局域网可访问WSL端口
    1. 1. 端口转发
    2. 2. 防火墙配置
    3. 3. 设置静态IP
  3. 三、在Windows中动态获取WSL2中的IP地址.
  4. 四、wsl 磁盘迁移
  5. 五、wsl磁盘空间清理
  6. 六、刚安装的wsl如何更改系统文件路径
  7. 七、修改进入wsl的默认用户
  8. 八、wsl安装docker

一、在mac跳到wsl环境

1
2
3
4
5
6
# 调到win环境(需要win开启ssh端口.)
ssh Administrator@192.168.0.115

wsl
# 或
ssh tensor@wslhost

二、网络配置:局域网可访问WSL端口

以实现 在局域网其它电脑访问 wsl的服务.

1. 端口转发

方法:在win上添加 端口转发. 相关命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 查看端口转发规则
netsh interface portproxy show all

# 2. 添加端口转换规则
netsh interface portproxy add v4tov4 listenport=8000 listenaddress=0.0.0.0 connectport=8081 connectaddress=172.24.11.211
# - 说明: 此命令可更新,所以如果ip变更,则更改后可直接执行

# 3. 删除端口转换规则
netsh interface portproxy delete v4tov4 listenport=4000 listenaddress=0.0.0.0


# 4. 看设定的端口有没有被监听,或者使用nc,telnet,curl等命令看对应的wsl端口是否开启
netstat -anp tcp

2. 防火墙配置

1
2
3
4
5
6
7
8
9
10
11
1. 查看 防火墙是否启用
netsh advfirewall show allprofiles state
2. 查看现有的防火墙规则(注意双引号)
netsh advfirewall firewall show rule name=all | findstr "8000"

3. (重点)添加新的防火墙规则,例如允许特定端口:
netsh advfirewall firewall add rule name="Port 8000" dir=in action=allow protocol=TCP localport=8000

4. 删除防火墙规则,例如删除上面创建的规则(以规则名称为key)
netsh advfirewall firewall delete rule name="Port 8000"

3. 设置静态IP

编辑 /etc/wsl.conf ,添加:

1
2
[network]                 
generateResolvConf = false

三、在Windows中动态获取WSL2中的IP地址.

是在window通过wslhost(hostname) 访问wsl的方式. 可自动更新hostname

1
2
3
ipaddr=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}')
sed -i '/wslhost/d' /mnt/c/Windows/System32/drivers/etc/hosts
echo "$ipaddr wslhost" >> /mnt/c/Windows/System32/drivers/etc/hosts

在 /etc/profile 中配置以上信息.

注意win中hosts文件权限问题.

四、wsl 磁盘迁移

WSL2迁移虚拟磁盘文件ext4.vhdx

「备份」

1
2
3
4
5
6
7
8
# 查看当前已经安装的WSL实例
wsl -l -v

# 将现有WSL2实例备份导出
wsl --export Ubuntu-20.04 E:\Ubuntu_bak.tar

# 注销「按需注销,注销了就清理Lee」
wsl --unregister Ubuntu-20.04

「恢复」

从已经备份的其它文件恢复 wsl实例

1
2
3
4
# 从备份的硬盘恢复
wsl --import Ubuntu-20.04 E:\WslUbuntu\ext4.vhdx F:\backup\wsl-ubuntu.tar
# 其中 E:\WslUbuntu\ext4.vhdx 是恢复后的 系统文件路径
# F:\backup\wsl-ubuntu.tar 是备份文件路径

「恢复后的设置」

1
2
# 设置默认用户
ubuntu1804 config --default-user tensor

五、wsl磁盘空间清理

磁盘压缩。 尽量注意使用空间, 压缩有些不太可靠。

背景:用着用着 wsl的磁盘空间满了,打不开… 所以使用特定的方法对磁盘压缩,之后删除无用的文件。

清理WSL2的磁盘占用

1
2
3
4
5
6
7
8
diskpart.exe
# 选择虚拟磁盘
#select vdisk file="C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
# 之前对磁盘进行了迁移,到E盘。 所以使用以下路径
select vdisk file="E:\WslUbuntu\ext4.vhdx"

# 进行压缩
compact vdisk

六、刚安装的wsl如何更改系统文件路径

如果想使用更大的文件磁盘,则需要将wsl系统文件从C盘移动到其它盘,避免C盘占用过大。

首先,win系统默认安装wsl,其系统文件位于:

C:\Users\你的用户名\AppData\Local\Packages\发行版包名\LocalState\ext4.vhdx

因此,只要将这个文件移动过去,重新注册即可。

1
2
3
4
5
6
7
8
9
10
11
12
# 先shutdown
wsl --shutdown
# 1. 移动文件,将 系统安装的 wsl-ubuntu系统导出
wsl --export Ubuntu-20.04 E:\Ubuntu_bak.tar

# 2. 查看并注销 (系统安装的,默认路径在C盘)
wsl --unregister Ubuntu-20.04

# 3. 重新导入
wsl --import Ubuntu-20.04 E:\WslUbuntu\ext4.vhdx E:\Ubuntu_bak.tar


七、修改进入wsl的默认用户

1
2
3
4
# 进入子系统后,编辑文件 /etc/wsl.conf 
# 添加如下:
[user]
default=tensor

八、wsl安装docker

1
2
3
4
5
6
7
8
sudo apt update
sudo apt install docker.io
docker --version

#
sudo usermod -aG docker $USER
# 启动docker
sudo dockerd 2>&1 &