尝试用 WSL2 + Ubuntu 开发

目的

用 WSL2 模拟 Linux 开发环境,然后用 Linux 开发项目,熟悉各种 Linux 系统和命令,为以后成为大神埋下习惯的种子

前言

可不看

笔者是 Window 用户,去年真正学 Linux,以前也用过虚拟机开发,也有过各种尝试,但因为各种原因,还是回归 Window 开发

去年看到方应杭的直播开发,了解到 docker + VS code 的开发模式,而后就写了 手把手提高开发体验:dev-container,配置好后我没有继续研究,没有马上把环境切换成,直到最近,换电脑,才想着就用 Linux 开发吧

正文

什么是 WSL

Window 中的 Linux 系统,Window 提供的内置虚拟机

所以我们可以在 Window 中安装 Ubuntu、Centos 等 Linux 系统

但他的缺点是文件系统和 Window 不一致,但可以共享

说白了,如果你在 Linux 中操作 Window 中的文件,会卡顿。反之亦然

WSL、docker、Window 的虚拟机(Hyper-v)的关系相当于,Window 用 Hyper-v 实现了虚拟机,也就是 WSL,window 中的 docker 也是基于此技术来实现容器化的

省流版

修改默认安装目录到 D 盘

更换阿里云软件源

更新软件

安装 oh my zsh

配置 ssh

node 环境

ruby 环境

修改默认安装目录到 D 盘

wsl --help # 查看文档
wsl --list # 查看启动的 wsl 数量
wsl --list --verbose # 列出已安装的 Linux 发行版
wsl --set-default-version <Version> # 设置默认 WSL 版本
wsl --set-default <Distribution Name> # 设置默认 Linux 发行版
wsl --shutdown # 关闭 wsl
wsl --export <Distribution Name> <FileName> # 导出
wsl --unregister Unbuntu-18.04 # 注销当前分发版
wsl --import <Distribution Name> <InstallLocation> <FileName> # 导入
ubuntu1804 config --default-user johan # 设置默认登陆用户

同理,可以把 docker 也放到 D 盘中

更多命令可以前往官网查看

更换阿里云软件源

1.备份

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2.修改

sudo vim /etc/apt/sources.list

将 source.list 文件内容替换成下面的

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

更新软件

sudo apt update && sudo apt upgrade -y

安装 oh my zsh

安装 zsh

sudo apt install zsh -y

安装 ohmyzsh

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装 ohmyzsh 插件,按照自己的喜好

可以看看 antfu 的配置

git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt" --depth=1
ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme"

进入 .zshrc 文件,并修改成ZSH_THEME="spaceship",并让配置立马生效 source ~/.zshrc

将 ohmyzsh 设置为默认编辑器

chsh -s $(which zsh)

配置 ssh

生成 github 公钥

ssh-keygen -t rsa -C "t511069160@qq.com" -f "~/.ssh/id_rsa_github"

生成 gitlab 公钥

ssh-keygen -t rsa -C "XX" -f "~/.ssh/id_rsa_gitlab"

配置 config 文件

Host github
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github

Host 10.110.119.233
HostName 10.110.119.233
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab

测试是否配置成功

ssh -T git@github.com
ssh -T git@10.110.119.233

node 环境

使用 nvm 来控制 node 版本,因为有些老项目还在用 14 版本的

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

如果说安装失败或者安装很慢,就在 /etc/hosts 中将 raw.githubusercontent.com 域名映射下,具体方法可看GitHub520

将配置写进 .nvm 中

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

再让配置立即生效source ~/.zshrc

nvm --version # 0.39.3
nvm install 16.19.1 # 下载 16.19.1 版本的 node
nvm list # 查看 node 列表
nvm use 16.19.1 # 使用 16.19.1 版本的 node

nvm下载

ruby 环境

使用 rvm 来管理 ruby,安装文档参考官网

安装 GPG keys

gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

报错:

没有gnupg2库

先下载 gnupg2

apt install grupg2 -y

grupg2 安装好了,就重新 GPG keys。再安装 rvm

curl -sSL https://get.rvm.io | bash -s stable

安装结果

安装好后,我们需要修改 ruby 安装源,来提高安装速度

 echo "ruby_url=https://cache.ruby-china.com/pub/ruby" > /usr/local/rvm/user/db

看截图中的绿色字,RVM 安装的路径

使 rvm 命令生效

source /usr/local/rvm/scripts/rvm

此时,rvm -v 就能看到 rvm 1.29.12(latest)...

安装 ruby

rvm install ruby-3.1.3
rvm list known:#查看
rvm list:#查看
rvm use 3.1.3 --default #使用 3.13 为默认版本的
ruby -v # ruby 3.1.3p185

安装 rails

gem install rails --verbose # --verbose 可以查看进度
rails -v # 7.0.4

遇到的问题(一)

之前用 curl -sSL https://get.rvm.io | bash -s stable 安装完后,使用gem install railscommand not found ubuntu,解决不了,后来尝试了各种方法安装,例如下载源码,例如用sudo apt-get install ruby-full,后来都不是很好使

可怪自己 linux 基础太差,英语又不好,下载完 rvm 后,它已经提示了,让我切换用户并重新登录

安装完rvm后的提示

而我第二次安装的契机是不死心,还是想用 rvm 安装,然后就想到先卸载,再重新安装

发现了 apt-get purge rvmapt-get remove rvm 等命令,第二次安装我用了 sudo 命令,安装地址改成了 /usr/shar/rvm

删除 rvm

sudo apt-get purge rvm

重新安装

curl -sSL https://get.rvm.io | sudo bash -s stable

第一步,将正在用的用户添加到 rvm 组中

sudo usermod -a -G rvm johan

第二步,注销-再次登录

我的办法比较土,先切换到 root,再切回来

su root
su johan

第三步,运行生效命令

source /etc/profile.d/rvm.sh

这样就安装成了

遇到的问题(二)

因为在 WSL 中开发,但是有时候要用手机来查看样式问题,所以需要在手机端访问,但是 WSL 启动的服务,手机端访问不了。笔者对网络方面的知识不了解,也不想了解。按照从局域网访问 WSL2 这篇文章的操作来做

先开启对应端口防火墙,再将 WSL 上的 ip 、端口映射到本地

后续

做事情都要有所目的,当初写 手把手提高开发体验:dev-container 时,想着把环境配置成一致,方便项目部署。但发现所占内存太大,笔记本(12G)带不动。现如今新电脑(32G)虽然可以用此方法来开发,但笔者的目的变了,笔者现如今想学的是 Linux 、bash,使用 WSL 能随时随地接触它,熟悉它,习惯它

开发还是用 WSL ,但是写东西,例如写博客之类的还是会依赖于 Windows,所以真不如别人说的还不如买一台 mac 呢

参考资料