====== MSYS2でEmacs環境とUNIXライク環境を作る ======
===== 試した環境 =====
* Windows 10 (x64) バージョン2004
* msys2-x86_64-20200903
===== MSYS🤔MSYS2😧MinGW😰Mingw-w64😇 =====
Windows上にUNIXライクな環境を構築するソフト群は、歴史的経緯により、MSYS, MSYS2, MinGW, Mingw-w64 と似たような名前のものが存在している。組み合わせて使われることが多いが、それぞれ独立で動くソフトウェアパッケージである。
当方も詳しくはないので間違ってるかもしれないが、簡単にまとめるとこんな感じ。
* MinGW (Minimalist GNU for Windows)
* 32ビットWindowsネイティブ環境に移植したgccと関連ツールを、Win32 APIを使ったWindowsアプリ開発環境として最小限の構成でまとめたもの。
* MSYS (Minimal SYStem)
* MinGWを補完する目的で作られた、Windowsネイティブ環境向けbash, makeなどのUNIXライクなコマンドシェル環境を提供するもの。
* Mingw-w64
* MinGWからフォークして作られた、追加のWin32 APIや64ビット対応を含むMinGW相当のもの。
* MSYS2
* 64ビットWindowsネイティブ環境向けに、シェル環境を含む、主にUNIX系やオープンソース由来のソフトウェアの配布・構築プラットフォーム。
各ソフトの機能や動作環境を表にするとこんな感じ。
^ ソフト ^ シェル ^ コンパイラ ^ 動作環境 ^^ 開発ターゲット ^^
^ ::: ^ ::: ^ ::: ^ x86 ^ x64 ^ x86 ^ x64 ^
| MinGW | - | ○ | ◎ | ○ | ○ | × |
| MSYS | ○ | - | ◎ | ○ | - | - |
| Mingw-w64 | - | ○ | ◎ | ◎ | ◎ | ◎ |
| MSYS2 | ○ | ○ | × | ◎ | ◎ | ◎ |
実の所、Mingw-w64はMSYS2のパッケージリストに含まれていたりする。
MSYS2にはEmacsやOpenSSH、PuTTYにPythonなど多数のWindows向けバイナリパッケージも含まれているので、64ビット環境ならMSYS2を使う事で簡単に統合的なUNIXライクな環境を作ることができる。MinGW, MSYS, NTEmacs, PuTTYあたりを個別にインストールし頑張って連携させ、それぞれの更新も手動で行っていた頃と比べると隔世の感がある。
===== インストール =====
==== MSYS2 ====
まずはMSYS2をインストールする。
[[https://www.msys2.org/|公式サイト]]からインストーラを取ってきて、これまた公式サイトのスクリーンショット付き解説の通りに進める。といっても、基本は「次へ」ボタンを押してくだけ。最後に「今すぐMSYS2 64bitを実行します。」にチェックを入れて「完了」ボタンを押す。
MSYS2が起動するので、MSYS2のコアシステムとパッケージデータベースを更新する。
$ pacman -Syu
コアシステムに更新があればMSYS2を再起動し、再度パッケージを更新する。
$ pacman -Su
=== ホームディレクトリのマウント設定 ===
OpenSSHのようなホームディレクトリを頑なに'/home/ユーザー名'でアクセスするソフト用に、fstabでマウント設定を行う。
$ notepad /etc/fstab
メモ帳でfstabファイルが開くので、「d:/path/to/home/username /home/username」の1行を追加する。
C:/Home/Decomo /home/Decomo
一度手動でマウントしないと自動マウントされないっぽい?
$ mount /home/Decomo
MSYS2のターミナルを再起動して、正しくマウントされるか確認する。
$ mount
C:/Home/Decomo on /home/Decomo type ntfs (binary,posix=0,user) ★この行があればOK
U:/msys64 on / type ntfs (binary,noacl,auto)
U:/msys64/usr/bin on /bin type ntfs (binary,noacl,auto)
C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)
==== mingw32?mingw64? ====
pacmanでアプリを入れる際、mingw32, mingw64, msysのプレフィックスが付いた同名アプリが出てくることに気付くだろう。例えばemacsならこんな感じで。
$ pacman -Ss emacs
mingw32/mingw-w64-i686-emacs 27.1-1
The extensible, customizable, self-documenting, real-time display editor (mingw-w64)
mingw64/mingw-w64-x86_64-emacs 27.1-1
The extensible, customizable, self-documenting, real-time display editor (mingw-w64)
msys/emacs 26.3-1 (editors)
The extensible, customizable, self-documenting, real-time display editor (msys2)
これらの意味の詳細は見つけられてないが、少なくともmingw32とmingw64はそれぞれ32ビット版、64ビット版を示しているようだ。その後のmingw-w64はビルドに使ったツールチェインの事と思われる。
とりあえずはmingw64の方を使っておけば大丈夫かと。
==== Emacs ====
みんな大好きEmacsをインストール。vim?知らない子ですねぇ…
パッケージ名はmingw64/より後ろを書いてやればよい。
$ pacman -S mingw-w64-x86_64-emacs
MSYS2の環境でイイ感じい使うための設定。
; MSYS2の実行パスを通す。Windowsの環境変数で通していれば不要。
(setenv "PATH" (format "U:/msys64/usr/bin:%s" (getenv "PATH")))
; bashを指定
(setq shell-file-name "U:/msys64/usr/bin/bash.exe")
(setq explicit-shell-file-name shell-file-name)
; NULLデバイスの設定。標準ではWindowsの"NUL"になっており、MSYS2のバイナリで上手く扱えない。
(setq null-device "/dev/null")
==== ssh ====
いわゆるsshコマンドはmsys/opensshパッケージに含まれる。
$ pacman -Ss openssh
PuTTYも準備されているのでお好みで。
$ pacman -Ss mingw-w64-x86_64-putty
===== 参考サイト =====
* [[https://www.msys2.org/|MSYS2]]
* [[http://mingw-w64.org/|Mingw-w64 - GCC for Windows 64 & 32 bits]]
* [[https://stackoverflow.com/questions/25582110/what-is-the-difference-between-mingw-mingw-w64-and-mingw-builds|c++ - What is the difference between MinGW, MinGW-w64 and MinGW-builds? - Stack Overflow]]
* [[https://sites.google.com/site/toriaezuzakki/msys2?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F]]
* [[https://gist.github.com/ubnt-intrepid/05dab5f0f88bd3baf1a1|MSYS2の使い方の備忘録 (2016年度3月版)]]