最近從MSYS1.0遷移到了MSYS2.0,簡單講,MSYS2.0功能更強大,其環境模拟更加符合linux。雖然本身來自cygwin,但其內建了pacman軟體管理工具,很有linux範,并且可以直接手動添加Mingw原生編譯工具集。當下git代碼托管最為紅火,其在win平台所使用的linux模拟環境就是msys2.0,從此角度,msys2.0将取代msys1.0成為主流。
1)下載下傳MSYS2.0并安裝
MSYS2的官網為http://msys2.github.io/,但是其下載下傳速度太慢,推薦使用國内的源進行下載下傳,例如使用中科院源http://mirrors.ustc.edu.cn/msys2。根據電腦系統,可以選擇32位(i686版)以及64位(x86_64)。其中32位版本可以運作在32和64位windows中,但64位版msys2隻能運作在64位windows中,我選擇的是32位版本(i686),電腦系統是win7x64(注意,使用32版本msys2仍然可以編譯64位的程式,隻需要mingw編譯工具支援64即可)。對于使用鏡像源的朋友,可以進入/msys2/distrib/下載下傳最新版本。可以選擇安裝包,也可以選擇壓縮包。
安裝完後的目錄清單如下:
總用量 24029
-rw-r--r-- 1 Domain Users 68 三月 30 2016 autorebase.bat
drwxr-xr-x 1 Domain Users 0 十二 28 18:55 bin
-rw-r--r-- 1 Domain Users 915 十二 27 21:39 components.xml
drwxr-xr-x 1 Domain Users 0 十二 27 21:38 dev
drwxr-xr-x 1 Domain Users 0 十二 27 22:52 etc
drwxr-xr-x 1 Domain Users 0 一月 4 11:08 home
-rw-r--r-- 1 Domain Users 6965 十二 27 21:39 InstallationLog.txt
-rw-r--r-- 1 Domain Users 2070564 十二 27 21:39 maintenancetool.dat
-rwxr-xr-x 1 Domain Users 22021168 十二 27 21:39 maintenancetool.exe
-rw-r--r-- 1 Domain Users 4200 十二 27 21:39 maintenancetool.ini
drwxr-xr-x 1 Domain Users 0 十二 28 10:29 mingw32
-rwxr-xr-x 1 Domain Users 50822 九月 8 02:37 mingw32.exe
-rw-r--r-- 1 Domain Users 154 九月 8 02:37 mingw32.ini
drwxr-xr-x 1 Domain Users 0 十二 28 10:30 mingw64
-rwxr-xr-x 1 Domain Users 50822 九月 8 02:37 mingw64.exe
-rw-r--r-- 1 Domain Users 154 九月 8 02:37 mingw64.ini
-rwxr-xr-x 1 Domain Users 50822 九月 8 02:37 msys2.exe
-rw-r--r-- 1 Domain Users 25758 七月 19 13:05 msys2.ico
-rw-r--r-- 1 Domain Users 151 九月 8 02:37 msys2.ini
-rw-r--r-- 1 Domain Users 5307 七月 19 13:05 msys2_shell.cmd
-rw-r--r-- 1 Domain Users 362 十二 27 21:39 network.xml
dr-xr-xr-x 9 Domain Users 0 一月 4 18:50 proc
drwxr-xr-x 1 Domain Users 0 一月 4 18:50 tmp
drwxr-xr-x 1 Domain Users 0 十二 27 22:46 usr
drwxr-xr-x 1 Domain Users 0 十二 27 21:37 var
其中mingw32和mingw64為空檔案夾,可以直接拷貝任意版本的mingw編譯工具集。執行mingw32.exe會預設将mingw32挂在/mingw下,即使用mingw32進行編譯;反之亦然。執行msys2.exe則進入原版msys2的環境,如需要mingw,則需要使用pacman進行安裝。推薦使用mingw32/64。(下面msys2環境均指從Mingw32/64.exe中啟動的環境,并非原始msys2.exe的啟動環境)
2)配置msys2環境
首次進入,會自動在/home/中添加目前電腦使用者的使用者名作為模拟環境的使用者,并建立預設的配置檔案,以“.”開頭:
-rw-r--r-- 1 Domain Users 77 十二 28 11:48 .bash_logout
-rw-r--r-- 1 Domain Users 1255 七月 19 13:05 .bash_profile
-rw-r--r-- 1 Domain Users 6523 十二 30 14:17 .bashrc
-rw-r--r-- 1 Domain Users 3272 七月 19 13:05 .inputrc
-rw-r--r-- 1 Domain Users 148 十二 30 16:29 .minttyrc
-rw-r--r-- 1 Domain Users 1574 七月 19 13:05 .profile
msys2使用mintty作為終端模拟,該軟體比windows自帶的cmd界面更加優秀,并且支援多種編碼方式,可以随時調節視窗大小,設定字型等。該軟體配置檔案為.minttyrc,下面是我的配置:
$ cat .minttyrc
BoldAsFont=-1
CursorColour=0,255,64
CursorType=block
Font=Consolas
FontHeight=12
Locale=zh_CN
Charset=UTF-8
Columns=120
Rows=30
Term=xterm-256color
因為msys2下面絕大多數軟體均使用utf-8編碼,是以建議使用utf-8字元編碼。這樣就會造成使用windows自帶的軟體(如ping,ipconfig等)會顯示亂碼。不用擔心,使用iconv進行實時轉換編碼,例如:
ping www.cnblogs.com | iconv -f gbk -t utf-8
即可正常顯示中文字元,為了友善使用,可以定義一個别名:“alias win='iconv -f gbk -t utf-8'”,以後當使用win的程式時,隻需要在指令後面加入“|win”即可正常顯示。
由于linux預設将.開頭的檔案視為隐藏,但是win則不然,這樣就會在~目錄下面建立各種以點開頭的檔案和檔案夾,為了隐藏次檔案,可以使用win自帶的attrib指令進行隐藏。具體為:
attrib +h +s /S /D /home/user/.*
由于運作環境的問題,如果在msys2下運作則會失敗,請在輸入windows下的正确路徑名。也可以添加到.bashrc中,具體為:
attrib.exe "c:msys2x86homeyourname.*" +h +s //S //D
其中“//”為轉義/,在每次啟動後,自動隐藏.*檔案和檔案夾。
3)安裝必要軟體
msys2最大的優點就是內建pacman軟體管理器,可以友善的對軟體進行安裝與解除安裝。與ArchLinux一樣,pacman會自動安裝依賴包,pacman的基本指令如下:
pacman -S package_name#安裝軟體包
pacman -R package_name#删除軟體包
pacman -Rs package_name#順便删除軟體包相關依賴
pacman -Syu #更新系統中的所有包
pacman -Ss package#查詢軟體包
pacman -Qs package#查詢已安裝的包
pacman -Qi package#顯示查找的包的資訊
pacman -Ql package#顯示你要找的包的檔案都安裝的位置
pacman -Sw package#下載下傳但不安裝包
pacman -U /path/package.pkg.tar.gz #安裝本地包
pacman -Scc#清理包緩存,下載下傳的包會在/var/cache 這個目錄
pacman -Sf pacman#重新安裝包
由于預設msys2使用國外的軟體源,速度很慢,經常下載下傳一半就失敗了,可以更換成國内源,以中科院的為例,在/etc/pacman.d/中有三個mirrorlist檔案,分别為mingw32,mingw64以及msys的源,具體配置如下:
##
## MSYS2 repository mirrorlist
##
## Primary
## msys2.org
## 中國科學技術大學開源軟體鏡像
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
##
## 32-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
## 中國科學技術大學開源軟體鏡像
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/i686
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
##
## 64-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
## 中國科學技術大學開源軟體鏡像
Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
若使用其他源,請根據源說明添加。
下面是我安裝的軟體供參考:
autoconf
autogen
automake
colordiff
cscope
ctags
git
mercurial
nasm
openssh
openssl
p7zip
subversion
tar
xz
yasm
zip
unzip
注意:請不要安裝gcc或mingw的軟體,建議使用其他版本的mingw,pacman軟體倉庫中的是gcc5,推薦使用http://xhmikosr.1f0.de/tools/msys的版本,我使用的是MSYS_MinGW-w64_GCC_483_x86-x64,下載下傳解壓後,直接将mingw提取出,覆寫到Msys2/mingw32即可。
4)定制個性标題和指令前導符
經常使用git的使用者,必定對于此界面很熟悉:

如何在标題動态的顯示目前git的branch和更改狀态呢?很簡單,從git源碼中提提取出git-completion.sh以及git-prompt.sh,放在~下面,并将其重命名為點開頭,以進行隐藏,然後在.bashrc中增加如下代碼:
# Git Completion which extract from git source/contrib/completion
source ~/.git-completion.sh
source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export GIT_PS1_SHOWUNTRACKEDFILES=1
export GIT_PS1_SHOWUPSTREAM="verbose git svn"
export PS1='[ 33]0;$MSYSTEM:w $(__git_ps1 "(%s)") 07
33[32m][email protected] [ 33[33m]w 33[36m]$(__git_ps1 "(%s)") 33[0m]
$ '
重新啟動msys2(實際上為mingw32.exe)則可以實作如上圖示。如果進入普通檔案夾,則不會出現git的狀态。