前言

为了同时可以受益于windows易操作性(主要是能玩游戏)和linux的生产力环境,我之前尝试装过双系统,但是双系统切换麻烦。用过虚拟机,但是虚拟机总是感觉很累赘。之前也装过docker,也装过wsl,但总是没用利索。
尝试这么多的目的就是能够轻量化,快速简洁的创建一套或多套开发环境出来。
首先是wsl,即Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统,最简单的安装方法就是,在windows strore里面直接安装自己喜欢的Linux发行版。我选择的还是我用的最多的ubuntu.
关于终端工具,之前我用的是wsl-terminal,但是之前印象中也就那样,这次我发现一个叫windows terminal的东西,好像挺好用 的,一起装了,也在windows strore。

默认启动路径

wsl-terminal的默认启动路径,看着很不爽,可以通过更改json文件设置,如下:

            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
                "startingDirectory": "/home/sss"
            },

最后一行,我把ubuntu的启动路径设为/home/sss。
json文件位于设置最底下

配置代理服务器

打开wsl(即刚刚安装的ubuntu)后,需要一段时间初始化,完毕之后先老生常谈的更换apt源,然后我安装了zsh,在我打算用antigen配置zsh时,发现git.io超时,而且github clone速度也巨慢…

curl -L git.io/antigen > $HOME/antigen.zsh

我找个下,找到这篇文章,因为我本身使用梯子访问外网,不出所料,又是代理出现了问题。这里引用一下:

新的 WSL2 架构会为 Linux 系统分配一个虚拟网卡,Linux 虚拟机与 Windows 组成了一个局域网,因此 若想在 Linux 下访问 Windows 的服务,必须要使用 Windows 的主机地址。

适配器
上面两个网卡就是装完wsl新增的,左边的就是用来和wsl通信的主机的地址。答主专门写了个脚本,如下:

curl -o wslproxy -L https://git.io/Jfo6z
sudo bash ./wslproxy install

大概看了下脚本,其实简单说,功能就是每次解析主机地址,然后组装代理地址:端口号,然后设置git以及代理,函数如下:

# Create a script for system proxy variables, which is sourced on shell startup
makeVars() {
  echo "
export http_proxy=$1
export https_proxy=$1
echo \"✔️️ 系统变量设置完毕\"
" >${varsfile}
}

# Set the proxy settings for git
applyGit() {
  # For HTTP/HTTPS protocol
  git config --global http.proxy $1
  git config --global https.proxy $1
  # For git:// protocol
  git config --global core.gitproxy ${socks}
  echo "✔️️ git设置完毕"
}

因为我们使用的是wsl-terminal,相当于直接终端访问wsl,而不是ssh,按照命令指引setup完之后,无需进行提示信息里说的ssh设置,只需要在.zshrc(我用的zsh)加入下面两句即可:

#随WSL启动自动开启代理
wslproxy on
. /home/sss/wslproxy.vars

都搞定之后可以用

curl -v www.google.com

来测试,不要用ping,因为咱设置的代理是http和https,而ping是icmp报文,是三层网络报文~

配置zsh

ok,网络搞定,可以使用antigen了,按我理解这应该就是一个更好的zsh包管理工具,只需要在.zshrc里面加入几个命令,就可以很简单的构建你的zsh,.zshrc示例:

source $HOME/antigen.zsh

# Load the oh-my-zsh's library
antigen use oh-my-zsh

antigen bundles <<EOBUNDLES
    # Bundles from the default repo (robbyrussell's oh-my-zsh)
    git

    # Syntax highlighting bundle.
    zsh-users/zsh-syntax-highlighting

    # Fish-like auto suggestions
    zsh-users/zsh-autosuggestions

    # Extra zsh completions
    zsh-users/zsh-completions
EOBUNDLES

# Load the theme
antigen theme robbyrussell

# Tell antigen that you're done
antigen apply

他可以兼容oh-my-zsh,可以说比较强了。
需要注意的是他的wiki里也就是上面的配置文件有一个错误,要注意:

antigen bundle <<EOBUNDLES

应该是bundles而不是bundle。
如果$PATH有问题导致找不到命令,可以看这篇文章

配置vim

这次vim使用的是vim-plug来管理各种插件的。这里偷个懒,直接fork大佬的仓库,自己慢慢修改吧。

配置docker

我还一起装了个docker,因为据说Docker Desktop 发布了支持 WSL2 后端的新版。WSL 2 引入了重大的体系结构更改,因为它是 Microsoft 构建的完整 Linux 内核,允许 Linux 容器在没有仿真的情况下本机运行,而 Docker 也专门开发了可以使用 WSL 2 中的 Docker 守护进程的桌面管理程序。
docker desktop
只要把图上两个打钩,在你的wsl中,就可以docker命令了,无需任何其他操作,而且wsl中的docker和docker desktop是互通的,爽歪歪~
如果先装了docker再装wsl,可能会出现cmd窗口运行wsl报错,可参考WSL PowerShell always returns Processing fstab with mount -a failed解决。

使用MobaXterm登录wsl

我这之前是用windows terminal来登录wsl的,但是后来用mobaxterm登录了。前面说了wsl的ip每次都会变,所以用Ip登录很不方便,但是mobaxterm自带的wsl登录并不好用,我又试过给wsl设置主机名,但是访问失败,后来发现可以直接用localhost来登录就可以ssh登录wsl了,这样zsh里面的环境变量啥的都正常了。

与virtulbox共存

因安装HCL需要virtulbox,所以需要进行相应的处理。
主要参考这篇文章
如果有别的后面再补充吧

远程访问wsl2

端口转发或修改windows ssh的默认shell两种方法,可参考如何使用ssh登录WSL2?.
如果按照里面修改默认bash的方法登录,出现一堆???登录不了,可能是因为微软商店的最新版有bug,下载18.03的版本,,还是不行,我吐了,尝试下一个办法
再参考一篇如何在局域网的其他主机上中访问本机的WSL2
使用这个办法的前提是能通过localhost来登录到wsl(我还要再换回最新版)。
相关命令:

 netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=22 connectaddress=localhost
 netsh interface portproxy show all
 netsh interface portproxy delete v4tov4 listenport=4000 listenaddress=0.0.0.0

终于可以了。。。。

挂载树莓派sd卡

在编译完内核后,需要安装内核,因此需要访问sd卡,然而在wsl下却看不到相关分区,于是开始折腾。。sd卡中有两个分区,分别是fat32的bootfs和ext4的rootfs。
1.最开始看的如何在Windows的WSL中挂载U盘,结果是挂载是挂载上了,但是ext4分区打不开,不明白为什么 。
2.然后开始看的这个:在 WSL 2 中装载 Linux 磁盘,但是实际执行的时候报错,又看到了

如果你正在连接外部驱动器且使用这些装载说明操作失败,则可能需要尝试连接 USB 设备的说明。

所以继续参考微软的文章连接 USB 设备来进行各项操作。结果是最终都成功了,但是/dev下根本没设备,看了别人的文章,是wsl的内核里没有usb块设备的驱动,还要重编wsl的内核,我真是吐了。如果想按这条路走,可以参考WSL2连接USB存储设备
3.我又想到,要不然先在我的mac挂载好,然后去wsl2直接mount,但是mac也没法读取ext4.。。又看了篇在MacOS上为树莓派交叉编译Linux Kernel,可以直接运行过程中安装,突然想到确实是限制了思路,因为本来就可以在树莓派现编内核现安装的。。。
先偷个懒,在wsl编好后压个包拷到sd卡吧。。

ok继续,再按步骤3走,wsl2的内核源码,官方文档WSL 中的高级设置配置,按步骤3的换了wsl2的内核终于搞定,可以在wsl中访问了。
步骤:
1.在windows插入读卡器,然后执行

usbipd attach -b 2-24 -w -a

2.在wsl中使用lsblk查看分区
lsblk

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐