wsl2安装

wsl2安装

官网链接-适用于 Linux 的 Windows 子系统文档

比较 WSL 版本:

  • wslwindows 自有的Linux子系统,而 wsl2 相较于 wsl1 来说最大的一个区别就是 wsl2 有完整的 Linux 内核,wsl2 不再是文件夹形式存在于 windows 盘中,而是会生成一个 ext4.vhdx 硬盘文件。
  • wsl1不需要内核虚拟化和hyper-vwsl2需要内核虚拟化支持并启用hyper-v
  • wsl2 能直接使用 docker-desktop,支持systemd服务管理器。
  • wsl 在/mnt/路径下自动挂载windows的文件磁盘c d e ...,win与wsl文件互传更方便。
    • WSL2 架构在几个方面优于 WSL1,但跨 OS 文件系统的性能除外。

wsl2 安装先决条件

wsl2支持Win11的教育版、专业版、企业版;windows内核版本支持wsl2(目前是内部版本不能低于 19041)。

  • 打开PowerShell方式:

    • 按下键盘windows徽标WIN + X,打开 终端管理员
    • 在搜索栏搜PowerShell,点击鼠标右键用管理员身份打开
  • 查看windows-OS版本

    • winver
  • 查看系统类型,即CPU指令集架构

    • systeminfo
# 开启linux子系统wsl
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 开启虚拟机平台即hyper-v
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

官方自动更新 wsl1 到 wsl2

网络不好,命令报错没关系,看下面的直接从 GitHub 手动安装最新 wsl 包。

安装wsl
wsl --install
#升级wsl
wsl --update
# 切换默认wsl版本为wsl2(未开启虚拟化会有报错提示)
wsl --set-default-version 2
# 使用wsl2管理指定子系统发行版
wsl --set-version Ubuntu-22.04 2

从微软商店安装 WSL2

打开微软商店,搜索wsl,选择Windows Subsystem for Linux

按官方自动安装升级 wsl2 失败,手动更新 wsl1 到 wsl2

注意:
官网的旧版 WSL 的手动安装步骤中,适用于 x64 计算机的 WSL2 Linux 内核更新包 下载的更新包wsl_update-x64.msi就是个BUG,严重误导了我,还是使用不了命令wsl --version,也启动不了systemd,直接让我破防了好多天。

在网上看了太多文章,都是从微软商店下载的wsl才没问题,因为所以启发我直接从github的WSL最新稳定安装包安装,终于大功告成!

下载 WSL2 Linux 内核最新稳定包 双击安装

# 切换默认wsl版本为wsl2(未开启虚拟化会有报错提示)
wsl --set-default-version 2
# 使用wsl2管理指定子系统发行版
# wsl --set-version Ubuntu-22.04 2

第一次安装wsl的用户需重启电脑

# 看自己安装的版本
wsl --list --verbose
#简写
wsl -l -v

官方自动安装linux发行版ubuntu22.04

# 查看可安装的linux发行版 (操作超时)
wsl --list --online 
# 从github自动安装 (操作超时)
wsl --install -d Ubuntu-22.04

手动安装linux发行版ubuntu22.04

cd d:\wsl\
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2204 -OutFile ubuntu22.04.appx -UseBasicParsing
Rename-Item .\ubuntu22.04.appx ubuntu2204_0.zip
Expand-Archive .\ubuntu2204_0.zip

Rename-Item .\ubuntu2204_0\Ubuntu_2204.1.7.0_x64.appx ubuntu2204.zip
mv .\ubuntu2204_0\ubuntu2204.zip .\
del -r .\ubuntu2204_0
Expand-Archive .\ubuntu2204.zip
cd .\ubuntu2204\
.\ubuntu.exe

手动安装linux发行版ubuntu20.04

cd d:\wsl\
Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile ubuntu20.04.appx -UseBasicParsing
# 可通过将 .appx 文件更改为 zip 文件来安装该文件
Rename-Item .\ubuntu20.04.appx ubuntu-20.04.zip
Expand-Archive .\ubuntu-20.zip -Verbose
cd .\ubuntu-20\
.\ubuntu2004.exe

WSL 中的高级设置配置

  • 详细参数配置,请参照官网说明
  • wsl.conf 和 .wslconfig 之间有什么差别?
    • .wslconfig 用于在 WSL 2 上运行的所有已安装发行版中全局配置设置。文件位置在Windows文件资源管理器并在地址栏中输入%UserProfile%
    • wsl.conf 用于为在 WSL 1 或 WSL 2 上运行的 Linux 发行版针对每个发行版配置设置。
  1. WSL2全局资源配置
  • Windows文件资源管理器并在地址栏中输入%UserProfile%,编辑.wslconfig文件
    [wsl2]
    processors=6
    memory=4GB
    swap=2GB
    localhostForwarding=true
    

WSL2中linux发行版ubuntu22.04设置systemd服务管理器

systemd作为pid=1的系统进程,代替wsl默认的init系统进程

  • 如果需要使用微软官方支持的systmed,在目前来说你需要满足这些前置条件:
  1. 操作系统为windows 11
  2. wsl 版本为 0.67.6 或以上
  3. 查看wsl版本号命令为:wsl --version,如果此命令未正常回显版本号,或版本号低于0.67.6,那么你安装的wsl还不支持systemd
  • nano编辑器
    • 使用说明:按键盘键 CTRL+X -> Y -> ENTER
# step1 
sudo nano /etc/wsl.conf

# step2 写入
[boot]
systemd=true

# step3 关闭系统
wsl.exe --shutdown

# step4 查看分发版本名
wsl -l -v

# step5 启动指定分发版系统
wsl -d Ubuntu

# step6 验证1号进程是init还是systemd
ps -p 1

WSL2 连接 Windows 防火墙问题解决方案

其实就是 WSL2 的锅,但是官方也不管,似乎有什么困难,提供一个 workaround 吧,在 Windows 中加一个防火墙规则就可以了:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

ssh远程登陆(暂不需要)

  • 重装ssh,自带的不行
    • sudo apt-get remove openssh-server
    • sudo apt-get install openssh-server
  • 编辑ssh配置
    • sudo vi /etc/ssh/sshd_config
    • #Port = 22 去掉这行的#,代表启用端口号22
    • #ListenAddress 0.0.0.0 去掉这行的#,代表监听所有地址
    • #PasswordAuthentication yes,去掉这行的#, 将这行的no改成yes,代表支持账号密码形式的登录
  • sudo service ssh restart

WSL-Ubuntu忘记root密码和用户密码

重置root密码

# 进入 WSL 对应分发版的根目录,以及需要修改什么账号的密码
wsl -d Ubuntu-22.04 -u root
# 修改密码
passwd

wsl卸载分发版ubuntu20.04

wsl -l -v
wsl --unregister <DistributionName>

WSL的备份和迁移

解决的问题

  1. 需要把WSL迁移到其他电脑上工作。
  2. 默认情况下WSL安装位置在系统盘,系统盘容量不足。
  3. 像使用虚拟机软件一样备份你正在使用的WSL系统。

步骤

  1. 开始之前你需要先记下需要迁移的WSL系统的用户名

  2. 查看需要迁移的WSL是否在运行

wsl -l -v
#   NAME                   STATE           VERSION
# * Ubuntu-20.04           Stopped         2
#   docker-desktop         Stopped         2
#   docker-desktop-data    Stopped         2
  1. 终止WSL运行

两条命令都可以,任选其一。

wsl --shutdown
# 立即终止所有正在运行的分发和 WSL 2 轻型虚拟机。

wsl -t <DistributionName>
# 终止指定分发。
  1. 导出

将WSL系统导出到指定位置,得到一个tar的归档文件。

#              <分发版名称>      <安装目录>
wsl --export <DistributionName> <FileName> [Options]
# 将指定的 tar 导入为新分发。

example

wsl --export Ubuntu-20.04 D:\Linux\wsl\export-ubuntu-20.04.tar
  1. 注销原系统-WSL分发并删除根文件系统。

根据你的需要自行选择是否注销原来的WSL。

wsl --unregister <DistributionName>
  1. 导入

将导出的WSL系统的tar归档文件导入到指定目录下。

wsl --import <DistributionName> <InstallLocation> <FileName> [Options]

在安装目录看到了一个vhdx文件,导入成功。

  1. 设置登录用户

新还原的WSL系统的默认用户会变成root,必须修改默认用户为之前安装时的用户。

ubuntu-20.04 config --default-user <username>

把ubuntu-20.04 替换为你使用WSL分发版执行文件名称,如ubuntu-20.04.exe等等。 username是原来WSL系统的用户名。


  1. wsl设置默认发行版

要设置与 wsl 命令一起使用的默认 Linux 发行版,请输入

wsl -s <Distro>
# 将 <Distro> 替换为要使用的分发名称。

例如,从 PowerShell/CMD 输入 wsl -s Debian,将默认发行版设置为 Debian。 现在从 PowerShell 运行 wsl npm init 将在 Debian 中运行 npm init 命令。 要在 PowerShell 或 Windows 命令提示符下运行特定的 WSL 发行版而不更改默认发行版,请使用命令 wsl -d ,将 替换为要使用的发行版的名称。

  1. 删除导出的归档文件
del D:\export-ubuntu-20.04.tar

posted @ 2023-10-18 22:05  justblue  阅读(603)  评论(0)    收藏  举报