現象
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 等のパッケージに分類されているので、それぞれ以下の場所からダウンロードする。
msys パッケージ:
64bit: https://mirror.msys2.org/msys/x86_64/
32bit: https://mirror.msys2.org/msys/i686/
それ以外:
mingw32: https://mirror.msys2.org/mingw/mingw32/
mingw64: https://mirror.msys2.org/mingw/mingw64/
clang32: https://mirror.msys2.org/mingw/clang32/
clang64: https://mirror.msys2.org/mingw/clang64/
ucrt64: https://mirror.msys2.org/mingw/ucrt64/
ダウンロードしたファイルは、/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 -L -C - -f -o %o %u
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
当然この設定を行う前に、その外部コマンドをインストールしておく必要がある。
wget を使う場合は出力がかなり多いので、-nv
または -q
オプションを付けてもよい。
例:
XferCommand = /usr/bin/wget -nv --passive-ftp -c -O %o %u