美文网首页
一次不正经的Remote_WSL2体验

一次不正经的Remote_WSL2体验

作者: Niflheimr_75a5 | 来源:发表于2019-07-29 04:44 被阅读0次

缘起

 VSCode的Remote Development扩展正式发布也有两个月了。我正尝试将开发环境逐渐迁移到WSL,但在配置Flutter时,却发现WSL的一个先天硬伤:
 ——不能运行32位ELF程序
 怎么办呢,尝试升级到WSL2吧......

配置WSL2的系统环境

参考:MicrosoftDocs/wsl2

系统要求:

  • Windows平台:build版本不低于18917;
  • 启用[虚拟机平台可选组件];
  • Hyper-V支持。

1. 升级到Windows Insider Preview

  • 打开设置——更新和安全——Windoows预览体验计划:

    这是已经设置完成的界面:


  • 选择快速预览通道
  • Windows更新——检查更新,等待安装完成。

    当前快速预览通道最新build版本为18945


2. 开启[虚拟机平台可选组件]

  • 以管理员身份打开powershell并运行:
    C:\> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
    

3. Hyper-V支持

家庭版并没有Hyper-V组件,需要通过外部安装开启;
——以下教程参考此处

  • 在文本编辑器里复制以下代码并以*.cmd后缀保存:
    pushd "%~dp0"
    dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
    for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"del hyper-v.txt
    Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
    
  • 右键脚本——以管理员身份运行

安装WSL2

1. 安装WSL_ArchLinux

 考虑到Ubuntu的系统环境过于冗杂,故选择重新安装ArchLinux(真香);ArchLinux并没有加入Microsoft Store,如果选择其它Linux发行版本,可直接在Microsoft Store搜索wsl
——WSL_ArchLinux的安装教程参考此处


请忽略Surface Go的渣渣配置

2. 升级到WSL2

警告:当前版本如果想配置好Remote_WSL扩展,请先暂时跳过此部分流程。

  • 在powershell中,运行以下命令:
    # 验证WSL发行版版本
    C:\> wsl.exe --list -v
      NAME    STATE           VERSION
     *Arch    Running         1
    
    # 将发行版版本更改为WSL2
    C:\> wsl.exe --set-version <Disto> 2 # Distro指WSL发行版名称
      正在进行转换,这可能需要几分钟时间...
      有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
    
    等待数分钟后即可升级完成。
2.1. ——踩到的坑
  • 在执行转换wsl2的过程中提示:
    Exporting the distribution failed
    bsdtar: Write error
    
    转换失败。
     检查任务管理器,发现在转换过程中会运行bsdtar程序,并在程序目录下进行写入操作。
     如果你的ArchLinux是通过appx包安装在C:\Program Files\WindowsApps目录下,
    bsdtar自然会被Windows Defender疯狂阻止......
     (老实点,每次出问题都有你。)
  • 解决方法:
    • 关掉WD的实时防护
    • 或者,别将ArchLinux安装在Program Files\目录下(Install zip package)。

在VSCode中配置Remote_WSL

1. 添加Remote_Development扩展

  • 在扩展中搜索remote_development并安装:
    @import "./assets/development.jpg"
    会同时安装上Remote_SSHRemote_ContainersRemote_WSL

    远程工作原理:


    architecture
    • 开启remote后,除了UI和主题插件,其它扩展都会安装在远程机中,并且扩展工具的环境配置完全依赖远程机的环境。
    • 扩展工具会被安装在远程机的.vscode-server目录,Remote_WSL会将.vscode-server放在WSL的$HOME目录下。

2. 连接WSL

  • 使用快捷键Ctrl+Shift+P,或点击界面左下角的 remote 按钮,打开命令面板:
    • New Window:使用WSL打开新的窗口;
    • Reopen Folder in WSL:将当前目录在WSL中打开;
    • New Window Using Distro:选择一个已安装的WSL发行版打开新窗口;
      连接成功后,会在左下角看到按钮变成了

3. 为WSL安装扩展

  • 连接WSL后,已安装在本地的开发工具列表会变成不可用,并提供Install on WSL:按钮,点击即可安装到WSL:
    extensions
  • 在搜索到的扩展页中,安装的按钮也会变更为Install on WSL:
3.1. ——踩到的坑
  • 尽管远程连接操作和功能实现与WSL1没区别,但在当前预览版本的WSL2中,存在Remote_WSL向WSL2远程安装扩展不成功的(灾难性)bug。
  • 解决方法:

     既然Remote_WSL在WSL1中安装扩展没有问题,且发行版的WSL1和WSL2版本变更并不会影响WSL的主机身份识别,那解决WSL2安装扩展的问题就如同把大象装在冰箱里一样简单了。
    1. 回滚到WSL1:
    powershell C:\> wsl.exe --set-version <Distro> 1
    2. 使用Remote_WSL在WSL1中安装好VSCode扩展;
    3. 升级到WSL2:
    powershell C:\> wsl.exe --set-version <Distro> 2
    All done.


非重点的小坑

1. 环境变量

 如果WSL安装了zsh之类的shell并作为默认启动,那么在使用Remote_WSL时,VSCode的扩展依赖的依旧是bash的环境变量配置,并不会启动zsh。
 因此,在设置如ANDROID_HOMEGOPATH之类的环境变量时,不要将自定义变量设置保存在$HOME/.zshrc里。

  • 如果希望VSCode和zsh都使用同样的环境变量,解决办法:
    • 将环境变量设置保存在$HOME/.profile中,并在$HOME/.zshrc添加如下语句:
      source ~/.profile
      
    • 或者,直接将变量设置添加在/etc/profile中。

2. Flutter——android开发

 在WSL中使用Flutter是我升级到WSL2的动因,WSL2确实解决了运行32bit程序的硬伤,但由于WSL2是完全的虚拟机环境,也产生了新的问题:
 ——android虚拟机就不能用了。


 老老实实用adb接手机调试吧。

3. 运行Windows可执行程序

 当前WSL2预览版本的bug,不能通过shell打开codeexplore之类的windows程序,等待未来版本解决。

相关文章

网友评论

      本文标题:一次不正经的Remote_WSL2体验

      本文链接:https://www.haomeiwen.com/subject/qmtvrctx.html