※当サイトの記事には、広告・プロモーションが含まれます。

Windows 10 Homeに導入したMSYS2(Minimal SYStem2)にGitを

Msys2(Minimal SYStem2)を前回導入したわけですが、これって一体何者なのか、ちょいとそのへんを調べてみました。

Msys2(Minimal SYStem2)とは

下記の説明が分かりづらいんですが、

MSYS2 は、MSYSのモダンな版へのアップデートであり、ネイティブの Windows ソフトウェアとの相互運用性の目的とした Cygwin (POSIX 互換レイヤー) のフォークです。

この名前は、 Minimal SYStem 2から由来し、MinGW-w64 ツール チェーンを使用して、ネイティブの Windows アプリケーションを構築するためのようなリビジョン コントロール システム、Autotools bash シェルを使用して促進するためにサポートを提供することを目指しています。

パッケージの簡単なインストールを提供するパッケージ管理システムがあり、Arch LinuxPacmanパックマンも移植されます。

これらのパッケージに使用される、ビルド システム (makepkg) を提供するだけでなく、依存関係の解決と単純な完全なシステムのアップグレードなど、多くの強力な機能をもたらします。

32 および 64 ビットがサポートされています。

MSYS2 日本語情報トップページ - OSDN

こちらのサイトの説明によると、 

 これまでもWindowsにはCygwinやMSYS2などUNIXシェルが動作する環境は存在したが、それらが依存するPOSIX互換レイヤーがオーバーヘッドを生じるうえ、ディレクトリ構造がWindowsともUNIXとも異なってしまうなど"クセ"があり、WindowsUNIX由来の機能/コマンドをスムースに利用する仕組みが存在しなかった。

 一方、対比されることが多いOS XmacOS)といえば、ネイティブのBSDレイヤーを持ちSingle UNIX Specificationの認証を受けた「UNIX」であり、LinuxなどのPC-UNIXソースコードレベルで高い互換性を備える。LAMPLinuxApacheMySQL+{PHP|Perl|Python})という言葉があるように、WEBアプリ開発環境をLinux上で構築することが一種のトレンドとして存在するが、同様の環境をOS X上で構築することは難しくない。Windowsでこれを実現しようとなると、仮想マシンを用意したりCygwinに手を入れたりひと苦労で、結構な数のデベロッパーがMacに移行したこともうなずける。

ASCII.jp:Macはもう不要!? - "UNIX使い"狙い撃ちの「Windows Subsystem for Linux」を検証する(前編) (1/2)

Unix系の環境をWindowsでも構築したいってことですかね。Windowsで環境構築の際に不具合が起きやすいのには、理由があったんですね、納得。

最近ちょくちょく目にすることの多くなったBash on Ubuntu on Windows 10 ですが、Windows Subsystem for Linux の機能の1つみたいですね。(Microsoftが頑張ってくれてるみたいですが、まだ安定してないみたいです。)

自分は実行してないのですが、もし、Windows Subsystem for Linux を使う場合は、

Windows 10 Anniversary Update(いろいろ問題が起こってるみたいですね) が実行済みだと、『コントロールパネル』>『プログラム』>『プログラムと機能』>『Windowsの機能の有効化または無効化』で、Windows Subsystem for Linuxにチェックし有効化した後、

f:id:ts0818:20170530085336j:plain

『設定』から、

f:id:ts0818:20170530085340j:plain

『更新とセキュリティ』の

f:id:ts0818:20170530085338j:plain

『開発者向け』>『開発者モード』のラジオボタンにチェックすれば良いようです。

f:id:ts0818:20170530085339j:plain

『はい』を選択すると、いけるみたいです。

f:id:ts0818:20170530085341j:plain

 

Windowsで使えるシェル環境

 Windowsで使えるターミナルとシェルのまとめ - Qiita

⇧  によると、Windowsではこれぐらい利用することができるみたいです。

こんなにあるようです。KUSANAGI Runs on Docker(WordPress高速化環境)のコンテナでbusyboxってのがあったけど、BusyBoxと関係あるのかな?

コマンドプロンプトWindowsUnixとでは意味合いが違うようです。

linux - シェル、ターミナル、コマンドプロンプトの違いを教えてください - スタック・オーバーフロー

WindowsUnixシェル環境

WindowsUnixシェル環境、つまりUnix系のコマンドを使いたい場合、

などがあるようです。

で、前回、Msys2を導入してしまったのでした。

Msys2はデフォルトだと、ターミナルがmintty、シェルがbashという構成で、Msys2(mintty+bash)となってるみたいです。

後述するpacmanを使って、zsh(Z shell)や fish(friendly interactive shell)といったシェルをインストールすることもできるようです。

MSYS2で快適なターミナル生活 - Qiita

Msys2のパッケージマネージャpacman

Pacmanの使い方 - Qiita

⇧  によりますと、pacmanはArch系のLinuxディストリビュージョンで使用されるパッケージマネージャで、 yum、aptにならぶメジャーなパッケージマネージャとして有名らしいです。

pacmanを使って、必要なパッケージをインストールしていくのが良いみたいです。

 

Msys2のパッケージ状況

SYS2 による gcc 開発環境の構築 - Qiita

⇧  Msys2については上記サイトが詳しいです。

前回までで、Msys2のインストールと更新は終了しているので、pacmanで今現在のパッケージの状況を見てみました。

C:¥msys64¥msys2.exe をダブルクリックで起動。

f:id:ts0818:20170530085343j:plain

pacman -Sl でインストール可能なパッケージの一覧が表示できるみたいです。

pacman -Sl

f:id:ts0818:20170530085344j:plain

インストールされてるものはインストール済みと表示されるようです。

f:id:ts0818:20170530085342j:plain

インストール済みのものだけを表示する場合は、 

pacman -Q

でいけるようです。

f:id:ts0818:20170530100214p:plain

autoconf 2.69-3
autoconf2.13 2.13-2
autogen 5.18.4-2
automake-wrapper 10-1
automake1.10 1.10.3-3
automake1.11 1.11.6-3
automake1.12 1.12.6-3
automake1.13 1.13.4-4
automake1.14 1.14.1-3
automake1.15 1.15-2
automake1.6 1.6.3-2
automake1.7 1.7.9-2
automake1.8 1.8.5-3
automake1.9 1.9.6-2
bash 4.4.012-1
bash-completion 2.3-1
bsdcpio 3.2.2-2
bsdtar 3.2.2-2
bzip2 1.0.6-2
ca-certificates 20150426-1
catgets 1.1-2
coreutils 8.26-1
crypt 1.4-1
curl 7.53.1-1
dash 0.5.9.1-1
db 5.3.28-2
diffutils 3.5-1
file 5.30-1
filesystem 2017.02-4
findutils 4.6.0-1
flex 2.6.3-1
gawk 4.1.4-2
gcc-libs 6.3.0-1
gdbm 1.11-3
gettext 0.19.7-3
glib2 2.48.0-1
gmp 6.1.2-1
gnupg 1.4.21-2
grep 3.0-1
gzip 1.8-1
heimdal-libs 1.5.3-9
icu 56.1-1
inetutils 1.9.2-1
info 6.3-1
less 481-1
libarchive 3.2.2-2
libasprintf 0.19.7-3
libassuan 2.4.2-1
libbz2 1.0.6-2
libcatgets 1.1-2
libcrypt 1.4-1
libcurl 7.53.1-1
libdb 5.3.28-2
libedit 3.1-20150325
libexpat 2.2.0-2
libffi 3.2.1-1
libgc 7.2.d-1
libgcrypt 1.6.4-1
libgdbm 1.11-3
libgettextpo 0.19.7-3
libgpg-error 1.25-1
libgpgme 1.6.0-1
libguile 2.0.11-3
libiconv 1.14-2
libidn 1.33-1
libintl 0.19.7-3
libltdl 2.4.6-2
liblzma 5.2.3-1
liblzo2 2.10-1
libmetalink 0.1.2-2
libnettle 3.3-1
libopenssl 1.0.2.k-1
libp11-kit 0.23.2-1
libpcre 8.40-2
libpcre16 8.40-2
libpcre32 8.40-2
libpcrecpp 8.40-2
libpcreposix 8.40-2
libreadline 7.0.003-1
libsqlite 3.10.0.0-1
libssh2 1.7.0-1
libtasn1 4.9-1
libtool 2.4.6-2
libunistring 0.9.6-1
libutil-linux 2.26.2-1
libxml2 2.9.2-3
libxslt 1.1.28-7
lndir 1.0.3-1
m4 1.4.18-1
make 4.2.1-1
mingw-w64-x86_64-binutils 2.28-1
mingw-w64-x86_64-bzip2 1.0.6-6
mingw-w64-x86_64-crt-git 5.0.0.4834.33ee6cab-1
mingw-w64-x86_64-expat 2.2.0-2
mingw-w64-x86_64-gcc 6.3.0-3
mingw-w64-x86_64-gcc-libs 6.3.0-3
mingw-w64-x86_64-gettext 0.19.8.1-2
mingw-w64-x86_64-gmp 6.1.2-1
mingw-w64-x86_64-headers-git 5.0.0.4836.670da35c-1
mingw-w64-x86_64-isl 0.18-1
mingw-w64-x86_64-libgcrypt 1.7.6-1
mingw-w64-x86_64-libgpg-error 1.27-1
mingw-w64-x86_64-libiconv 1.15-1
mingw-w64-x86_64-libmangle-git 5.0.0.4760.d3089b5-1
mingw-w64-x86_64-libsystre 1.0.1-3
mingw-w64-x86_64-libtre-git r128.6fb7206-1
mingw-w64-x86_64-libwinpthread-git 5.0.0.4833.f057c525-1
mingw-w64-x86_64-libxml2 2.9.4-4
mingw-w64-x86_64-libxslt 1.1.29-3
mingw-w64-x86_64-make 4.2.1-1
mingw-w64-x86_64-mpc 1.0.3-2
mingw-w64-x86_64-mpfr 3.1.5.p1-1
mingw-w64-x86_64-ncurses 6.0.20170325-1
mingw-w64-x86_64-pkg-config 0.29.2-1
mingw-w64-x86_64-readline 7.0.003-1
mingw-w64-x86_64-sqlite3 3.18.0-1
mingw-w64-x86_64-termcap 1.3.1-2
mingw-w64-x86_64-tools-git 5.0.0.4760.d3089b5-1
mingw-w64-x86_64-windows-default-manifest 6.4-3
mingw-w64-x86_64-winpthreads-git 5.0.0.4833.f057c525-1
mingw-w64-x86_64-winstorecompat-git 5.0.0.4760.d3089b5-1
mingw-w64-x86_64-xz 5.2.3-1
mingw-w64-x86_64-zlib 1.2.11-1
mintty 1~2.7.3-1
mpfr 3.1.5.1-3
msys2-keyring r9.397a52e-1
msys2-launcher-git 0.3.32.56c2ba7-2
msys2-runtime 2.7.0-1
ncurses 6.0.20170121-1
openssl 1.0.2.k-1
p11-kit 0.23.2-1
pacman 5.0.1-2
pacman-mirrors 20160112-1
pactoys-git r2.07ca37f-1
patch 2.7.5-1
pax-git 20140703.2.1.g469552a-1
pcre 8.40-2
perl 5.24.1-2
pkg-config 0.29.2-1
pkgfile 15-1
rebase 4.4.2-1
sed 4.4-2
tar 1.29-1
texinfo 6.3-1
texinfo-tex 6.3-1
tftp-hpa 5.2-1
time 1.7-1
ttyrec 1.0.8-1
tzcode 2017.b-1
util-linux 2.26.2-1
wget 1.19.1-1
which 2.21-2
xz 5.2.3-1
zlib 1.2.11-1

初期状態で相当なパッケージが入っているようですが、sshとgitなどが入ってないみたいです。

pacman -Ss パッケージ名』でパッケージを検索できるようです。

pacman -Ss openssh
pacman -Ss git

f:id:ts0818:20170530085346j:plain

検索でgitがむちゃくちゃヒットする。

ConEmu から MSYS2 bash を起動

⇩  ちょっと脱線して、Msys2をConEmuから起動したいので、やり方を検索していると、下記サイトで紹介されてました。

MSYS2 による gcc 開発環境の構築 ― MSYS2 のインストールから初期化処理まで — しっぽのさきっちょ | text.Baldanders.info

ConEmuを起動し、左上のアイコンを右クリックし『settings..』を選択。

f:id:ts0818:20170530085351j:plain

 

『Startup』>『Tasks』で『Add default tasks...』を選択したら、{Bash::Msys2-64} が増えた!

f:id:ts0818:20170530085347j:plain

Tasks 設定で MSYS2 の bash を起動するシーケンスを設定することで、 ConEmu から MSYS2 の bash を起動できるようです。

set MSYSTEM=MSYS & chcp 65001 & C:\msys64\usr\bin\bash.exe --login -i -new_console:C:"C:\msys64\msys2.ico"

f:id:ts0818:20170530085348j:plain

 ConEmuで{Bash::Msys2-64}が選択できるように!

f:id:ts0818:20170530085349j:plain

ConEmuでMsys2のbashが使えるように! 

f:id:ts0818:20170530085350j:plain

 

MSYS2とMinGW-w64の関係

Msys2をインストールするとMinGW-w64もインストールされてるという認識で良いのかしら? 

自分も当初混乱しましたが、
  • MSYS2はPOSIXシェル環境を提供するもの
  • MinGW-w64はWindows用のGNU開発環境を提供するもの
と全然別物です。実際、MinGW-w64単独での導入も可能です。その場合は、普通のWindowsアプリケーションと同様に、コマンドプロンプトからの利用が可能です。
ただ、実際にはMSYS2とセットでMinGW-w64を利用することが多いのは、パッケージのインストールにMSYS2のパッケージ管理(pacman)を利用するのが便利だからです。


MSYS2をインストールすると、(64bitの場合)下記の3つのシェルがインストールされます。
これらの違いはパスの設定です。

2. MSYS2 - とりあえず雑記帳

 

MSYS2以外からのパッケージの利用

Msys2とGit for Windowsの共存が難しい理由は、このへんの問題ということですかね。 

pacmanでインストールしたパッケージはWindowsの実行形式なので、MSYS2 Shell以外からでも実行可能です。
但し、インストール先をWindows環境変数PATHに設定してしまうと、同じDLLを利用する、MSYS2以外でインストールしたアプリケーション(Git for WindowsGIMP for Windows等)が誤動作を起こす可能性があります。

この辺の不安を無くすために、コマンドsetlocalを用いたバッチファイルを組んで利用するのをオススメします。

Win64の場合
echo off

setlocal
set PATH=C:\msys64\mingw64\bin;C:\msys64\usr\local\bin;C:\msys64\usr\bin;C:\msys64\bin;%PATH%

(実行するコマンド)

endlocal

2. MSYS2 - とりあえず雑記帳

 

Gitを...

脱線しましたが、Gitを導入したいんでした。

しかし、しか~し、下記サイトによると、Git for Windowsアンインストールする必要なかったかもしれない問題が。 

msys2を更新したらPATH設定が消えた?? - foohogehoge's blog

Kayns Lab. 【MSYS2】環境変数の設定

Windows に Unix ライクな開発環境を構築してみました

ffmpegをwindows向けにビルドした方法 - Qiita

 

Msys2、mingw32、 mingw64

その前に、Msys2をインストールすると、 

  • msys2
  • mingw32
  • mingw64

3つのバイナリ(binary)を含んでいて、それぞれインストール場所も分けられているようです、謎です。

さて、ややこしいことに、MSYS2は、msys2, mingw32, mingw64の3種類のbinaryを含んでおり、それぞれインストール場所も分けられています。

msys2は、(cygwinがそんな感じであるように)msys-2.0.dllというmsys2独自のDLLがリンクされており、MSYS2環境下でしか動かないbinaryです。

mingw32, mingw64はそれぞれwin32, win64のbinaryで、単独で動作します。

gcc等のコンパイラも3種あって、msys2コンパイラで生成したexeはmsys2のDLLに依存しますが、mingw32/64のコンパイラで生成されたexeは単独で動作します。

また、スタートメニューに登録された起動バッチファイルはmsys2_shell.bat, mingw32_shell.bat, mingw64_shell.batの3種類あって、msys2_shell.batから起動するとmsys2なbinaryにしかパスを通しません。

mingw32/64.batで起動すると、mingwとmsys2の両方のbinaryにパスが通され、mingwの方が先に登録されているので優先されます。

なるべく全てのbinaryをwindows nativeにしたかったが、どうしても無理なものだけmsys2依存で作成している、ということだと思います。

kashiの日記

gcc(GNU Compiler Collection)は、元々はC言語コンパイラだったみたいですが、かなり多言語に対応してるみたいです。

pacman -S base-devel
pacman -S msys2-devel
pacman -S mingw-w64-i686-toolchain
pacman -S mingw-w64-x86_64-toolchain

gccを使いたい場合は、インストールしたほうがいいみたいです。(最初にインストールしておくべきパッケージらしいです。)

その後で、いろいろ目的別でインストールするのが良いみたいです。

$ pacman -S vim git openssh unzip rsync

 

開発ツール

なので、Msys2に開発ツール一式をインストールしてみました。ConEmu起動で{Bash::Msys2-64}を開き、下記コマンドを実行。

pacman -S base-devel msys2-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain

 

f:id:ts0818:20170530153947j:plain

空エンター(Enter)押したら、めちゃ警告。

f:id:ts0818:20170530153948j:plain

空エンター(Enter)押す。

f:id:ts0818:20170530153949j:plain

空エンター(Enter)押す。

f:id:ts0818:20170530153950j:plain

『y』を入力して『Enter』

f:id:ts0818:20170530153951j:plain

大丈夫だったのか...エラーにはならなかったけど。

f:id:ts0818:20170530153952j:plain

 

Git導入

Git for WindowsじゃないGitを導入してしまいました、TortoiseGitなどとの連携をちゃんとしてくれるのか不安ではありますが。

pacman -S vim git openssh unzip rsync

f:id:ts0818:20170530153953j:plain

インストール自体はエラーなく終わったよう。 

f:id:ts0818:20170530153954j:plain

ConEmu再起動して、gitのバージョン確認したところ、表示されました。

f:id:ts0818:20170530153955j:plain

やはり、TortoiseGitはエラーに...。いまは亡きGit for Windowsを参照してらっしゃる。

f:id:ts0818:20170530153956j:plain

Gitのためのmsys2インストール | OPC Diary

 ⇧  を参考に『Gitへのパスを設定』

C:¥msys64¥usr¥bin¥git.exe がインストールされてるので、パスを『C:¥msys64¥usr¥bin』に変えてあげればOKのようです。

f:id:ts0818:20170530153959j:plain

変更前

f:id:ts0818:20170530153958j:plain

変更後

f:id:ts0818:20170530153957j:plain

忘れずにルート証明書のインストールもしたほうがいいみたい。が、また警告が。

pacman -S ca-certificates

f:id:ts0818:20170530154000j:plain

再インストールしなくてもよかったのかな?

f:id:ts0818:20170530154001j:plain

 とりあえず、Gitもなんとか導入できたので、次回こそ、ホストOS(Windows)側にwordmoveをインストールして、それが仮想マシン内のdockerコンテナで使えるのか試してみたいと思います。

勢いで導入しちゃいましたが、Git for Windowsを利用したほうが良いようですね。

今回はこのへんで。