プロジェクト

全般

プロフィール

MSYS2を高速化する » 履歴 » バージョン 4

開発 次郎, 2025/05/06 05:06

1 1 開発 次郎
h1. MSYS2を高速化する
2
3
* (出典)
4
** https://zenn.dev/nyarla/articles/489394cec0ecb5
5
6
h2. はじめに
7
8
この記事は Windows 上で動く Unix-like な環境である、
9
10
https://www.msys2.org/
11
12
を出来る限り高速化するための HowTo をまとめた記事です。
13
14
h2. そもそもなぜ MSYS2 は遅くなるのか
15
16
私の今現在のマシン環境は、
17
18
* CPU: Ryzen 9 3950X
19
* Memory: 128GB
20
* Storage: NVMe 1TB SSD
21
22
と言う、
23
24
> 誰がどう考えてもこれで遅いはずはないだろー
25
26
みたいな環境なのですが、**Windows 10 Pro の設定を弄らず** に MSYS2 をそのままインストールしただけでは、コマンドを打つたびに何もかもワンテンポ遅れる、みたいな状態でした。そして私のマシンはどう考えても過剰なスペックを持っている訳で、これは性能がどうこう、と言う話では無いわけです。
27
28
それで色々調べた結果、MSYS2 が遅くなる要因は次の通りとなりました:
29
30
1. MSYS2 がインストールされたフォルダに対してウィルススキャンが有効になっている
31
2. MSYS2 の実行コマンドが CodeSigning されてない
32
3. MSYS2 環境で NTFS の Symlink が使える様になっていない
33
4. MSYS2 の設定がマズい
34
35
そのためこの三つを解決すれば、 MSYS2 はかなりキビキビと動く様になります。
36
37
h2. MSYS2 を高速化する方法
38
39
h3. 1. MSYS2 のフォルダに対してウィルススキャンを切る
40
41
最初に言っておきますがこれはそれなりにリスクのある行為で、なんらかの攻撃者が、
42
43
> MSYS2 がインストールされたフォルダではウィルススキャンを切られている
44
45
と言う前提の元に攻撃を仕掛けてこられると、その攻撃に対して脆弱になるリスクが上がります。
46
47
また個人の Windows PC ならいざ知らず、会社などの勤め先の PC などでは会社で規定されるセキュリティポリシー的にアウトになる可能性もあるので、この方法はそう言ったリスクを承知した上で使って下さい。
48
49
----
50
51
それでなぜ MSYS2 をインストールしたフォルダに対してウィルススキャンを無効化すると MSYS2 の速度が改善されるのか、と言うとこれは **MSYS2 でファイルが作られたりなんだかんだする度に、毎回ウィルススキャンが走っているため** で、この影響で恐らくはファイルの I/O の性能が劣化しているから、だと考えられます。
52
53
まぁ本当はこの手の話はベンチマーク貼れよって話なのですが、上記の要因を取り除く前にベンチマークとかを取ってなかったのと、あとそもそもどうやってベンチ取ればええねん、みたいな話もあったので、今のところはベンチマークを取っていません。
54
55
とは言え、
56
57
> *MSYS2 のインストール先のフォルダに対してウィルススキャンを無効にする*
58
59
と言うのはファイル I/O の性能の向上にはかなり有益っぽいのは確かなので、まずはここから設定を始めた方が良いかと思います。
60
61
なお特定のフォルダ以下のウィルススキャンを無効化する方法については、それぞれが使っているセキュリティソフトウェアによっても異なってくるので、ここではそれらの方法については取り上げませんのでご了承ください。
62
63
h3. 2. MSYS2 のコマンド (`.exe`) に対して CodeSigning する
64
65
正直なところこれは眉唾なのでは? と思わなくも無いんですが、とりあえずおまいじない程度に私は実行していて、そのやり方は次の通りになります。
66
67
h4. 1. まず自分のアカウントに対してオレオレ証明書を作る
68
69
これは Powershell 上で次のコマンドを実行すれば作成できます:
70
71 2 開発 次郎
<pre><code class="powershell">
72 1 開発 次郎
New-SelfSignedCertificate -DnsName the.kalaclista.com -Type CodeSigning -CertSToreLocation Cert:\CurrentUser\My
73 2 開発 次郎
</code></pre>
74 1 開発 次郎
75
なおこの `-DnsName the.kalaclista.com` のドメイン部分は各自の適切な値に書き換えてください。
76
77
h4. 2. オレオレ証明書を信頼されたルート証明機関 に移す
78
79
これは Windows 10 Pro だとコントロールパネルの `ユーザー証明書の管理` アプリケーションから、
80
81
1. `証明書 - 現在のユーザー` → `個人` → `証明書` 以下にあるオレオレ証明書を `コピー`
82
2. `信頼されたルート証明機関` → `証明書` に貼り付け
83
3. そして念のために再起動
84
85
と言う手順で出来るはずです。
86
87
なお私は Windows 10 Pro を使っているのでこの方法が使えていますが、Windows 10 Home でこれが出来るのかは今一つ分かってません。
88
89
h4. 3. `Visual Studio` にある `signtool.exe` で自己署名する
90
91
ここを無償で行うためには `Visual Studio Community` が必要になるので面倒なのですが、Visual Studio のインストーラーで次のパッケージをインストールしておきます:
92
93
* Windows 10 SDK
94
* Windows ユニバーサル CRT
95
96
その上で次の様な Powershell スクリプトを用意して実行します:
97
98 3 開発 次郎
<pre><code class="powershell">
99 1 開発 次郎
cd P:\app\MSYS2\usr\bin
100
gci -re *.exe | %{  &'C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe' sign /a $_.FullName }
101
102
cd P:\app\MSYS2\mingw64\bin
103
gci -re *.exe | %{  &'C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe' sign /a $_.FullName }
104
105
cd P:\app\MSYS2\clang64\bin
106
gci -re *.exe | %{  &'C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe' sign /a $_.FullName }
107
108
cd P:\app\MSYS2\mingw32\bin
109
gci -re *.exe | %{  &'C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86\signtool.exe' sign /a $_.FullName }
110
111
cd P:\app\MSYS2\clang32\bin
112
gci -re *.exe | %{  &'C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86\signtool.exe' sign /a $_.FullName }
113 3 開発 次郎
</code></pre>
114 1 開発 次郎
115
なお上記スクリプトの `P:\app\MSYS2` と `C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86\signtool.exe` に関しては各自の環境に応じて書き換えてください。
116
117
そして後は MSYS2 のパッケージの追加など `.exe` が書き換えられるたびに上記のスクリプトを実行すれば OK です。
118
119
h3. 3. MSYS2 環境で NTFS の Symlink が使える様にする
120
121
これは `ローカルセキュリティポリシー` アプリケーションで、
122
123
* `セキュリティの設定` → `ローカルポリシー` → `ユーザー権利の割り当て`
124
125
から、
126
127
* `シンボリックリンクの作成`
128
129
に自分のアカウントを追加し、マシンを再起動すればユーザー権限で NTFS のシンボリックリンクが作成できる様になります。
130
131
ただこれだけだと MSYS2 ではシンボリックリンクが有効にならないので、`msys2.ini` などで `MSYS=winsymlinks:nativestrict` の設定を足します。
132
133
なおこの方法の内、 GUI でローカルセキュリティポリシーを触るのは確か Windows 10 Home だと出来なかったはず(レジストリを直接触る必要があるはず)なので、その辺りは各自で調べてください。
134
135
h3. 4. MSYS2 の設定を改善する
136
137
まず次の手順で `/etc/passwd` と `/etc/group` を生成します:
138
139 4 開発 次郎
<pre><code class="bash">
140 1 開発 次郎
$ mkpasswd -c -l > /etc/passwd
141
$ mkgroup -c -l > /etc/group
142 4 開発 次郎
</code></pre>
143 1 開発 次郎
144
次に `/etc/nsswitch.conf` で `passwd` と `group` の記述の `db` を下記の様にコメントアウトします:
145
146 4 開発 次郎
<pre><code class="bash">
147 1 開発 次郎
passwd: files # db
148
group: files # db
149 4 開発 次郎
</code></pre>