一次不正经的Remote_WSL2体验

缘起

 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程序,等待未来版本解决。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容