【注意】最后更新于 September 21, 2021,文中内容可能已过时,请谨慎使用。
前言
- 因为 macbook pro 本性能不够(主要是没有独显带不动双 4k 有点卡),又摸了个 r9000p 当然这个也完全只能装 windows10 了。
- 所以需要在 windows10 上重新配置开发环境,这篇博文讲我的终端配置历程,主要是在 windows10 上使用 zsh。
一、使用 cygwin
cygwin 是一个方案,我安装以后使用 apt-cyg
安装了 zsh
,单用 zsh
还好,加上 ohmyzsh 就会启动卡上 10~20s,不知道为什么,后面放弃了。 后面使用官方的安装工具去装倒是比较正常了,和下面的 msys2
差不多,但是有文件权限,而且 tmux 的渲染还算正常,msys2
的 tmux
渲染有些显示上的问题。
二、使用 git-sdk
git-sdk 是基于 git-for-windows
的一个方案,但是在我使用的时候,由于更新频繁,bug 很多,安装了 zsh 也经常出现启动 zsh+ohmyzsh 出现各种命令不存在,这个也是没法在日常中使用的。
三、使用 git-for-windows
git-for-windows 是使用 msys2
制作的一个 windows10 的一个 git 发行版里面带有 bash
和一些基础的命令,但是并没有 zsh
,我是在看到 这篇博文 时发现 msys2
的包可以直接用。
下载 msys2
包管理器需要的资源包
1
2
3
4
5
6
7
| curl -o pacman-6.0.0-7-x86_64.pkg.tar.zst -L https://mirror.msys2.org/msys/x86_64/pacman-6.0.0-7-x86_64.pkg.tar.zst
curl -o pacman-mirrors-20210706-1-any.pkg.tar.zst -L https://mirror.msys2.org/msys/x86_64/pacman-mirrors-20210706-1-any.pkg.tar.zst
curl -o msys2-keyring-1~20210213-2-any.pkg.tar.zst -L https://mirror.msys2.org/msys/x86_64/msys2-keyring-1~20210213-2-any.pkg.tar.zst
# 正常来说只需要上面三个包但是由于缺少 zstd 解压工具还需要 zstd 包
curl -o zstd-1.5.0-1-x86_64.pkg.tar.zst -L https://mirror.msys2.org/msys/x86_64/zstd-1.5.0-1-x86_64.pkg.tar.zst
# 但是又因为 zstd 包也是 zstd 打包又需要另一个不是 zstd 打包的解压工具来解压
curl -o zstd-v1.50.win64.zip -L https://github.com/facebook/zstd/releases/download/v1.5.0/zstd-v1.5.0-win64.zip
|
解压并安装这几个包
1
2
3
4
5
6
| unzip ./zstd-v1.50.win64.zip "zstd-v1.5.0-win64/zstd.exe" -d .
./zstd-v1.5.0-win64/zstd.exe -d -o zstd-1.5.0-1-x86_64.pkg.tar zstd-1.5.0-1-x86_64.pkg.tar.zst
tar -xvf zstd-1.5.0-1-x86_64.pkg.tar -C /
tar -xvf msys2-keyring-1~20210213-2-any.pkg.tar.zst -C /
tar -xvf pacman-mirrors-20210706-1-any.pkg.tar.zst -C /
tar -xvf pacman-6.0.0-7-x86_64.pkg.tar.zst -C /
|
pacman, pacman-mirrors, msys2-keyring
安装完成后就可以执行 pacman
了,但是依旧不能用来装软件,直接更新包数据库会报以下错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| $ pacman -Sy
警告:找不到公钥环。你执行 'pacman-key --init' 了吗?
:: 正在同步软件包数据库...
mingw32 1373.2 KiB 457 KiB/s 00:03 [###########################] 100%
mingw64 1380.4 KiB 429 KiB/s 00:03 [###########################] 100%
ucrt64 1521.1 KiB 496 KiB/s 00:03 [###########################] 100%
clang64 1357.2 KiB 458 KiB/s 00:03 [###########################] 100%
msys 374.0 KiB 189 KiB/s 00:02 [###########################] 100%
错误:mingw32: 密钥 "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" 未知
错误:密钥环不可写
错误:mingw64: 密钥 "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" 未知
错误:密钥环不可写
错误:ucrt64: 密钥 "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" 未知
错误:密钥环不可写
错误:clang64: 密钥 "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" 未知
错误:密钥环不可写
错误:msys: 密钥 "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" 未知
错误:密钥环不可写
错误:failed to synchronize all databases (无效或已损坏的数据库 (PGP 签名))
|
需要执行以下命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| $ pacman-key --init && pacman-key --populate msys2
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
==> 正在生成 pacman 主密钥。这可能需要一段时间。
gpg: Generating pacman keyring master key...
gpg: key 9AC158487D6E37D6 marked as ultimately trusted
gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/etc/pacman.d/gnupg/openpgp-revocs.d/BC2F4FC1BC5EE78C37AA2AC89AC158487D6E37D6.rev'
gpg: Done
==> 正在更新可信数据库...
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
==> 正在从 msys2.gpg 添加密匙...
==> 正在本地签名密匙环中的可信密匙...
.........
|
再次执行就能正常了
1
2
3
4
5
6
7
| $ pacman -Sy
:: 正在同步软件包数据库...
mingw32 1373.2 KiB 457 KiB/s 00:03 [###########################] 100%
mingw64 1380.4 KiB 429 KiB/s 00:03 [###########################] 100%
ucrt64 1521.1 KiB 496 KiB/s 00:03 [###########################] 100%
clang64 1357.2 KiB 458 KiB/s 00:03 [###########################] 100%
msys 374.0 KiB 189 KiB/s 00:02 [###########################] 100%
|
先把 pacman
写入 pacman 数据库防止后面需要更新 pacman
但是又因为 pacman.exe
是主进程无法退出,bash
也会,听说有办法但是没有找到对应的方法都没生效。
1
| $ pacman -S pacman --dbonly
|
然后就正常的通过 pacman
工具安装 zsh
就行了。
1
| $ pacman -S zsh --overwrite "*"
|
四、使用 msys2
msys2 实际上 git-windows
都是基于这个 msys2 的,倒是不用处理上面的那些问题了,就是占用空间有点大,顺便一提 msys2
的软件包里的文件连接方式都是硬链接,导致一个 git 包本来不到 10m 的直接变成几百m了。
五、使用 wsl
wsl1 和 wsl2 都个有优点,自行选择,由于是直接为 linux 比起上面的模拟方案几乎不存在各种奇怪的问题,像 cygwin 经常各种工具执行不正常,msys2 倒是还算正常但是执行速度比正常的 linux 差上好几个档次(fish 的 git 补全会卡到 7s 以后)。
参考
文章作者
上次更新
2021-09-21 12:03:50 +08:00
(58921da)
许可协议
CC BY-NC-ND 4.0