美文网首页
一次不正经的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