搭建基于 Windows 10 和 WSL 的开发环境不完全指南

零、背景

前段时间博主曾经写过一篇文章《Windows 10 配合 Ubuntu 搭建舒适开发环境不完全指北》,文章介绍了如何使用 Windows 配合 Ubuntu 搭建舒适的开发环境,此后博主由于一些个人因素离开了上家公司,加入了目前的公司。不巧的是,新公司默认情况下配置的电脑也是 Windows(后来听说入职之前可以向 HR 申请 MBP,但我没有申请),而且电脑一旦配发,如无损坏需用满三年才能更换,而我特别不喜欢使用 Windows 的 Terminal 工具。一方面是开发环境部署困难,比如安装 Python 你可能需要自行下载 Python 安装镜像然后手动安装,安装完成后可能还需要配置环境变量,几乎所有的开发工具在 Windows 下的安装都是类似的;另一方面是 Terminal 界面丑陋,用户体验较差。即使有 Git Bash,Cmder,PowerShell,choco 等一系列辅助工具,还是无法赢得很多喜欢命令行工具的程序员的青睐, 我也一样。

随着 WSL 第二代和 Windows Terminal 的发布,以及几天以前微软推出了新的编程字体 https://github.com/microsoft/cascadia-code ,再次给使用 Windows 作为开发机器的程序员带来了重生的希望。但是 Windows Terminal 和 WSL 第二版必须要求 Windows 发布版本大于等于 1903,目前共同公司配备的 Windows 是 1809,恰好能用 WSL 的第一版,但不能用 Windows Terminal 和 WSL 第二版。好在 Windows 1903 的版本公司正在积极定制中,应该马上能用了,可喜可贺。

基于以上背景,本文记录了在 Windows 1809 版本下配合 WSL 第一版部署舒适开发环境的过程。

一、依赖

安装 Windows Terminal 要求必须是 Windows 10系统,且系统版本 >= 16237.0

按下win建,输入 about your PC ,回车后在 Windows specifications 一节中查看系统版本

二、安装 WSL

2.1 开启子系统

方式一:(推荐)通过命令行开启

  1. 使用管理员方式打开 PowerShell 执行如下命令:

    1
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  2. 重启电脑

    Win - R: 输入 shutdown -r -t 00

方式二: 使用图形化界面开启子系统功能

如果不是写作需要,我会更倾向使用命令行方式开启 WSL 功能,使用更少的操作完成更复杂的功能,这是程序员与生俱来的特点,因为时间是宝贵的。

步骤1: 按 Win - R,输入 control 后回车

步骤2: 点击 “Uninstall a program”

步骤3: 点击 “Turn Windows features on or off “

步骤4:找到 “Windows Subsystem for Linux” 确保前面的选择框被选中

重启电脑。

2.2 安装 Ubuntu 16.04

打开 Microsoft Store,输入 Ubuntu,选择评分最高的那个安装。

安装完成后,初次打开 Ubuntu Terminal 会进行初始化,输入 Ubuntu 的账号和密码,回车后等待初始化完成即可。

三、WSL 初始化

  1. 替换国内源

    备份 /etc/apt/sources.list 后,使用 root 权限修改 sources.list 的内容,博主使用的是清华大学提供的镜像,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

    详细信息请查阅 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/

  2. 更新系统

    1
    $ sudo apt update
  3. 安装 ssh

    系统更新完成后,默认会安装旧版 openssh-server, 所以需要手动卸载旧版 openssh-server

    1
    $ sudo apt remove openssh-server

    由于旧版 openssh-server 配置和最新版不兼容,所以需要删除原来的配置

    1
    $ sudo rm -rf /etc/ssh/*

    安装 openssh-server

    1
    $ sudo apt install openssh-server

    注意: 由于 WSL 和 Windows 共享端口,而 22 端口被 Windows 占用,所以需要手动更换 ssh 的端口或者确保 Windows 的 22 端口可用且防火墙开启 22 端口,显然更换 WSL 的 ssh 端口会简单一些,如下:

    打开 sudo vim /etc/ssh/sshd_config,将 Port 22 改成 Port 2222 (或者其他可用端口)

    启动 ssh

    1
    $ sudo service ssh start

    正常启动后即可在 Windows 下使用 SSH 工具连接到 WSL,其中地址是 127.0.0.1 或者 localhost,端口和用户密码安装自定义的填写。

  4. 搭建开发环境

    根据需要,安装好 Python/Node.js/NVM/Git/Docker 等工具。

    注意: WSL 第一版中并没有使用真正的 Linux 的内核,因此导致 Dockerd 不可用,如需使用 Dockerd,请使用 WSL 2,具体参考 https://docs.microsoft.com/en-us/windows/wsl/wsl2-about

  5. 初始化项目

    WSL 初始化完成后,将 Windows 的某个盘(如 d)划分为开发盘,Windows 的所有磁盘会被挂在到 /mnt/ 目录下,进入 /mnt/d/ 工作目录,克隆项目到此处,开始愉快的开发。:)

    备注: 挂载在 WSL 下的 Windows 目录会带有绿色背景,这种色调对我来讲特别不舒服,就像是总在提示我不是真正的 Linux 文件系统,而是 Windows 挂在进来的 NTFS 系统一样。为了去掉绿色背景,我改了一下目录配色方案:

    1
    2
    $ touch ~/.dir_colors
    $ echo "OTHER_WRITABLE 35;40" > ~/.dir_colors

    .bashrc 末位添加一行:

    1
    eval `dircolors $HOME/.dir_colors`

    source 一下 .bashrc

    1
    $ source ~/.bashrc

WSL 和项目初始化完成后,在 Windows 机器下使用相应编辑器或者 IDE 进行开发,开发完成后,在WSL中编译运行,爽哉!特别是最近在 VS Code 对 WSL 原生支持后,中小项目甚至可以将项目目录直接放在 WSL 里面,参考 https://code.visualstudio.com/docs/remote/wsl,只不多这种方式只能应付中小型项目,项目大到一定程度时可能需要专业的开发工具,如 WebStorm 。像 WebStorm 这类开发工具对 WSL 没有原生支持,无法打开(WSL的目录可以在Windows中被编辑,但是不能这样做,这样会导致权限出错)在 WSL 里面的项目,如果项目目录在 WSL 里面,这时要在 Windows 下开发就必须将 WSL 里的目录映射到 Windows 上,Samba 服务可以实现。经过笔者的实践表明,小项目使用何种方式开发都可以,当项目大一定程度后, VS Code 已经无法智能补全了,这时候使用 IDE 也许是更好的选择。这种场景下,使用 WebStorm 打开 Samba 共享出来的项目目录开发会变得异常卡顿,所以最优的选择还是直接将项目放在 Windows 下,使用 IDE 直接打开 NTFS 系统中的项目文件,然后挂载进 WSL 中编译运行。

提示:在 Windows 中使用 IDE 开发项目时,可以将 IDE 的 Terminal 绑定成 WSL,如JetBrains 设置 Teminal 为 WSL

四、踩过的坑

  1. openssh-server 新旧版本配置不兼容,需删除旧配置再安装新版本
  2. Ubuntu 18.04 的 WSL 无法安装 Samba 服务,Samba 服务在 WSL 下安装异常复杂,需要关闭 Windows 下的一些服务,释放占用的 139 和 445 端口。
  3. VS Code Remote + WSL 开发方式只适用于小项目,大型项目背景下, VS Code 索引文件不太友好,智能提示几乎崩溃
  4. WSL + Samba + WebStorm 在大项目背景下开发异常卡顿,甚至卡死。

本文标题:搭建基于 Windows 10 和 WSL 的开发环境不完全指南

文章作者:Syncher

发布时间:2019年09月23日 - 22:09

最后更新:2019年10月10日 - 18:10

原始链接:https://0x400.com/2019-09-23-dev-environment-on-windows-with-wsl.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。