title: "抛弃 WSL2 使用 scoop 搭建开发环境" tags:
之前一直是用 WSL2 来作为开发环境的,博客、数据分析和编程等都在 WSL2 里进行,虽然 WSL2 已经很方便,但是我仍然心里有疙瘩,因为两个原因:Hyper-V 的性能损失和无法自动释放内存/硬盘。
<!--more-->实际上后面两个问题在 2.0.0 的 WSL 中(似乎)已经解决了,在去年的更新中,详情可见 微软开发者 blog,我仔细看了一下,似乎大部分的实质性更新都只在 Windows11 中适用,但是根据描述,部分实验性更新在 Windows10 中是可以用的,毕竟 Windows11 还是太抽象(个人感觉),我最关注的两个功能即内存回收与虚拟硬盘空间释放,似乎在 Windows10 中可用,但我测试了一下,使用 Windows10 LTSC 2021 最新可更新的 WSL,两项功能在 .wslconfig 中可以正常启用,但没有效果。另一大问题就是性能损失问题了,据我个人测试,开启虚拟化之后 Windows 宿主机造成了大约 12%的性能损失。
下图是开虚拟化平台之前的跑分:
下图是开虚拟化平台之后的跑分:
为了保证跑分结果准确,我特意在两种情况下多跑了几次,分值都差不多。主要的损失来自于 CPU,而 CPU12%的性能损失还是挺严重的。
这实际上不是 WSL 的锅,而是因为 Hyper-V,开启虚拟化之后 Windows 宿主机也会变成一个 Hyper-V 的虚拟机,而这个变化通常情况下是无感的,但是 ... 我要打游戏 ...
于是只能去掉 WSL2,使用 scoop 来进行环境搭建。实际上 scoop 超乎了我的预期,它不仅可以装开发软件,甚至微信 QQ 这种日常生活软件也可以安装,而且第三方开发者提供的各种 buckets 包含了极多的软件!
我习惯将所有的软件都装在 C 盘,D 盘只保留个人数据,scoop 也去 C 盘吧。先改一下 powershell 的策略:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
然后安装 scoop,这一步还是上代理吧,gitee 的镜像如同 goushi:
irm get.scoop.sh -outfile 'install.ps1'
.\install.ps1 -ScoopDir 'C:\Scoop' -ScoopGlobalDir 'C:\Scoop' -Proxy 127.0.0.1:7890
装好之后先配置个代理,因为很多安装脚本是从 GitHub 获得的,所以没代理简直用不了:
scoop config proxy 127.0.0.1:7890
习惯了 bash 这类 shell,那么 powershell 也是很不习惯,况且 scoop 添加 buckets 是需要 git 的,所以先装个 git 和 GNU 的核心工具:
scoop install git
scoop install coreutils
然后在装一个 Windows terminal 作为终端来用,并且把默认启动终端改成 git bash:
scoop bucket add extras
scoop install windows-terminal
官方的 buckets 里面只有少数的软件,而我们要想安装其它国人日常使用的软件就需要添加几个 buckets:
scoop bucket add lemon https://github.com/hoilc/scoop-lemon
scoop bucket add dorado https://github.com/chawyehsu/dorado
添加了这三个 buckets 的话,基本上就能安装所有日常使用的软件了,除了一些生物信息学软件和游戏之外,其他的软件我基本都用 scoop 装了,干净也方便~
主要的开发工具还是用 VScode,这玩意是在是万金油,我主要用 R 和 Python,加上现在学 C 语言,都可以用 VScode,C 语言的话用 cmake 插件或者用 gcc 编译即可,Python 更方便,官方插件就可以识别解释器路径,而 R 语言需要配置一下。
在~目录(即用户目录)新建一个 .Rprofile 文件,写入以下内容:
if (interactive() && Sys.getenv("TERM_PROGRAM") == "vscode") {
if ("httpgd" %in% .packages(all.available = TRUE)) {
options(vsc.plot = FALSE)
options(device = function(...) {
httpgd::hgd(silent = TRUE)
.vsc.browser(httpgd::hgd_url(history = FALSE), viewer = "Beside")
})
}
}
安装 languageserver 和 httpgd 包之后就可以很方便的出图了,与 VScode 集成在一起。
再给 CRAN 和 Bioconductor 换源:
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
也就差不多了,哦对了,VScode 默认 shell 是 powershell,也给他换成 bash 吧。找到设置里的terminal.integrated.profiles.windows
,编辑 settings.json,添加一个 bash 的路径:
"Bash":{
"path": "C:\\Scoop\\shims\\bash.exe"
}
再把 bash 设置为默认 shell:
"terminal.integrated.defaultProfile.windows": "Bash",
这里贴一下我的settings.json
吧(这个配置文件里面信息还是比较多的):
{
"workbench.startupEditor": "none",
"security.workspace.trust.enabled": false,
"workbench.colorTheme": "GitHub Dark",
"workbench.iconTheme": "material-icon-theme",
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
},
"Bash":{
"path": "C:\\Scoop\\shims\\bash.exe"
}
},
"terminal.integrated.defaultProfile.windows": "Bash",
"r.rterm.windows": "C:\\Scoop\\shims\\r.exe",
"r.rterm.option": [
"--no-site-file"
],
"r.bracketedPaste": true,
"terminal.integrated.enableMultiLinePasteWarning": false,
"r.lsp.diagnostics": false,
}
Windows Terminal 里用 git bash 的话,退格会有闪屏的情况,vim/vi 也是,这里需要添加一些内容:
echo "set bell-style none" >> ~/.inputrc
echo "set number" >> ~/.vimrc
echo "set noerrorbells" >> ~/.vimrc
echo "set t_vb=" >> ~/.vimrc
直接关闭 Windows Terminal 的时候,bash 没法记住 history,找到C:\Scoop\apps\git\current\etc\bash.bashrc
,添加以下内容:
HISTFILESIZE=400000000
HISTSIZE=10000
PROMPT_COMMAND="history -a"
export HISTSIZE PROMPT_COMMAND
shopt -s histappend
再贴一下我的 scoop 软件列表吧:
Installed apps:
Name Version Source Updated Info
---- ------- ------ ------- ----
7zip 23.01 main 2024-05-04 15:06:19
coreutils 5.97.3 main 2024-05-04 15:07:45
dark 3.14 main 2024-05-04 15:13:18
dismplusplus 10.1.1002.1B extras 2024-05-04 15:11:45
everything 1.4.1.1024 extras 2024-05-04 15:34:35
gcc 13.2.0 main 2024-05-04 15:12:13
gdb 14.1 main 2024-05-04 15:12:24
git 2.45.0 main 2024-05-04 15:07:11
hibit-uninstaller 3.2.10 extras 2024-05-04 16:09:51
hugo 0.125.5 main 2024-05-04 15:12:28
innounp 0.50 main 2024-05-04 15:14:09
irfanview 4.67 extras 2024-05-06 10:30:57
llvm 18.1.4 main 2024-05-05 09:01:43
lxmusic 2.7.0 dorado 2024-05-04 15:12:41
mambaforge 24.3.0-0 extras 2024-05-04 20:01:02
mpv 0.38.0 extras 2024-05-04 15:12:50
neofetch 7.1.0 main 2024-05-04 15:12:51
notepadplusplus 8.6.5 extras 2024-05-04 15:12:55
piclist 2.8.4 lemon 2024-05-04 15:13:15
python 3.12.3 main 2024-05-04 15:13:43
qqnt 9.9.9.240428 dorado 2024-05-04 15:14:07
r 4.4.0 main 2024-05-04 15:35:14
rtools 4.4.6104.6039 main 2024-05-04 15:19:44
snipaste-beta 2.9-Beta dorado 2024-05-04 15:20:01
sumatrapdf 3.5.2 extras 2024-05-04 15:20:05
vim 9.1.0 main 2024-05-04 15:36:11
vimtutor 0.2018.07.25 main 2024-05-04 15:35:15
vscode 1.89.0 extras 2024-05-04 15:20:30
wechat-np nightly-20240504 dorado 2024-05-04 15:21:55
windows-terminal 1.19.11213.0 extras 2024-05-04 15:08:20
yt-dlp 2024.04.09 main 2024-05-04 15:35:21
zotero 6.0.36 extras 2024-05-04 15:22:05
7zip 23.01 main 2024-05-04 15:06:19 Global install
coreutils 5.97.3 main 2024-05-04 15:07:45 Global install
dark 3.14 main 2024-05-04 15:13:18 Global install
dismplusplus 10.1.1002.1B extras 2024-05-04 15:11:45 Global install
everything 1.4.1.1024 extras 2024-05-04 15:34:35 Global install
gcc 13.2.0 main 2024-05-04 15:12:13 Global install
gdb 14.1 main 2024-05-04 15:12:24 Global install
git 2.45.0 main 2024-05-04 15:07:11 Global install
hibit-uninstaller 3.2.10 extras 2024-05-04 16:09:51 Global install
hugo 0.125.5 main 2024-05-04 15:12:28 Global install
innounp 0.50 main 2024-05-04 15:14:09 Global install
irfanview 4.67 extras 2024-05-06 10:30:57 Global install
llvm 18.1.4 main 2024-05-05 09:01:43 Global install
lxmusic 2.7.0 dorado 2024-05-04 15:12:41 Global install
mambaforge 24.3.0-0 extras 2024-05-04 20:01:02 Global install
mpv 0.38.0 extras 2024-05-04 15:12:50 Global install
neofetch 7.1.0 main 2024-05-04 15:12:51 Global install
notepadplusplus 8.6.5 extras 2024-05-04 15:12:55 Global install
piclist 2.8.4 lemon 2024-05-04 15:13:15 Global install
python 3.12.3 main 2024-05-04 15:13:43 Global install
qqnt 9.9.9.240428 dorado 2024-05-04 15:14:07 Global install
r 4.4.0 main 2024-05-04 15:35:14 Global install
rtools 4.4.6104.6039 main 2024-05-04 15:19:44 Global install
snipaste-beta 2.9-Beta dorado 2024-05-04 15:20:01 Global install
sumatrapdf 3.5.2 extras 2024-05-04 15:20:05 Global install
vim 9.1.0 main 2024-05-04 15:36:11 Global install
vimtutor 0.2018.07.25 main 2024-05-04 15:35:15 Global install
vscode 1.89.0 extras 2024-05-04 15:20:30 Global install
wechat-np nightly-20240504 dorado 2024-05-04 15:21:55 Global install
windows-terminal 1.19.11213.0 extras 2024-05-04 15:08:20 Global install
yt-dlp 2024.04.09 main 2024-05-04 15:35:21 Global install
zotero 6.0.36 extras 2024-05-04 15:22:05 Global install
scoop 常用的命令其实也就几个:
scoop install 软件包名 # 安装软件
scoop uninstall 软件包名 # 卸载软件
scoop update 软件包名 # 更新软件
scoop info 软件包名 # 查看软件信息
scoop cache rm * # 清理缓存
scoop update # 更新 scoop 和 buckets
不需要再一个个下载安装包一直点下一步了。总之感觉是挺舒服的~