WSL2 打造顶级开发环境

背景

Linux 桌面容易崩溃,通常没有主流的办公软件

Mac 刚换ARM架构有些兼容性问题,《不能玩游戏,刘海太丑》

Windows 啥都能干,但是powershell 太复杂配置个环境变量都费劲,国内服务器一般使用Linux,powershell 操作起来不太习惯,一些语言都是从类Unix平台移植过来的,运行速度和编译速度没有 Linux 快

WSl介绍

微软近些年一改从前对开源的态度,开始积极拥抱开源,然后就在windows上内置了一个linux子系统简称wsl

wsl1 是一个仿真的系统不支持某些内核特性,比如 namespace,唯一的优点就是跨文件系统访问速度几乎没有开销

wsl2 是基于hyper-v技术的轻量级虚拟机,完整的 linux 内核,启动只需要几秒

 

以下操作均在win11 22000下操作

安装

powershell(管理员)

wsl --install

该命令会自动启用子系统功能并安装ubuntu

 

常用配置

全局配置 

配置文件 %UserProfile% .wslconfig

[wsl2]
# wsl虚拟机cpu核数
processors=8

# wsl虚拟机内存
memory=4GB

swap=1GB

# 开启localhost 访问
localhostforwarding=true

# 关闭嵌套虚拟化
nestedVirtualization=false

 

分发配置

配置文件/etc/wsl.conf

[automount]
# window 分区挂载文件权限掩码
options = "metadata,umask=022,fmask=033"

[interop]
# 是否开启互操作,也就是在linux使用win命令
enabled = true
appendWindowsPath = true

[boot]
# 开机启动命令一些想开机启动的命令可以放进来
command = sudo /etc/init.d/start.sh

 

配置支持中文

# 安装中文包
sudo apt install language-pack-zh-hans -y
# 勾选选en_US.UTF8 zh_CN.UTF8 并设置zh_CN.UTF8为默认
sudo dpkg-reconfigure locales
# 安装字体配置工具
sudo apt install fontconfig # 拷贝windows字体
sudo cp -r /mnt/c/Windows/Fonts /usr/share/fonts/windows # 或者安装文泉字体,感觉没有windows字体看着舒服
sudo apt-get install fonts-wqy-zenhei
# 刷新字体 fc
-cache -f -v

 

安装GUI应用

sudo apt update

# 安装常用软件
sudo apt install gedit nautilus -y

# 安装输入法
sudo apt install fcitx fcitx-googlepinyin -y

# 启动语言检查,可以完整一下中文环境
sudo echo "sudo /etc/init.d/dbus start" >> /etc/init.d/start.sh
sudo /etc/init.d/dbus start
sudo gnome-language-selector

# 安装edge浏览器
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge.list'
sudo rm microsoft.gpg
sudo apt install microsoft-edge-stable -y

 

装好的应用会自动出现在windows的开始菜单,直接在开始菜单启动即可,除了分辨率有点不对,使用起来很流畅

 

配置中文输入法

wsl不支持systemd,要想自动启动fcitx 可以在 ~/.bashrc 加入

export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx

if [ $(ps -ef |grep fcitx-dbus-watcher |wc -l) -eq 1 ]; then
  fcitx-autostart >/tmp/fcitx.log 2>&1
fi

 

打开 Fcitx 配置 (Ubuntu)

改一下快捷键

 

 

 

安装Docker

# 安装docker
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 自动启动
sudo echo "sudo /etc/init.d/docker start" >>/etc/init.d/start.sh

 

设置固定IP

powershell(管理员)

netsh interface ip add address "vEthernet (WSL)" 192.168.128.254 255.255.255.0

wsl

sudo ip addr add 192.168.128.1/24 broadcast 192.168.128.255 dev eth0 label eth0:1

# 开机自动设置
sudo echo "sudo ip addr add 192.168.128.1/24 broadcast 192.168.128.255 dev eth0 label eth0:1" >>/etc/init.d/start.sh

 

网络访问

win 访问 wsl

telnet localhost 3306

wsl 访问 win

telnet 192.168.128.254 3306

win 局域网远程访问,假设你的局域网IP为192.168.1.1

netsh interface portproxy add v4tov4 listenport=3306 listenaddress=192.168.1.1 connectport=3306 connectaddress=192.168.128.1

# 远程主机
telnet 192.168.1.1 3306

 

环境变量配置

  • /u

win 环境变量传入 linux,这个很好用,即使 wsl 不加载任何用户环境配置也会传入

 

  • /w

linux 变量传入 win

 

  • /p

相互转换win和linux路径

 

 

  •  /l

相互转换win和linux路径列表

 

 

IDE使用WSL

 VS Code

打开WSL远程窗口

 

 

 

 

 

 Jetbrains 全家桶

目前 (2022.1)Jetbrains 家的IDE基本上都支持WSL,下面演示一下怎么用Goland + WSL 进行Golang 开发

下载sdk并配置环境变量

cd /data
wget  https://go.dev/dl/go1.18.1.linux-amd64.tar.gz
tar -zvxf go1.18.1.linux-amd64.tar.gz

 

环境变量推荐使用 WSLENV

powershell

[System.Environment]::SetEnvironmentVariable("GO111MODULE","on","User")
[System.Environment]::SetEnvironmentVariable("GOPATH","\\wsl$\Ubuntu\home\zhangsen\go","User")
[System.Environment]::SetEnvironmentVariable("ENV_NAME","dev","User")

[System.Environment]::SetEnvironmentVariable("WSLENV","GOPATH/p:GO111MODULE/u:ENV_NAME/u","User")

 

新建项目

 

 

 

 

 

 

 

 

 

 

posted @ 2022-04-20 13:55  三木燕  阅读(2054)  评论(0编辑  收藏  举报