打造基于WSL的开发环境
- 1. 在Windows上启用WSL
- 2. 在应用商店安装Ubuntu 18.04
- 3. 使用wsl-terminal代替默认的终端
- 4. 使用zsh和oh-my-zsh
- 5. 修改主题、颜色和使用powerline字体
- 6. 安装、启动docker
- 7. 关闭对Linux子系统的病毒实时扫描
- 8. 安装tmux和neovim
- 9. 总结
- 10. 参考
现有工作电脑是只有8G内存的Dell笔记本,操作系统是window10家庭版,由于Linux上钉钉、Office等的支持不太好,又没有Macbook可用,笔者一直以来都是在虚拟机上用Linux来工作,但是8G内存对于后端开发实在不太够用,写代码的时候总是缺乏一种爽快感。
最近发现WSL(windows subsystem for Linux)可以在win10家庭版中启用,经过一番折腾,顺利得把开发调试环境从虚拟机迁移到了WSL中,内存降了不少。这里把笔者的折腾经历记录下来,希望能令有相同需求的小伙伴少走点弯路。
笔者的WSL目标有:
- 支持python、golang、javascript前后端开发
- 良好的terminal支持,包括powerline字体、tmux等
- neovim的良好支持,包括YouCompleteMe、cpsm、vim-go等插件的支持
- 能使用oh-my-zsh
- 支持全屏
- 可以使用docker(这里坑比较多)
1. 在Windows上启用WSL
- 按windows键,输入控制面板,打开控制面板,点击程序 -> 启用或关闭Windows功能。
- 在Windows功能窗口,打开“适用于Linux的Windows子系统”,重启系统生效。
2. 在应用商店安装Ubuntu 18.04
- 打开windows应用商店,搜索“Ubuntu 18.04”,安装。
- 安装完毕后打开Ubuntu,确保能正确运行,如果出现运行问题,检查WSL是否开启,以及是否忘了重启
- 修改软件源为163源
echo 'deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse ' | sudo tee /etc/apt/sources.list sudo apt update
3. 使用wsl-terminal代替默认的终端
默认的终端效果很差,我们希望能够有一个类似Linux或Mac上终端效果的替代品,这里我们考虑wsl-terminal。
- 下载wsl-terminal的最新release,我下载的是:0.8.11
- 解压缩wsl-terminal到一个ntfs分区的目录下
- 点击open-wsl.exe,即可打开wsl terminal。
- 其它设置见wsl-terminal的github主页
4. 使用zsh和oh-my-zsh
- zsh相较于bash在定制化等方面都有不小的提升,替换之,
sudo apt install zsh
- 安装oh-my-zsh
bash -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
- 修改wsl-terminal的启动方式,在wsl-terminal目录中找到快捷方式,右键 -> 属性,将目标中的bash修改为zsh
- 将wsl-terminal的快捷方式放到任务栏,方便后续打开
5. 修改主题、颜色和使用powerline字体
- wsl-terminal支持主题设置,在窗口标题栏右键 -> 选项,即可设置,我设置的是“base16-seti-ui.minttyrc”
- wsl-terminal默认的配色目录的背景色一片绿,实在太伤眼睛了,修改之:
# 修改颜色配置效果,写入.zshrc中 dircolors # 查看当前颜色配置 # 修改其中的 tw和ow,放到~/.zshrc里面,以下为我的设置 LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=01;34:ow=01;34:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; export LS_COLORS
- 为了在终端支持一些图标字符,我们通常需要安装powerline字体,这里我安装的是DejaVuSansMono,把对应文件夹下面的ttf文件下载下来安装,然后在wsl-terminal中修改字体就可以了。
6. 安装、启动docker
网上搜索wsl上安装docker,大部分都是让你用windows版本的docker,但笔者的win10家庭版不支持hyper-v啊,一翻折腾后终于找到一个可行的办法,步骤如下:
- 在/etc/apt/sources.list里面加入xenial的docker源,注意:这里不能用bionic的源,因为我们要安装旧版本的docker-ce。
echo 'deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable' | sudo tee -a /etc/apt/sources.list
- 安装17.09.0版本的docker-ce,小版本也不能错,不然安装好的docker跑不起来
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt install docker-ce=17.09.0~ce-0~ubuntu # 这里的版本不能超过17.09.0 sudo apt-mark hold docker-ce # 固定docker-ce版本,防止后续更新升级 sudo usermod -aG docker $USER # 将当前用户加入docker group
- 用administrator方式启动wsl-terminal,执行以下命令启动docker服务
sudo cgroupfs-mount # 在每次启动docker服务前必须执行cgroupfs-mount sudo service docker start sudo service docker status # 一次不成功就多试几次
- 运行
docker run --rm hello-world
检查docker是否安装成功,如果存在问题,检查上述步骤是否有错误 - 最后的效果如下:
7. 关闭对Linux子系统的病毒实时扫描
在linux子系统中安装软件或者git clone经常会发现系统CPU比较高,查看任务管理器,发现病毒扫描服务占用了大量的CPU,关闭它可以顺畅很多。
- 在用户目录的AppData\Local\Packages下找到对应的Ubuntu的目录,我的是
C:\Users\feiyu\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc
- 打开设置 -> 更新和安全 -> Windows安全 -> 病毒和威胁防护,点击病毒和威胁防护设置,点击添加或删除排除项,将上面的目录加入到排除项中。
8. 安装tmux和neovim
- 安装tmux和neovim:
sudo apt install tmux neovim
- 相关配置可以参考笔者的配置
- neovim如果需要支持YouCompleteMe和CPSM插件,安装相关library:
sudo apt install libboost-all-dev python3-dev
9. 总结
9.1. 优点
- 内存消耗比虚拟机降低了很多很多,之前我的8G内存根本不够用,现在基本在4.8G左右
- 可以很方便地操作windows上的文件
- 可以使用windows上的服务,如代理服务等
- 启动的服务可以直接用windows上的浏览器访问和调试
9.2. 问题
- 磁盘IO性能一般
- 部分命令得不到预期结果,如netstat
- Windows剪贴板中的内容无法在Vim中粘贴
docker exec
无法正常工作,应该还是跟WSL中/proc或者其它地方跟标准Linux不一样有关
总的来说,如果你对docker的依赖度不高,wsl现在已经比较完善了,一般的开发已经可以胜任。
10. 参考
- https://huyinjie.xyz/2018/02/17/%E4%BD%BF%E7%94%A8wsl-terminal%E7%BE%8E%E5%8C%96WSL/
- https://www.reddit.com/r/bashonubuntuonwindows/comments/8cvr27/docker_is_running_natively_on_wsl/
- https://blog.royink.li/post/ls_color_in_wsl
- https://medium.com/@leandrw/speeding-up-wsl-i-o-up-than-5x-fast-saving-a-lot-of-battery-life-cpu-usage-c3537dd03c74