JiaoYuan's Blog

抛弃 WSL2 使用 scoop 搭建开发环境

之前一直是用 WSL2 来作为开发环境的,博客、数据分析和编程等都在 WSL2 里进行,虽然 WSL2 已经很方便,但是我仍然心里有疙瘩,因为两个原因:Hyper-V 的性能损失和无法自动释放内存/硬盘。

实际上后面两个问题在 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
layout: post
----              -------          ------ -------             ----
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

不需要再一个个下载安装包一直点下一步了。总之感觉是挺舒服的~