Msys2(Minimal SYStem2)を前回導入したわけですが、これって一体何者なのか、ちょいとそのへんを調べてみました。
Msys2(Minimal SYStem2)とは
下記の説明が分かりづらいんですが、
MSYS2 は、MSYSのモダンな版へのアップデートであり、ネイティブの Windows ソフトウェアとの相互運用性の目的とした Cygwin (POSIX 互換レイヤー) のフォークです。
この名前は、 Minimal SYStem 2から由来し、MinGW-w64 ツール チェーンを使用して、ネイティブの Windows アプリケーションを構築するためのようなリビジョン コントロール システム、Autotools bash シェルを使用して促進するためにサポートを提供することを目指しています。
パッケージの簡単なインストールを提供するパッケージ管理システムがあり、Arch LinuxのPacmanパックマンも移植されます。
これらのパッケージに使用される、ビルド システム (makepkg) を提供するだけでなく、依存関係の解決と単純な完全なシステムのアップグレードなど、多くの強力な機能をもたらします。
32 および 64 ビットがサポートされています。
こちらのサイトの説明によると、
これまでもWindowsにはCygwinやMSYS2などUNIXシェルが動作する環境は存在したが、それらが依存するPOSIX互換レイヤーがオーバーヘッドを生じるうえ、ディレクトリ構造がWindowsともUNIXとも異なってしまうなど"クセ"があり、WindowsでUNIX由来の機能/コマンドをスムースに利用する仕組みが存在しなかった。
一方、対比されることが多いOS X(macOS)といえば、ネイティブのBSDレイヤーを持ちSingle UNIX Specificationの認証を受けた「UNIX」であり、LinuxなどのPC-UNIXとソースコードレベルで高い互換性を備える。LAMP(Linux+Apache+MySQL+{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にチェックし有効化した後、
『設定』から、
『更新とセキュリティ』の
『開発者向け』>『開発者モード』のラジオボタンにチェックすれば良いようです。
『はい』を選択すると、いけるみたいです。
Windowsで使えるシェル環境
Windowsで使えるターミナルとシェルのまとめ - Qiita
⇧ によると、Windowsではこれぐらい利用することができるみたいです。
- Msys2(Minimal SYStem2)
- Git for Windows
- Cygwin
- gnupack
- Babun
- PowerShell
- Bash on Ubuntu on WIndows
- BusyBox
- Gow(Gnu On Windows)
- UnxUtils
- clink
- NYAGOS(Nihongo Yet Another GOing Shell)
こんなにあるようです。KUSANAGI Runs on Docker(WordPress高速化環境)のコンテナでbusyboxってのがあったけど、BusyBoxと関係あるのかな?
コマンドプロンプトはWindowsとUnixとでは意味合いが違うようです。
・linux - シェル、ターミナル、コマンドプロンプトの違いを教えてください - スタック・オーバーフロー
WindowsでUnixシェル環境
WindowsでUnixシェル環境、つまりUnix系のコマンドを使いたい場合、
- Git for Windows
- Cygwin
- Msys2(Minimal SYStem2)
- Gow(Gnu On Windows)
- Windows Subsystem for Linux(2017年5月30日現在 beta版)
などがあるようです。
で、前回、Msys2を導入してしまったのでした。
Msys2はデフォルトだと、ターミナルがmintty、シェルがbashという構成で、Msys2(mintty+bash)となってるみたいです。
後述するpacmanを使って、zsh(Z shell)や fish(friendly interactive shell)といったシェルをインストールすることもできるようです。
Msys2のパッケージマネージャpacman
⇧ によりますと、pacmanはArch系のLinuxディストリビュージョンで使用されるパッケージマネージャで、 yum、aptにならぶメジャーなパッケージマネージャとして有名らしいです。
pacmanを使って、必要なパッケージをインストールしていくのが良いみたいです。
Msys2のパッケージ状況
⇧ Msys2については上記サイトが詳しいです。
前回までで、Msys2のインストールと更新は終了しているので、pacmanで今現在のパッケージの状況を見てみました。
C:¥msys64¥msys2.exe をダブルクリックで起動。
pacman -Sl でインストール可能なパッケージの一覧が表示できるみたいです。
pacman -Sl
インストールされてるものはインストール済みと表示されるようです。
インストール済みのものだけを表示する場合は、
pacman -Q
でいけるようです。
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
検索でgitがむちゃくちゃヒットする。
ConEmu から MSYS2 bash を起動
⇩ ちょっと脱線して、Msys2をConEmuから起動したいので、やり方を検索していると、下記サイトで紹介されてました。
・MSYS2 による gcc 開発環境の構築 ― MSYS2 のインストールから初期化処理まで — しっぽのさきっちょ | text.Baldanders.info
ConEmuを起動し、左上のアイコンを右クリックし『settings..』を選択。
『Startup』>『Tasks』で『Add default tasks...』を選択したら、{Bash::Msys2-64} が増えた!
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"
ConEmuで{Bash::Msys2-64}が選択できるように!
ConEmuでMsys2のbashが使えるように!
MSYS2とMinGW-w64の関係
Msys2をインストールするとMinGW-w64もインストールされてるという認識で良いのかしら?
と全然別物です。実際、MinGW-w64単独での導入も可能です。その場合は、普通のWindowsアプリケーションと同様に、コマンドプロンプトからの利用が可能です。
ただ、実際にはMSYS2とセットでMinGW-w64を利用することが多いのは、パッケージのインストールにMSYS2のパッケージ管理(pacman)を利用するのが便利だからです。
MSYS2以外からのパッケージの利用
Msys2とGit for Windowsの共存が難しい理由は、このへんの問題ということですかね。
但し、インストール先をWindowsの環境変数PATHに設定してしまうと、同じDLLを利用する、MSYS2以外でインストールしたアプリケーション(Git for WindowsやGIMP for Windows等)が誤動作を起こす可能性があります。
この辺の不安を無くすために、コマンドsetlocalを用いたバッチファイルを組んで利用するのをオススメします。
echo off setlocal set PATH=C:\msys64\mingw64\bin;C:\msys64\usr\local\bin;C:\msys64\usr\bin;C:\msys64\bin;%PATH% (実行するコマンド) endlocal
Gitを...
脱線しましたが、Gitを導入したいんでした。
しかし、しか~し、下記サイトによると、Git for Windowsアンインストールする必要なかったかもしれない問題が。
・msys2を更新したらPATH設定が消えた?? - foohogehoge's blog
・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依存で作成している、ということだと思います。
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
空エンター(Enter)押したら、めちゃ警告。
空エンター(Enter)押す。
空エンター(Enter)押す。
『y』を入力して『Enter』
大丈夫だったのか...エラーにはならなかったけど。
Git導入
Git for WindowsじゃないGitを導入してしまいました、TortoiseGitなどとの連携をちゃんとしてくれるのか不安ではありますが。
pacman -S vim git openssh unzip rsync
インストール自体はエラーなく終わったよう。
ConEmu再起動して、gitのバージョン確認したところ、表示されました。
やはり、TortoiseGitはエラーに...。いまは亡きGit for Windowsを参照してらっしゃる。
・Gitのためのmsys2インストール | OPC Diary
⇧ を参考に『Gitへのパスを設定』
C:¥msys64¥usr¥bin¥git.exe がインストールされてるので、パスを『C:¥msys64¥usr¥bin』に変えてあげればOKのようです。
変更前
変更後
忘れずにルート証明書のインストールもしたほうがいいみたい。が、また警告が。
pacman -S ca-certificates
再インストールしなくてもよかったのかな?
とりあえず、Gitもなんとか導入できたので、次回こそ、ホストOS(Windows)側にwordmoveをインストールして、それが仮想マシン内のdockerコンテナで使えるのか試してみたいと思います。
勢いで導入しちゃいましたが、Git for Windowsを利用したほうが良いようですね。
今回はこのへんで。