Git Bash 下 Pacman 环境配置
如果不是为了跟着经历一遍(折腾自己),直接跳到最后使用 msys2 的最优的方法。
git bash 下 pacman 环境配置
安装 pacman
下载 pacman,解压到 git 的安装目录(D:\Program Files\Git,一定要是 git 的安装根目录,这样解压出来的目录结构和安装 git 时的层次保持一致)。
|
|
此时在 git bash 里运行 pacman
会提示没有软件源相关的配置文件。
error: config file /etc/pacman.d/mirrorlist.mingw32 could not be read: No such file or directory
安装软件源 mirrors
下载源配置包mirrors,一样的,要放到 git 安装的根目录下解压。
|
|
修改相关的配置,使用清华的软件源,重启 git bash,再次运行,提示没有数据库。
|
|
warning: database file for ‘mingw32’ does not exist (use ‘-Sy’ to download) warning: database file for ‘mingw64’ does not exist (use ‘-Sy’ to download) warning: database file for ‘msys’ does not exist (use ‘-Sy’ to download) error: no operation specified (use -h for help)
|
|
提示
:: Synchronizing package databases…
mingw32 760.3 KiB 2.40 MiB/s 00:00 [###################################################################################] 100%
mingw32.sig 438.0 B 428 KiB/s 00:00 [###################################################################################] 100%
warning: Public keyring not found; have you run ‘pacman-key –init’?
error: mingw32: key “4A6129F4E4B84AE46ED7F635628F528CF3053E04” is unknown error: keyring is not writable error: failed to update mingw32 (invalid or corrupted database (PGP signature)) mingw64 761.9 KiB 2.21 MiB/s 00:00 [###################################################################################] 100%
mingw64.sig 438.0 B 0.00 B/s 00:00 [###################################################################################] 100% error: mingw64: key “4A6129F4E4B84AE46ED7F635628F528CF3053E04” is unknown error: keyring is not writable error: failed to update mingw64 (invalid or corrupted database (PGP signature))
msys 273.5 KiB 1581 KiB/s 00:00 [###################################################################################] 100%
msys.sig 438.0 B 428 KiB/s 00:00 [###################################################################################] 100%
error: msys: key “4A6129F4E4B84AE46ED7F635628F528CF3053E04” is unknown
error: keyring is not writable
error: failed to update msys (invalid or corrupted database (PGP signature))
error: failed to synchronize all databases
按提示,先进行初始化。
|
|
再次更新:
|
|
会卡主:
error: mingw32: key “4A6129F4E4B84AE46ED7F635628F528CF3053E04” is unknown
:: Import PGP key 4A6129F4E4B84AE46ED7F635628F528CF3053E04? [Y/n] y
ctrl + c 终止之后,使用 pacman-key 更新 key.
|
|
提示:
==> 错误: 密匙环文件 /usr/share/pacman/keyrings/msys2.gpg 不存在
安装 keyring
下载keyring数据库包,同样的解压。
|
|
再次
|
|
最后
|
|
成功。
:: 正在同步软件包数据库… mingw32 已经是最新版本 mingw64 已经是最新版本 msys 已经是最新版本
如果上述方法还不行,可尝试更新 pacman 所有包的数据库。
|
|
pacman has a record of only some of the contents of the pacman package. Try the following to fix the databse entry for the pacman package.
工具软件安装
tmux
|
|
报错:
error: failed to commit transaction (conflicting files) 错误:无法提交处理 (有冲突的文件)
看来是依赖的文件已经存在,所以冲突了。
pacman 的 --force
选项已经丢弃,使用 --overwrite
选项来代替。
|
|
如果出现以下提示,关闭 git bash,重新打开即可。
dofork: child -1 - forked process 17448 died unexpectedly,
netcat
|
|
最简单直接的方法
直接使用 msys2,git bash 相当于最小化的 msys2。
因为 msys2 内置 pacman
。可以安装完毕 msys2 之后,然后在 msys2 里通过 pacman 安装 git. 这样这一整套环境都通过 pacman 来管理。
|
|
msys2 继承windows环境变量
msys2 没法直接使用已经加入 windows 环境变量 path 中的程序,会提示命名找不到。需要创建一个MSYS2_PATH_TYPE=inherit 的环境变量。
msys2 中 ipython 交互环境
ipython 是安装 anaconda 里带的,直接在 msys2 里使用,会有终端交互的问题,没有高亮,没有补全。
解决办法是在 msys2 里安装 winpty
。
|
|
winpty
安装完毕之后,使用winpty
来启动 ipython
|
|
为了方便,可以在使用别名机制,将 ipython
定义为 winpty ipython
的别名,并且持久化到 /etc/bash.bashrc 文件当中。
# 使用 winpty 来启动 ipython
alias ipython=“winpty ipython”
鼠标右键添加 msys2
关于鼠标右键点击文件夹空白处添加快捷方式参见我之前的博客, 默认从 windows 菜单启动 msys2 时,msys2 中的 shell 环境的当前目录是用户目录,如果想要像 git bash 在鼠标右键中启动,shell 环境是当前文件夹的目录,command 项的值是 D:\msys64\msys2_shell.cmd -here
, 即通过 msys2_shell.cmd
脚本来间接启动 msys2.exe
.
当所有的这些都完成之后,就能愉快的使用 pacman
包管理器了,再也不用单独去这里 下载 git 了。
用户目录的小坑
msys2 会自带 home 目录,在安装目录下的用户 home
目录: D:\msys64\home
,而不像 git bash 使用的 home
目录,是共用 windows 的 home
目录,在系统盘下C:\Users\administrator
, 所以之前在 git bash
的用户目录下.ssh
目录中的 config
和 authorized_keys
文件,都需要从 C:\Users\Administrator\.ssh
迁移到D:\msys64\home\Administrator\.ssh
下。
stdout is not a tty 问题
在 msys2
的 bash
当中,如果遇到
stdout is not a tty
问题,把命令后缀的 .exe 带上即可。