Edited at

MSYS2でパッケージのダウンロードに失敗するときの対処

More than 3 years have passed since last update.


現象

pacman コマンドで一部のパッケージのダウンロードに失敗する。

例:

$ pacman -S gcc

依存関係を解決しています...
衝突するパッケージがないか確認しています...

パッケージ (9) binutils-2.25-1 cloog-0.18.1-1 isl-0.12.1-1 mpc-1.0.2-3
msys2-runtime-devel-2.0.16467.0bee699-1
msys2-w32api-headers-4.0.0.4379.3403da3-1
msys2-w32api-runtime-4.0.0.4379.3403da3-1
windows-default-manifest-6.4-1 gcc-4.9.2-4

合計ダウンロード容量: 0.34 MiB
合計インストール容量: 232.47 MiB

:: インストールを行いますか? [Y/n]
:: パッケージを取得します ...
エラー: ファイル 'isl-0.12.1-1-x86_64.pkg.tar.xz' を downloads.sourceforge.net から取得するのに失敗しました : Failed to connect to cznic.dl.sourceforge.net port 80: Network is unreachable
警告: 複数のファイルの取得に失敗しました
エラー: 処理を完了できませんでした (ダウンロードライブラリエラー)
エラーが発生したため、パッケージは更新されませんでした。


対処1

ダウンロードに失敗するファイルを手動でダウンロードする。

パッケージは、msys, mingw32, mingw64 の3種類に分類されているので、それぞれ以下の場所からダウンロードする。

msys パッケージ:

32bit: http://sourceforge.net/projects/msys2/files/REPOS/MSYS2/i686/

64bit: http://sourceforge.net/projects/msys2/files/REPOS/MSYS2/x86_64/

mingw32 パッケージ:

http://sourceforge.net/projects/msys2/files/REPOS/MINGW/i686/

mingw64 パッケージ:

http://sourceforge.net/projects/msys2/files/REPOS/MINGW/x86_64/

ダウンロードしたファイルは、/var/cache/pacman/pkg に格納する。

最後に、pacman -S package-name を再実行すればよい。


コマンドラインからダウンロード

pacman がファイルをどこからダウンロードしてくるかは、/etc/pacman.conf および、そこからインクルードされている /etc/pacman.d/mirrorlist.* に記載されている。そこに記載された URL の末尾にファイル名を付けることで、ファイルを直接ダウンロードすることが出来る。

例:

$ cd /var/cache/pacman/pkg

$ wget http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/x86_64/isl-0.12.1-1-x86_64.pkg.tar.xz
$ pacman -S gcc

今回の場合、wget では正常にダウンロードできたが、代わりに curl を使うとダウンロードに失敗した。

$ curl -R -L -O http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/x86_64/isl-0.12.1-1-x86_64.pkg.tar.xz

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 373 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (7) Failed to connect to cznic.dl.sourceforge.net port 80: Network is unreachable


対処2

pacman内蔵のダウンローダーではなく、外部コマンドを使ってダウンロードを行うようにする。

/etc/pacman.conf[options] セクションに次のような行があるはずなので、使いたい外部コマンドに合わせて、先頭の # を削除して有効化すればよい。

#XferCommand = /usr/bin/curl -C - -f %u > %o

#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u

当然この設定を行う前に、その外部コマンドをインストールしておく必要がある。

wget を使う場合は出力がかなり多いので、-nv または -q オプションを付けてもよい。

例:

XferCommand = /usr/bin/wget -nv --passive-ftp -c -O %o %u


参考