読者です 読者をやめる 読者になる 読者になる

cBlog

Tips for you.

Windows上で動く最新のUnix環境、MSYS2について改めてまとめた

MSYS2 MinGW Mintty

f:id:cruller:20151107194735j:plain

#MSYS2はもっと評価されるべき

 

はじめに

このブログの黎明期に書いたものに、MSYS2についての記事がある。

それらの記事には、MSYS2に乗り換えた経緯(MinGW+MSYS→MinGW-w64→MSYS2)やその時々の不具合対応が記されている。

しかしながら、当時の流れを重視したため小説調になっており、一覧性に欠けるため、補足とともにまとめなおすことにする。

なお、筆者は半年ほどMSYS2から離れており、当時発生した不具合が今でも起きるかどうかわからないが、関連する問題の解決策として役立つ可能性があるため再掲しておくことにした。

 

 

MSYS2

MSYS2とは

MSYS2の説明として、公式サイトの紹介文より粗末な訳を起こした。(2015年11月7日閲覧)

sourceforge.net

 

説明

MSYS2は、現代のCygwin(POSIX互換レイヤー)とネイティブWindowsソフトウェアとのより良い相互運用を目的としたMinGW-w64に基づく、MSYSの独立なリライト版です。

その名称は、Minimal SYStem 2の略で、MinGW-w64ツールチェーンを用いたネイティブWindowsアプリケーションをビルドするためのbashシェルや、Autotools、Revision Control Systemなどの使用を楽にするための支援を与えることを意図しています。

パッケージの簡単なインストールを提供するパッケージマネジメントシステムが欲しかったので、Arch LinuxのPacmanを移植しました。これは依存性の解決やシンプルな完全システムアップグレードだけでなく、ビルドシステム—makepkg{,-mingw}、これはパッケージのmakeに使われる—といった多くのパワフルな機能をもたらします。MSYS2自身のソフトウェアビルドレシピ(PKGBUILDとパッチ)のセットはここに、

https://github.com/Alexpux/MSYS2-packages

そして、MinGW-w64(ネイティブWindowsソフトウェア)についてはここにあります。

https://github.com/Alexpux/MINGW-packages

32-bit、64-bitの両方がサポートされています。

MSYS2 Web Site

 

インストール方法

MSYS2 / Wiki / MSYS2 installation

の粗末な訳です。(2015年11月7日閲覧)

 

I. ダウンロード

MSYS2は、インストーラーとベースアーカイブの形で届けられます。それらは、あなたのコンピューター上の好きな場所にインストールや展開できますが、ASCII文字のみで構成され、スペースを含まないフォルダー名を使わなければなりません(260であるPATH_MAXのため、たくさんの文字を使っていないパスに置くのも合理的です。C:\msys32やC:\msys64が理想的)。

以下のリンクからインストーラー、あるいはMSYS2のベースアーカイブをダウンロードしてください。

 

1. 32-bit

2. 64-bit

 

注:あなたが64-bit Windowsを使用している場合、32-bit版MSYS2を使う理由はありません。うん、正直に言えば1つ理由があります—あなたがMSYS2ソフトウェアを開発(あるいはMSYS2パッケージに貢献)したくて、32-bit版MSYS2上でソフトウェアやパッケージが動くことをテストしたい場合。ネイティブソフトウェアに関していえば、64-bit版MSYS2は32-bit版と64-bit版の両種のビルドや、インストール、実行に使える。64-bit版MSYS2ソフトウェアは、(事実上)決して“再構築”される必要はないので、より良いユーザーエクスペリエンスを与えます。

 

II. インストール

インストーラーとベースアーカイブは、1) MSYS2の起動 2) プリインストールパッケージのアップデート 3) 新しいパッケージのインストールに必要なツールのみを含んでいます。

* MSYS2のインストールや展開のあと、msys2_shell.batを実行することによってMSYS2を起動すべきです。

(あなたがインストーラーを使用せず、これが解凍後初めてのMSYS2の実行であるならば、この時点では適切に機能するために必要なファイルや設定が生成されません。この初回起動後、設定が正しくなるようMSYS2を再起動させなければなりません。)

  • このあと、MSYS2のベースパッケージを最新バージョンにアップデートしてください。MSYS2には、Arch Linuxから移植されたパッケージマネージャーPacmanを搭載しています。

 

III. パッケージの更新

1. 現代のMSYS2には、あなたが正しい方法でMSYS2をアップデートするのを助けるupdate-coreスクリプトがあります。MSYS2のインストールを更新するために、以下をする必要があります。

  • update-coreを実行する。スクリプトを実行している間にパッケージのうち1つでもアップデートされた場合、MSYS2を再起動しなければなりません
  • pacman -Suを実行する。

 

2. あなたのMSYS2がまだupdate-coreスクリプトを搭載していない場合、次の指示に従う必要があります。

  • アップデートの前にローカルパッケージデータベースを最新のリポジトリと同期させるべきです。
    pacman -Sy
    このコマンドは、リモートリポジトリに接続し、パッケージデータベースをダウンロードします。
  • 次のステップは、インストールされたパッケージをアップデートすること(最初と、その後アップデートしたくなるたびにこれをしてください):
    Arch Linuxからの‘普通の’方法(これをしないでください)は、簡単に、こうコマンドを打つことでしょう。
    pacman -Su
    しかしながら、MSYS2(ええと、Cygwin)がどのように‘フォーク’を実装するかに起因して、すべてのMSYS2プログラムはDLLのために同一のアドレス空間を共有しているため、bashのアップデートや、MSYS2、Pacman自身がそれに続くパッケージのアップデートの失敗を引き起こす。このため、MSYS2をアップデートするための最も安全な手順は、2段階ですべきである。最初は、‘コア’MSYS2パッケージ、
    pacman --needed -S bash pacman pacman-mirrors msys2-runtime
    もしこの間に何らかのパッケージがアップデートされたなら、これらのパッケージにより提供されるファイルは使用中であり、アップデート後フォークエラーが返されるので、MSYS2を再起動しなければなりません—すべてのMSYS2シェルを閉じ、(そして、MSYS2 32bitを使用しているなら、autorebase.batを実行し、)それからmsys2_shell.batを再起動する必要があります。
  • 最後に、次のコマンドを打つことにより残りのパッケージのアップデートをしてください。
    pacman -Su

 

IV. 一般的なパッケージマネジメント

1. 新しいパッケージのインストール:

pacman -S <パッケージ名|パッケージグループ>

例えば、pacman -S make gettext base-devel

この例では、<base-devel>は多くのパッケージを含むパッケージグループです。パッケージグループのインストールを試す場合、pacmanはそのグループから1つのパッケージをインストールするかすべてのパッケージをインストールするか尋ねてきます。

2. パッケージの削除:

pacman -R <パッケージ名|パッケージグループ>

3. パッケージの検索:

pacman -Ss <ネームパターン>

その他のpacmanのオプションはArch Linux Wikiで見つけられます。

 

V. 問題と回避方法

1. 上記の"III."を読んでください、丁寧にね:-) 私たちは、トラブルなしのアップデートに向け働き続けます。

2. インストール後のスクリプトの実行で失敗に陥っても、パニックになる必要はありません。単純に、正しいインストールに失敗したパッケージのリストを作って、すべてのMSYS2シェルを閉じてください(それらは完全に閉じられ、mintty/bashプロセスが動いていないことを確認してください)。それから、新たなMSYS2シェルを起動し、次のコマンドを打ってください:pacman -S <インストールに失敗したパッケージのリスト>

3. もしコアをアップデートしようとしたとき、msys2-runtime-develについて説明しているerror: failed to prepare transaction (could not satisfy dependencies)が出た場合、msys2-runtimeとその他のコアパッケージと一緒にこのパッケージをアップデートする必要があります。

4. 時々、failed to commit transaction (conflicting files) and some-pkg: /path/to/some/file exists in filesystemを伴ってパッケージのアップグレードが失敗します。問題のファイルをそこに手動で置かなかったことが確かなら、そのファイルを移動または削除し、再度アップグレードを開始してください。

5. もしアップグレードの後MSYS2が起動しなくなったら、あなたが起動しようとしているプロセスと競合しているMSYS2プロセス(より古いバージョンのランタイムとともにロードされる)が単に残存している可能性があります。あなたのお気に入りのタスクマネージャーでそれらのプロセスを探し当てキル、あるいは単にシステムを再起動してください。

6. アップデート後、error: GPGME error: No dataが出たら、あなたは不運にも間が悪いときにSourceForgeに見つかりました。/var/lib/pacman/syncをチェックし、そこにあるファイルにHTMLフォーマットのエラーページが含まれていたら、それらのファイルを消去しもう一度試してください。

 

 

過去記事

各記事は、以下について記述したものである。

MSYS2との出逢い (1)-(4):MinGW+MSYS、MinGW-w64

MSYS2と格闘 (1), (2):MSYS2

MSYS2にimagemagickをインストールしてみた - プロローグ、(1)、(2):MSYS2へのimagemagickのインストール(失敗)

 

MSYS2との出逢い (1)

yaritakunai.hatenablog.com

 

MinGW+MSYS導入の経緯(vs Cygwinなど)

環境変数の設定

 

MSYS2との出逢い (2)

yaritakunai.hatenablog.com

 

[不具合] (UTF-8の場合)MSYSでコマンドの文字化け

 

MSYS2との出逢い (3)

yaritakunai.hatenablog.com

 

[不具合] (UTF-8の場合)MSYS (Mingw-w64)でコマンドの文字化け

[Tips] Minttyの設定

 

MSYS2との出逢い (4)

yaritakunai.hatenablog.com

 

[不具合] MSYS2でコマンドの文字化け解決

[Tips] .inputrcの設定

 

MSYS2と格闘 (1)

yaritakunai.hatenablog.com

 

[不具合] exeファイルのファイル名補完が効かない

 

MSYS2と格闘 (2)

yaritakunai.hatenablog.com

 

[不具合] exeファイルのファイル名補完が効かない件の解決

 

MSYS2にimagemagickをインストールしてみた - プロローグ

yaritakunai.hatenablog.com

 

[不具合] パッケージデータベースのサーバーが応答しない

 

MSYS2にimagemagickをインストールしてみた (1)

yaritakunai.hatenablog.com

 

[不具合] パッケージデータベースのサーバーが応答しない件の解決

[Tips] msys2、mingw32、mingw64の違い

 

MSYS2にimagemagickをインストールしてみた (2)

yaritakunai.hatenablog.com

 

imagemagickインストールの確認

[不具合] imagemagickが動作しない(未解決)

 

 

おわりに

MSYS2の説明とインストール方法を述べた。MSYS2についての過去記事をまとめ、この記事を索引とした。Windows上でgccやvim、gitを使いたいなど、この記事がMSYS2をインストールする上で助けとなれば幸いである。