wsl2 开发使用说明(总体来讲不建议)

WSL 使用说明 关于卸载

  • wsl --shutdown
  • wsl --unregister xxxxx
  • 卸载 Ubuntu
  • 打开 Windows 功能关闭:
    • 适用于 LinuxWindows 子系统
    • 虚拟机平台
  • 点击确定
关于导入导出
  • importexport 只是针对磁盘,意思就是网上说的修改 Ubuntu 目录用的导入导出方法的就是修改了磁盘的位置罢了。
    下面是迁移 Ubuntu 时的操作:
    wsl --export Ubuntu E:\Wsl\Ubuntu\ubuntu.tar wsl --unregister Ubuntu wsl --import Ubuntu E:\Wsl\Ubuntu E:\Wsl\Ubuntu\Ubuntu.tar --version 2

关于 WSL
  • 针对Wsl开发环境做以下总结:
    1. 虽然使用起来像是一个系统,但是不是,这个一定要注意
    2. 既然不是一个系统,就不要打开windowns下的项目却使用Ubuntu下的环境。今天打开Windowns下的Java项目,用的是Ubuntu下的Jdk结果,死活不能给项目添加,平台里面是有的。
    3. 一定要区分Ubuntu软件和Wsl.Ubuntu。安装的Ubuntu直接打开是root权限,Wsl.Ubuntu是黄色图标。设置里面可以清晰看到执行的命令不一样。
    4. 切记,开发用一个系统环境。要么Windows下面。把服务全部安装到Ubuntu。要不都在Ubuntu。
    5. 前一段时间Flink服务访问不了,最后发现Flink服务bind配置需要改为0.0.0.0不能是localhost。
  • 用户权限
    • 当第一次启动 Ubuntu 时,会让你创建用户,下面设置的就是这个用户。 可以很好的解决在 Windwos 下创建文件具有 Root 权限的问题,还有 Vscode 中的 Terminal 也可以打开就是普通用户,不需要在进行设置。
    • 在 cmd 或者 powershell 中执行如下命令
      ubuntu config --default-user xxx # wsl 关闭 wsl --terminate Ubuntu # wsl 启动 -u 指定用户 wsl -d Ubuntu -u xxx

关于代理
代理问题,一定要开发代理软件的允许局域网。完了之后找到局域网的代理端口。
设置:source proxy.sh set 10811
取消设置: source proxy.sh unset
#!/bin/sh hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }') wslip=$(hostname -I | awk '{print $1}')set_proxy(){PROXY_HTTP="http://${hostip}:${port}" PROXY_HTTPS="http://${hostip}:${port}"export http_proxy="${PROXY_HTTP}" export HTTP_PROXY="${PROXY_HTTP}"export https_proxy="${PROXY_HTTPS}" export HTTPS_PROXY="${PROXY_HTTPS}"export all_proxy="${PROXY_HTTP}" export ALL_PROXY="${PROXY_HTTP}"echo "Host ip:" ${hostip} echo "WSL ip:" ${wslip} echo "Current httpproxy: ${PROXY_HTTP}" echo "Current https proxy: ${PROXY_HTTPS}" echo "Note: You need to invoke this command with source, like: source proxy.sh set ${port}" }unset_proxy(){ unset http_proxy unset HTTP_PROXY unset https_proxy unset HTTPS_PROXY unset ALL_PROXY unset all_proxy echo "Unset done: http_proxy HTTP_PROXY https_proxy HTTPS_PROXY" echo "Note: You need to invoke this command with source: source proxy.sh unset" }proxy_info(){ echo "Host ip:" ${hostip} echo "WSL ip:" ${wslip} echo "Current httpproxy: $http_proxy" echo "Current https proxy: $https_proxy" }if [ "$1" = "set" ] then if [ "$2" = "" ] then port="10809" echo "Use default port: ${port}" else port="$2" fi set_proxyelif [ "$1" = "unset" ] then unset_proxyelif [ "$1" = "info" ] then proxy_info else echo "Unsupported arguments: $1. Available aguments: set [port] unset info" fi

关于 IDEA
ideawsl2 的支持简直不忍直视!希望你们改好之后发个公告告诉我能用了。
这几天我碰到了很多问题:
1,wsl2 普通用户创建的文件无法打开。
2,idea 无法切换到 wsl2 的普通用户上去。
3,idea 每次都要检查 jdk,即使第一次检查后是没问题的。特别慢。
4,apt install 安装的 maven 无法识别。
5,特别容易卡死,奔溃!
关于开发
注:wsl2 不建议跨系统文件调用。我们考虑以下几个情景。
  • wsl 作为服务器
    只需要 wsl 做为服务器,代码本地开发。
    这样需要将本地代码开发完复制一份到 wsl 目录。只能通过文件上传的形式,部署代码。即使在你看来,都在 windows 上,很可惜,因为不建议跨系统访问文件,这个不建议的准确度有多高呢?基本上就是说,一个 ls 都会卡一阵。。。
    还有,只能在 windows 开发,远程就会有网络问题。
  • 开发环境
    全部使用 wsl 目录,idea 不支持,vscode 表示适配的很好。jetbrains 的远程开发和 vscode 差不多,都能使用。
    简单来讲就是远程开发,即使你感觉他们都在你的 windows 上,其实隔着很远很远。。。
  • 不知道说啥
    全部在 windows,请关闭 wsl2 这个垃圾。
关于网络
wsl2 中的所有服务,都只能本地访问,如果想提供远程访问,需要让 windows 转发。
涉及两条命令:
netsh interface portproxy add v4tov4 listenport=[port] listenaddress=0.0.0.0 connectport=[port] connectaddress=[wsl ip]netsh.exe advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=[port]

一条告诉 windows 转发 wsl 服务端口。一条告诉 windows 开放防火墙
关于 docker
【wsl2 开发使用说明(总体来讲不建议)】可以很开心的玩,但是由于网络原因,你不能提供远程服务。
总结
  • 磁盘和网络问题不解决,请不要使用 wsl2,还不如开个虚拟机。
  • 建议在 windows 本地开发,该装的都装,不要想着使用 wsl2 来隔离开发环境。

    推荐阅读