MSYS2——Windows平台下模擬linux環境的搭建


最近從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:\msys2x86\home\yourname\.*" +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='\[\033]0;$MSYSTEM:\w $(__git_ps1 "(%s)")\007
\033[32m\]\u@\h \[\033[33m\]\w \033[36m\]$(__git_ps1 "(%s)")\033[0m\]
$ '

重新啟動msys2(實際上為mingw32.exe)則可以實現如上圖示。如果進入普通文件夾,則不會出現git的狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM