WSL2 Ubuntu 快速配置清单
写于 2020-06-17 |
本文原本是一系列文档的一部分,这里先做精简整理,提前发出来。后续可能不会更新,请注意日期。 |
启用 WSL2
条件:
-
Windows 10 20H1 (2004) 或更高版本,不限专业版或家庭版;
-
在 BIOS/UEFI 中开启虚拟化相关功能(Intel VT-x、AMD SVM 等)。
# 开启 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 开启虚拟机平台
# 相当于开启 Hyper-V,会影响 VMware、VBox
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启 Windows。
# 设置 WSL 默认版本为 2
wsl --set-default-version 2
使用 Windows Terminal
https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701
WT 会自动添加 WSL Ubuntu 相关项,你只需要配置一下默认启动目录即可:
// 为 Ubuntu 项添加启动目录配置 // 别忘了给上一行尾添加逗号 "startingDirectory": "//wsl$/Ubuntu/home/【你的Ubuntu用户名】/"
你也可以配置 WT 默认启动 WSL,而不是 PowerShell:
"defaultProfile": "【你刚改的Ubuntu Profile的GUID】",
保存即可,立即生效。
WSL2 Ubuntu 基础配置
以下命令在 WSL2 Ubuntu (Bash) 中执行。
配置代理
希望你在 Windows 下已经配置好代理,一个流畅的代理能让你省去太多无谓的烦恼。
目前版本的 WSL2 尚未打通双向端口映射,只打通了虚拟机→物理机的映射,因此配置代理 http://127.0.0.1:1080
无效。
这里用到了一个取巧的办法,需要安装 Docker Desktop for Windows。 此外,你的代理软件也需要允许局域网连入。
# 写入到全局环境变量(会覆盖原文件)
sudo tee /etc/profile.d/proxy.sh >/dev/null <<'EOF'
export HTTP_PROXY=http://host.docker.internal:1080
export HTTPS_PROXY=$HTTP_PROXY
export http_proxy=$HTTP_PROXY
export https_proxy=$HTTP_PROXY
export NO_PROXY="localhost,*.local,*.internal,[::1],fd00::/7,
10.0.0.0/8,127.0.0.0/8,169.254.0.0/16,172.16.0.0/12,192.168.0.0/16,
10.*,127.*,169.254.*,172.16.*,172.17.*,172.18.*,172.19.*,172.20.*,
172.21.*,172.22.*,172.23.*,172.24.*,172.25.*,172.26.*,172.27.*,
172.28.*,172.29.*,172.30.*,172.31.*,172.32.*,192.168.*,
*.cn,*.aliyun.com,*.aliyuncs.com,*.alibabacloud.com,
mirrors.aliyun.com,*.taobao.org,npm.taobao.org,
*.163.com,mirrors.163.com,hub-mirror.c.163.com,
*.daocloud.io,daocloud.io,hub.daocloud.io,
*.ruby-china.com"
export no_proxy=$NO_PROXY
EOF
配置国内软件源
这可以说是 Ubuntu 的固定仪式了。
sudo sed -i.bak "s#archive.ubuntu.com#mirrors.aliyun.com#g;s#security.ubuntu.com#mirrors.aliyun.com#g" /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y && sudo apt autoremove
如果更新过程中有提示(是否重启服务),选 Yes
就行。
完成后按 Ctrl + D
退出 WSL Bash。
这样下次启动终端时会重新执行启动脚本,使新环境变量即生效。
WSL2 第二次启动非常快,因此下文中均不含更新环境变量的命令,全部退出重进完事。
WSL Java 开发环境配置
如果你裸连 GitHub 非常慢,那么前面配置的代理就有用了。
使用 SDKMAN! 安装 AdoptOpenJDK
其他 OpenJDK 同理。
# 列出当前可用 JDK/JRE
sdk list java
# 安装指定版本
# 此处选用 AdoptOpenJDK-OpenJ9
sdk install java 11.0.7.j9-adpt
# 查看已安装版本
sdk list java | grep installed
# 在当前环境(终端)中使用某个版本
sdk use java 11.0.7.j9-adpt
# 设置默认版本
sdk default java 11.0.7.j9-adpt
使用 SDKMAN! 安装 GraalVM
# 安装 GraalVM “基本款”
sdk install java 20.1.0.r11-grl
# 查看 GraalVM 所有可用组件
gu available
# 安装原生镜像工具
gu install native-image
# 安装 LLVM 工具
gu install llvm-toolchain
# LLVM 工具的临时环境变量
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)
完成后按 Ctrl + D
退出 WSL Bash,再开个新的命令行终端。
映射 Maven 与 Gradle 目录
我们完全可以让 Windows 与 WSL 下共用一套 jar 包缓存,通过一个软链接解决:
ln -sf /mnt/c/Users/【你的Windows用户名】/.m2 ~/.m2
ln -sf /mnt/c/Users/【你的Windows用户名】/.gradle ~/.gradle
注意修改 【你的Windows用户名】
。
配置 Maven 镜像源
如果你在 Windows 下没有配置 Maven 镜像源,那么在 Linux 下配置一次即可。
cat > ~/.m2/settings.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置 Maven 使用阿里云的镜像 -->
<!-- 请将本文件置于: ~/.m2/settings.xml -->
<settings>
<mirrors>
<mirror>
<id>aliyun-public</id>
<name>Aliyun Maven Central and JCenter</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central,jcenter</mirrorOf>
</mirror>
</mirrors>
</settings>
EOF
配置 Gradle 镜像源
如果你在 Windows 下没有配置 Gradle 镜像源,那么在 Linux 下配置一次即可。
cat > ~/.gradle/init.d/mirrors.init.gradle.kts <<'EOF'
// 配置本地 Gradle 全局使用 Maven 镜像源
// 请将本文件置于: ~/.gradle/init.d/mirrors.init.gradle.kts
settingsEvaluated {
allprojects {
repositories {
maven("https://maven.aliyun.com/repository/public/")
maven("https://maven.aliyun.com/repository/spring")
maven("https://maven.aliyun.com/repository/google")
// 关于 mavenLocal()
// 如果你在别的地方看见过 mavenLocal() 作为“缓存”仓库项,这里要明确纠正
// Gradle 不推荐启用本地 Maven 源,更不推荐将其置于第一位
// 1. 本地 Maven 本质上是 Maven 自己专用的 Cache,Gradle 无法对其溯源(无法得知是否完整、是否被篡改)
// 2. 因此 Gradle 不会对本地 Maven 进行缓存操作,这将会降低构建速度
// 3. 只有在真正需要本地制品仓库(即:发布到本地)的情况下,才启用 mavenLocal()
// 信息来源: https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:case-for-maven-local
}
}
pluginManagement {
repositories {
maven("https://maven.aliyun.com/repository/gradle-plugin")
maven("https://maven.aliyun.com/repository/spring-plugin")
}
}
}
EOF
WSL NodeJS 开发环境配置
Node.js 和 npm 在 WSL 下用起来爽过 macOS/Linux(用崩了就重装呗,反正快),这也是 WSL 的一大出发点(争取前端开发者)。
而且 JetBrains 系的 IDE 支持远程调用 WSL 中的 Node 和 npm。 VSCode 就更不用说了。
安装 NVM
# 安装 NVM
# 更新 NVM 也使用相同命令
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
# 退出登录
exit
安装时会添加环境变量,我们也不跑命令了,直接开个新的 WSL 窗口,保证新的环境变量已生效。
安装 NodeJS
# Ubuntu 默认有 python3 但出于兼容性没有关联 python 命令……
alias python=python3
# 从淘宝 node 源安装最新 LTS 版 NodeJS
# 更新 NodeJS LTS 也使用相同命令
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node nvm install --lts
# 配置 NPM 镜像(可省略,现在官方也挺快)
# 用淘宝源会无法使用 npm search 功能
npm config set registry https://registry.npm.taobao.org/
# 全局更新 npm
npm update -g
WSL Go 开发环境配置
gvm 就行,别整 homebrew。
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
# 直接开个新终端
# 列出当前可用版本
gvm listall
# 选一个当前最新版本,这里以 1.14 为例
gvm install go1.14.4 --prefer-binary
gvm use go1.14.4 [--default]
结语
WSL 有个好处,可以快速复现一个自己习惯的环境。 用着不爽?搞崩了?懒得一个一个更新?直接重做就是。
也正如此,不建议把 WSL 整得太复杂,最好有一份自己的脚本/文档(比如参考本文),便于随时能重新部署一个全新、干净的环境。
什么?你还想安装 MySQL?别闹,用 Docker!