從cygwin遷移到msys2的原因和步驟
為什麼從cygwin遷移到msys2
習慣Linux後,再使用Windows的話,cygwin基本是必須的。但cygwin有一些痛點:
- 沒有一個好用的包管理工具,無論是官方的setup.exe,還是第三方的幾個apt-cyg,都存在使用不方便和功能不全的問題:
- setup.exe選包很累人
- apt-cyg和它的依賴得額外安裝
- cygwin的已安裝軟體資料庫不區分是直接安裝的還是被依賴的包,一旦裝上想等解除安裝就只能自己手動分辨了
- apt-cyg不支援軟體升級操作,我自己加上了這個功能(goreliu/apt-cyg),雖然基本能用,但還是存在一些問題
- cygwin的軟體打包方式不方便,並且為官方軟體倉庫提交新的包需要走加郵件列表、發郵件、確認、上傳等諸多流程
- cygwin裡不少軟體的版本還是比較老的,比如git還是2.1.4版本的,升級緩慢(一個好訊息是python和ruby最近幾天升級到最新版本了,之前還是python 2.7.8/3.2.2、ruby 2.0.0,盼了好久)
而msys2基本上解決了這些問題:
- 使用從archlinux移植過來的pacman,功能完整,使用方便
- PKGBUILD好寫,用過archlinux的話無學習成本,為官方源提交新包可以直接在github發PR
- msys2裡的軟體總體是要比cygwin新的(一個特例,最近cygwin的ruby升級到了最新的2.2,而msys2的還是2.1)
遷移的麻煩
我幾個月前就在垂涎msys2,但因為幾個麻煩的問題,每次都作罷:
- cygwin是可以使用acl選項掛載檔案系統的,這種情況下chmod基本可用(雖然也有些問題),而msys2只能使用noacl選項掛載,chmod基本無法工作(只能修改第一個w),每個使用者都有檔案的讀許可權,是否有執行許可權根據副檔名和內容決定。直接的影響就是使用git時無法使本地檔案許可權和遠端的一致。
- 我使用的一些軟體cygwin裡有,而msys2裡沒有,比如w3m、dig、atool、bvi、cygstart。
- 有些軟體支援直接在cygwin編譯,而在msys2編譯的話需要打patch。
之前主要是阻塞在第1個問題上了,查了好久如何開啟acl,無果。今天突然想到是否可以讓git忽略本機許可權,果然有方法:
git config core.filemode false
另外還有.ssh目錄無法修改成700的麻煩,好在我不需要在msys2開sshd,可以不考慮這個。那麼許可權的檔案基本就沒有了。
第2個問題就相對好處理了,自己編譯打包了bviplus、atool、w3m、cygutils(裡邊有cygstart)等,因為之前在archlinux就經常自己打包,輕車熟路,PKGBUILD見https://github.com/goreliu/my-MSYS2-Packages。Dig不好編譯,但有現成的可以下載。
第3個問題只是稍微麻煩些,可以寫個指令碼搞定,基本不用考慮。
折騰了一下午,終於遷移了過了,刪掉了cygwin。
步驟
從官網下載最新的安裝包,安裝到c:\msys64。
將之前cygwin的home目錄直接替換到msys64/home
mkpasswd > /etc/passwd; mkgroup > /etc/group
,和cygwin裡一樣註釋掉/etc/fstab中的那一行,保留/cygdrive目錄,以和cygwin一致(可選)
修改/etc/etc/pacman.d/mirrorlist.*,改成國內地址,如http://mirror.bit.edu.cn/msys2/
使用pacman安裝需要的軟體
-
在檔案瀏覽器的郵件新增Open MSYS2 here的選單:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\open_msys2]
@="Open MSYS2 here"[HKEY_CLASSES_ROOT\Directory\Background\shell\open_msys2\command]
@="c:\msys64\usr\bin\mintty.exe /bin/sh -lc 'cd "$(cygpath "%V")"; exec zsh'"[HKEY_CLASSES_ROOT\Folder\shell\open_msys2]
@="Open MSYS2 here"[HKEY_CLASSES_ROOT\Folder\shell\open_msys2\command]
@="c:\msys64\usr\bin\mintty.exe /bin/sh -lc 'cd "$(cygpath "%V")"; exec zsh'" 建立指向
C:\msys64\usr\bin\mintty.exe /usr/bin/zsh --login
的快捷方式,並繫結快捷鍵設定
export MSYS="winsymlinks:lnk"
關鍵變數,不然打軟連直接變成了複製在需要忽略本地檔案許可權的git repo目錄執行
git config core.filemode false
從isc.org下載windows版本的bind,包含host、dig等命令
git clone git@github.com:goreliu/my-MSYS2-Packages.git
,進入需要的目錄,執行makepkg
和pacman -U xxx.tar.xz
安裝自己打的包。
然後環境就和之前的cygwin沒有什麼區別了。
付費解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領域相關問題,靈活定價,歡迎諮詢,微信 ly50247。
相關文章
- 【譯】遷移到Room的7個步驟OOM
- mysql5.1遷移到oracle10.2.0.5步驟MySqlOracle
- JavaScript 專案遷移到 TypeScript 步驟以及遇到的問題JavaScriptTypeScript
- 一次SQL Server遷移到Oracle的實施步驟SQLServerOracle
- 將你的應用遷移到 Python 3 的三個步驟Python
- MySQL5.17異機遷移到MySQL 5.7.23基本步驟MySql
- oracle 10g rac hacmp 遷移到asm實驗步驟Oracle 10gACMASM
- MSYS2、MinGW、Cygwin 關係梳理
- Android 一步步教你從ActionBar遷移到ToolBarAndroid
- 從Perforce遷移到GitGit
- 恆訊科技分析:業務遷移到雲伺服器之前的關鍵步驟伺服器
- 從 golang flag 遷移到 cmdrGolang
- 從 Nginx 遷移到 Envoy ProxyNginx
- AS4 10g 單節點遷移到ASM RAC步驟總結ASM
- [譯]從 SQLite 逐步遷移到 RoomSQLiteOOM
- 從mpvue遷移到uni-appVueAPP
- EF Core從TPH遷移到TPT
- [譯] 從 SQLite 逐步遷移到 RoomSQLiteOOM
- Linode從Xen遷移到KVM
- 將表 從mysql 遷移到oracleMySqlOracle
- 關於資料遷移的方法、步驟和心得
- Azure VM從ASM遷移到ARM(二)ASM
- Azure VM從ASM遷移到ARM(一)ASM
- PayPal從Java遷移到Node.jsJavaNode.js
- 從SpringMVC遷移到SpringbootSpringMVCSpring Boot
- 從 CRUD 遷移到事件溯源的祕訣 - eventstore事件
- oracle asm 儲存 a磁碟組中的資料檔案 遷移到b磁碟組實施步驟OracleASM
- 從過時的 Windows 機器遷移到 LinuxWindowsLinux
- 從單體遷移到微服務的十二種方法微服務
- 平安科技從 Oracle 遷移到 UbiSQL 的實踐OracleSQL
- 從MySQL遷移到VoltDB的一點經驗MySql
- 使用DynamoShake從dynamodb遷移到mongodbMongoDB
- 從檔案系統遷移到ASM上ASM
- oralce 從檔案系統遷移到ASMASM
- 如果需要從Oracle遷移到MS SQLServer (2)OracleSQLServer
- 如果需要從Oracle遷移到MS SQLServer (1)OracleSQLServer
- RCA(根本原因分析)的4個步驟
- 遷移到ASMASM