Skip to content

Instantly share code, notes, and snippets.

@ubnt-intrepid
Last active March 19, 2020 10:55
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ubnt-intrepid/05dab5f0f88bd3baf1a1 to your computer and use it in GitHub Desktop.
Save ubnt-intrepid/05dab5f0f88bd3baf1a1 to your computer and use it in GitHub Desktop.

MSYS2の使い方の備忘録 (2016年度3月版)

MSYS2の情報自体は調べれば出てくるのですがいちいち調べるのが面倒なので, ここに使用する際の注意点なども含めてメモっておきます.

MSYS2とは

Windows上でUnix-likeなコマンドライン開発環境を構築するためのツール群

  • MinGW (Windows向けのgccツールチェイン) のために開発されていた MSYS というプロジェクトの後継
  • Arch Linux のパッケージマネージャ (pacman) を移植したことでパッケージの導入・管理が飛躍的に容易になった
  • フォーク元のCygwinとは異なり,ネイティブ向けのアプリケーションの充実を目指しているらしい

関連するプロジェクト

  • Cygwin

    • すべての元凶
    • RedHatによるサポートがある
    • パッケージの追加は基本的にGUIベースで面倒
      • apt-cyg という非公式のパッケージマネージャがあるが...
  • babun

    • Cygwinを使いやすくしたやつらしい(未検証)
    • CLIベースのパッケージマネージャ pact が付属する
    • デフォルトシェルが (Oy-my-zsh導入済みの) zsh
  • Git for Windows (2.5.0 ~)

    • MSYS2をベースにしたWindows向けのGitおよびBashなど最小限のUnix環境をまとめたもの
    • 公式で配布されているインストーラにpacmanが含まれていないが,SDKを用いることでMSYS2として使用することができる

使用時の注意点など

最初に気をつけるべき点をまとめた. 以後,MSYS2のインストールディレクトリを %MSYS2_ROOT% と表記する(そのような環境変数が設定されるわけではない)

ホームディレクトリの設定

デフォルトでは%MSYS2_ROOT%/home下にユーザディレクトリが設定されるため, Windows側のユーザディレクトリを /home に設定したい場合は/etc/fstab を書き換える必要がある.

基本的にはUnixのそれと同じ要領で設定すれば良い. 筆者はユーザごとにリンク貼るのが面倒なので次のように設定している. リンク元のディレクトリのドライブ表記は小文字にする必要があることに注意(確か).

$ cat /etc/fstab
...
c:/Users    /home

シンボリックリンクの作成に関係する設定

デフォルトの設定ではシンボリックリンクは使用できない. 単にファイル・ディレクトリのコピーとなる. シンボリックリンクを使用したい場合には,環境変数MSYSの値を書き換える必要がある.

MSYS2(というかCygwin)ではショートカット(.lnk)を用いる方法とNTFSのショートカットを使用する方法の いずれかを選択できる. 各変数の値とシンボリックリンクの動作は次の通り.

MSYS の値 ln -s の動作
なし リンクは作成されず,単にコピーされる
winsymlinks, winsymlinks:lnk ショートカット(.lnk)が作成される
winsymlinks:nativestrict NTFSのシンボリックリンクが使用される
winsymlinks:native シンボリックリンクを使用(失敗時はショートカット)

ショートカットによるシンボリックリンクは, MSYS2内であれば(MSYSの値に関わらず)シンボリックリンクとして解釈される(要検証). また当然ではあるが,winsymlinks:lnk設定下で作成したシンボリックリンクはWindowsのそれとは異なるため, msys-2.0.dll に依存したバイナリ以外で使用することが出来ない点に注意が必要である.

$PATHの設定について

現状のMSYS2では,環境変数MSYSTEMの値に応じて$PATHなどの切り替えを行っている. これらの環境変数の設定は通常起動に使用するバッチファイル内で行っているため気にする必要がないが, 直接minttyを起動する場合や別のターミナルエミュレータを使用する場合には事前に設定する必要がある. バッチファイルと各変数の対応は以下の通りである.XXには32 or 64が入るので適宜置き換えること.

使用するバッチファイル MSYSTEM の値 $PATH に設定される値
msys2_shell.bat MSYS /usr/bin, %PATH%
mingwXX_shell.bat MINGWXX /mingwXX/bin, /usr/bin, %PATH%

Git for Windowsのパッケージリストを追加する

MSYS2に標準でインストールされているgitはMSYS2向けにビルドされたものであり,Git for Windowsで提供されているものとは異なる. そのため,動作が遅い・Windowsの認証情報マネージャを扱う事ができないなどの問題がある. 以下ではGit for Windowsで提供されているMinGW-64向けにビルドされたGitを使用するための手順を説明する.

まずリポジトリを登録する.以下の内容を /etc/pacman.conf に追記する

# 以下を追記する
[git-for-windows]
Server = https://dl.bintray.com/$repo/pacman/$arch
SigLevel = Optional

追加後,パッケージデータベースを更新してMinGW版のgitをインストールする

$ pacman -Syy # パッケージデータベースを更新
$ pacman -S mingw-w64-x86_64-git

※ HTTPSの証明書のパスがおかしいので,https接続に使用する証明書ファイルのパスを次の手順で更新する.

$ git config --system http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

メモ: mingw-w64-x86_64-ca-certificates を再インストールする方が楽?

参考文献


MSYS2で使用できないツール群

  • fish (パッケージはあるが動作がおかしい)
  • 各種開発環境
    • gdc, ldc2 (dmd2は知らない)
    • ghc
    • vagrant
    • rust (古い, cargoがない)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment