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

  • 22
    Like
  • 0
    Comment
More than 1 year has 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

参考