msys2のミラーにjaistを使いたい

# はじめに

御存知の通り、msys2はパッケージ管理にArch Linuxと同じく``pacman``を採用している。

パッケージを更新するとき、

```bash
$ pacman -Syuu
```

なんてやるのは日常だろう。

# すこしでもDLを速くしたい

``pacman``が見に行く場所は何で決まっているのでしょうか？``pacman``はもともとArch LinuxのものですからArch Wikiを見るのが確実です

> [Mirrors - ArchWiki](https://wiki.archlinux.org/index.php/mirrors#Enabling_a_specific_mirror)
>To enable mirrors, **edit ``/etc/pacman.d/mirrorlist``** and locate your geographic region. Uncomment mirrors you would like to use.
Example:

>
```
# Any
# Server = ftp://mirrors.kernel.org/archlinux/$repo/os/$arch
Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch
```
See #Sorting mirrors for tools that help choosing mirrors.

>>Tip:

>>
- **Uncomment 5 favorite mirrors and place them at the top of the mirrorlist file**. That way it's easy to find them and move them around if the first mirror on the list has problems. It also makes merging mirrorlist updates easier.
- **HTTP mirrors are faster than FTP** due to persistent HTTP connection: with FTP, a new connection to server has to be established each time pacman requests a package to be downloaded, which results in a brief pause.

なるほど。とりあえず``/etc/pacman.d/``を覗いてみると

```bash
$ls -l /etc/pacman.d/
合計 59K
drwxr-xr-x 1 yumetodo None   0 12月 23 20:06 gnupg/
-rw-r--r-- 1 yumetodo None 50K 11月 11 02:01 gnupg.tar
-rw-r--r-- 1 yumetodo None 405 1月  24 20:25 mirrorlist.mingw32
-rw-r--r-- 1 yumetodo None 415 1月  24 20:25 mirrorlist.mingw64
-rw-r--r-- 1 yumetodo None 400 1月  24 20:25 mirrorlist.msys
```

msys2の場合はミラーリストをそれぞれ持っているらしい。

試しにこれらを眺めてみよう。

```bash:mirrorlist.msys
##
## MSYS2 repository mirrorlist
##

## Primary
## msys2.org
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/


```
```bash:mirrorlist.mingw32
##
## 32-bit Mingw-w64 repository mirrorlist
##

## Primary
## msys2.org
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/



```
```bash:mirrorlist.mingw64
##
## 64-bit Mingw-w64 repository mirrorlist
##

## Primary
## msys2.org
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/


```

さて、こいつらは上から順番に使われているらしい。つまり、速そうなサーバーを``Primary``の上に書けばいい。もしそのサーバーが落ちているときは、下のものに自動的にフォールバックされる。

なおこれらは``/etc/pacman.conf``からincludeされているだけなので、そっちをいじってもよい。

# どのミラーを使うか

``repo.msys2.org``は全世界からアクセスが集中するだろうから、たとえ速くても負荷分散の意味で使いたくない。
``downloads.sourceforge.net``はリダイレクトしまくっているせいか遅い。
``www2.futureware.at``は死んでいる。

というわけでミラーを探す必要がある。

日本でミラーといえば

- Tsukuba WIDE Public Mirror
- 山形大学
- JAIST
- 富山大学
- 理化学研究所

あたりが有名だ。自分がUbuntuを使うときは山形大学にお世話になっている(JAISTより安定している)し、archlinuxでは東京から近いのでTsukubaを使っている。

ところが残念ながらmsys2はJAISTでしかミラーされていないようだ(要検証)

MSYS2にimagemagickをインストールしてみた (1) - cBlog
http://yaritakunai.hatenablog.com/entry/2014/12/22/234317

を見ると

```bash:mirrorlist.mingw32
##
## 32-bit Mingw-w64 repository mirrorlist
## Changed on 2014-05-24
##

Server = http://ftp.jaist.ac.jp/pub/sourceforge/m/ms/msys2/REPOS/MINGW/i686

## Primary
Server = ftp://148.251.42.38/MINGW/i686

## Sourceforge.net
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
```

``ftp.jaist.ac.jp``を見に行っている。

# JAISTはmsys2をミラーしているが、``ftp.jaist.ac.jp``ではない

ところがさっきの[リンク](http://ftp.jaist.ac.jp/pub/sourceforge/m/ms/msys2/REPOS/MINGW/i686)見に行くと死んでいる。あれ、JAIST落ちたか？と思って、http://ftp.jaist.ac.jp 見に行くと生きている。どういうことだ？

```bash
$wget https://sourceforge.net/projects/msys2/files/Base/x86_64/msys2-x86_64-20161025.exe/download?use_mirror=jaist
--2017-01-24 20:08:01--  https://sourceforge.net/projects/msys2/files/Base/x86_64/msys2-x86_64-20161025.exe/download?use_mirror=jaist
sourceforge.net (sourceforge.net) をDNSに問いあわせています... 216.34.181.60
sourceforge.net (sourceforge.net)|216.34.181.60|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://downloads.sourceforge.net/project/msys2/Base/x86_64/msys2-x86_64-20161025.exe?r=&ts=1485256081&use_mirror=jaist [続く]
--2017-01-24 20:08:02--  https://downloads.sourceforge.net/project/msys2/Base/x86_64/msys2-x86_64-20161025.exe?r=&ts=1485256081&use_mirror=jaist
downloads.sourceforge.net (downloads.sourceforge.net) をDNSに問いあわせています... 216.34.181.59
downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://jaist.dl.sourceforge.net/project/msys2/Base/x86_64/msys2-x86_64-20161025.exe [続く]
--2017-01-24 20:08:03--  https://jaist.dl.sourceforge.net/project/msys2/Base/x86_64/msys2-x86_64-20161025.exe
jaist.dl.sourceforge.net (jaist.dl.sourceforge.net) をDNSに問いあわせています... 150.65.7.130, 2001:df0:2ed:feed::feed
jaist.dl.sourceforge.net (jaist.dl.sourceforge.net)|150.65.7.130|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 71003102 (68M) [application/octet-stream]
`download@use_mirror=jaist' に保存中

download@use_mirror=jaist                                  5%[======>                                                                                                                          ]   4.02M  1.27MB/s    eta 50s
```

なるほど、https://jaist.dl.sourceforge.net/ 以下にあるらしい。

# 結論

```bash:mirrorlist.msys
##
## MSYS2 repository mirrorlist
##
Server = https://jaist.dl.sourceforge.net/project/msys2/REPOS/MSYS2/$arch

## Primary
## msys2.org
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
```

```bash:mirrorlist.mingw32
##
## 32-bit Mingw-w64 repository mirrorlist
##

Server = https://jaist.dl.sourceforge.net/project/msys2/REPOS/MINGW/i686

## Primary
## msys2.org
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
# Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
```

```bash:mirrorlist.mingw64
##
## 64-bit Mingw-w64 repository mirrorlist
##

Server = https://jaist.dl.sourceforge.net/project/msys2/REPOS/MINGW/x86_64

## Primary
## msys2.org
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
# Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
```

# 余談

この記事を書いているときに
MSYS2国内源
https://gist.github.com/elvisw/cc00088e9c8fd1c83aca

を見つけた。うーむ、もっとはやく見つけていれば・・・。

# License

[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/deed.ja)

<a href="https://commons.wikimedia.org/wiki/File:CC-BY_icon.svg#/media/File:CC-BY_icon.svg"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/CC-BY_icon.svg/1200px-CC-BY_icon.svg.png" alt="CC-BY icon.svg" width="88px"></a>