WSL2从零开始搭建网站开发环境系列01:安装wsl2

自动安装:https://docs.microsoft.com/zh-cn/windows/wsl/install
手工安装:https://docs.microsoft.com/zh-cn/windows/wsl/install-manual (我使用这个)

安装ubuntu

先看下有哪些分发,

Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。

安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows

PS C:\Users\MOREFINE> wsl --list --online
以下是可安装的有效分发的列表。
使用 'wsl.exe --install <Distro>' 安装。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS  # 我准备安装这个
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

从上面选择一个适合自己的Linux系统
前提:确保github可以正常访问

PS C:\Users\MOREFINE>wsl --install -d Ubuntu-20.04
# 系统用户名:xishui
# 密码:yizhong

记得在启用或关闭windows功能中,开启Hyper-V

WSL2上网配置(静态ip,配置dns)

配置WSL2

  • 微软官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config
  • 全局配置:https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#wslconfig
  • 发行版配置:https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config#wslconf

下面我只设置了发行版(Ubuntu 20.04)配置,wsl2启动时,会读取配置文件/etc/wsl.conf,默认没有,可以 sudo vi /etc/wsl.conf 新建,内容如下:

[network]
# 设置虚拟主机的名称,默认的不好看
hostname = verygood
# 取消自动生成resolv.conf文件,这个是关键点
generateResolvConf = false

[user]
# 启动的默认用户,设为root吧,不然以后命令都要加sudo有点麻烦
default = root
[boot]
systemd=true

退出ubuntu回到dos环境下,wsl --shutdown 关闭wsl后再重新进入 ,变成

root@verygood:~#

设置静态ip

由于每次wls重新启动,ip地址都会改变,下面将计划将windows和ubuntu中的ip固定

  • windows:172.21.0.1
  • ubuntu: 172.21.0.2

思路:

  • ubuntu中读取ip, ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1
    – 删除上面读取的ip,ip addr del xxx
    – 添加新的ip:172.21.0.2
  • windows中删除现有ip,添加新的ip

新建批处理文件

新建批处理文件(文件名任意) wsl2_2023-10-23.bat,格式为ansi,内容如下

@echo on
REM 第一步:先关闭虚拟子系统
wsl --shutdown

REM 第二步:ubuntu删除ip,Ubuntu-20.04是我安装的分发,wsl --list查看自己的
wsl -d Ubuntu-20.04 -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0

REM 第三步:Ubuntu中添加指定的ip,为WSL网卡添加一个IP 172.21.0.2 进行通讯, Win 侧可以通过 172.21.0.2 访问 Linux 侧
wsl -d Ubuntu-20.04 -u root ip addr add 172.21.0.2/24 broadcast 172.21.0.255 dev eth0
wsl -d Ubuntu-20.04 -u root ip route add 0.0.0.0/0 via 172.21.0.1 dev eth0

REM 第四步:windows删除原来的ip,添加新的ip,首先找到 vEthernet (WSL) 这个网络适配器,然后将其所有已有的 IP 地址删除,然后为其添加 172.21.0.1/24 的 IP 地址。
powershell -c "Get-NetAdapter -includehidden  'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 172.21.0.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 172.21.0.0/24;"

REM 第五步:启动对应Linux系统,我这里是使用windows terminal
wt -p Ubuntu-20.04

然后以管理员身份运行该批处理文件。

开机自启动

开机自启动未设置成功,待完善

  1. wsl2_2023-10-23.bat 文件放在任意位置,在桌面生成快捷方式
  2. 快捷方式以管理员身份运行,手工双击快捷方式就可以

【没效果】批处理或快捷方式放在 shell:startup 和 shell:common startup命令打开的目录下,显示开机已运行,但实际没效果,改用任务计划程序也不行

配置DNS

先删除 /etc/resolv.conf

# 修改属性可写
root@verygood:/mnt/c/Users/Admin# sudo chattr -i /etc/resolv.conf 
root@verygood:/mnt/c/Users/Admin# rm -f /etc/resolv.conf

修改 /etc/resolv.conf

root@verygood:/mnt/c/Users/Admin# echo "nameserver 172.21.0.1" > /etc/resolv.conf
root@verygood:/mnt/c/Users/Admin# echo "nameserver 114.114.114.114" >> /etc/resolv.conf
修改属性只读

root@verygood:/mnt/c/Users/Admin# sudo chattr -f +i /etc/resolv.conf

目录映射(软链接)

根据自己实际情况将window中指定目录映射到ubuntu中

sudo ln -s /mnt/e/各大网盘同步盘/阿里云盘/19936926974/网站开发/www-1-clients /www1
sudo ln -s /mnt/e/各大网盘同步盘/阿里云盘/19936926974/网站开发/www-2-in_progress /www2
sudo ln -s /mnt/e/各大网盘同步盘/阿里云盘/19936926974/网站开发/www-3-study /www3

填坑

在这里插入图片描述
原因:与Raidrive冲突,我使用 RaidriveAlist 挂载网盘到本地,会报错:\wsl.localhost无法打开,会弹出“没有使用网络资源的权限,请与管理员联系"
解决:暂时没有好的解决办法,改为在资源管理器地址栏里输入: \\wsl$ 进入ubuntu