yumのダウンロードが遅い事象に対処する


## はじめに

yumのダウンロードが遅いときの対処法を記述します。

## 環境

* CentOS 6.5
* yum 3.2.29
* yum-plugin-fastestmirror 1.1.30

## 事前準備

* リポジトリの設定を確認する

```repo:/etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

...(省略)...
```

「mirrorlist」行が有効になっていていることを確認しておきます。

* yumの設定を確認する

```conf:/etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
```
「plugins=1」(プラグインが有効)となっていることを確認します。

* yum-plugin-fastestmirrorの設定を確認する

```conf:/etc/yum/pluginconf.d/fastestmirror.conf
[main]
enabled=1
verbose=0
always_print_best_host = true
socket_timeout=3
#  Relative paths are relative to the cachedir (and so works for users as well
# as root).
hostfilepath=timedhosts.txt
maxhostfileage=10
maxthreads=15
#exclude=.gov, facebook
#include_only=.nl,.de,.uk,.ie
```
「enabled=1」(有効)となっていることを確認します。

## 対処

* yumのキャッシュをクリアして状況が改善するか確認します。

```shell
$ sudo yum clean all
$ yum repolist
```
* 選択されているダウンロード先を確認します。

```shell
$ yum repolist
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
```

上記の場合は、「www.ftp.ne.jp」が選択されています。
海外のサイトが選択されている場合は、fastestmirrorプラグインの設定を変更します。

```conf:/etc/yum/pluginconf.d/fastestmirror.conf
[main]
enabled=1
verbose=1
always_print_best_host = true
socket_timeout=3
#  Relative paths are relative to the cachedir (and so works for users as well
# as root).
hostfilepath=timedhosts.txt
maxhostfileage=10
maxthreads=15
#exclude=.gov, facebook
include_only=.jp
#prefer=ftp.iij.ad.jp
```
「include_only」でjpドメインのみ選択の対象となるように設定します。
また、「verbose=1」を指定して、サイトごとの速度を表示するようにします。

```shell
$ sudo yum clean all
$ yum repolist
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
www.ftp.ne.jp already timed: 0.00651001930237
 * www.ftp.ne.jp : 0.006510 secs
ftp.jaist.ac.jp already timed: 0.0173878669739
 * ftp.jaist.ac.jp : 0.017388 secs
ftp.tsukuba.wide.ad.jp already timed: 0.0187709331512
 * ftp.tsukuba.wide.ad.jp : 0.018771 secs
ftp.riken.jp already timed: 0.0195229053497
 * ftp.riken.jp : 0.019523 secs
ftp.iij.ad.jp already timed: 0.01784491539
 * ftp.iij.ad.jp : 0.017845 secs
...(省略)...
Including mirror: www.ftp.ne.jp
Including mirror: ftp.jaist.ac.jp
Including mirror: ftp.nara.wide.ad.jp
Including mirror: ftp.iij.ad.jp
Including mirror: ftp.tsukuba.wide.ad.jp
Including mirror: ftp.riken.jp
Including mirror: mirror.fairway.ne.jp
 * base: www.ftp.ne.jp

ftp.jaist.ac.jp already timed: 0.0173878669739
 * ftp.jaist.ac.jp : 0.017388 secs
www.ftp.ne.jp already timed: 0.00651001930237
 * www.ftp.ne.jp : 0.006510 secs
ftp.tsukuba.wide.ad.jp already timed: 0.0187709331512
 * ftp.tsukuba.wide.ad.jp : 0.018771 secs
ftp.iij.ad.jp already timed: 0.01784491539
 * ftp.iij.ad.jp : 0.017845 secs
ftp.nara.wide.ad.jp already timed: 0.0176429748535
 * ftp.nara.wide.ad.jp : 0.017643 secs
ftp.riken.jp already timed: 0.0195229053497
 * ftp.riken.jp : 0.019523 secs
...(省略)...
Including mirror: www.ftp.ne.jp
Including mirror: ftp.jaist.ac.jp
Including mirror: ftp.nara.wide.ad.jp
Including mirror: ftp.iij.ad.jp
Including mirror: ftp.tsukuba.wide.ad.jp
Including mirror: ftp.riken.jp
Including mirror: mirror.fairway.ne.jp
 * extras: www.ftp.ne.jp
```

複数の候補のなかから、jpドメインのみを対象として、一番速度の速いサイトが選択されます。
上記の場合は、「www.ftp.ne.jp」が選択されています。

jpドメインのうち特定のサイトが常に選択されるようにする場合は、「prefer」で指定します。

* 海外のサイトが選択されてしまう場合

ミラーリストを確認します。

ミラーリストのURLは、以下の通りに指定されているため、

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

「$releasever」を「6」、「$basearch」を「x86_64」を指定してリストされるURLを確認します。

```shell
$ curl 'http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os'
http://www.ftp.ne.jp/Linux/packages/CentOS/6.5/os/x86_64/
http://ftp.iij.ad.jp/pub/linux/centos/6.5/os/x86_64/
http://ftp.tsukuba.wide.ad.jp/Linux/centos/6.5/os/x86_64/
http://ftp.riken.jp/Linux/centos/6.5/os/x86_64/
http://ftp.nara.wide.ad.jp/pub/Linux/centos/6.5/os/x86_64/
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.5/os/x86_64/
http://mirror.fairway.ne.jp/centos/6.5/os/x86_64/
http://centos.mirror.secureax.com/6.5/os/x86_64/
http://mirror.vodien.com/centos/6.5/os/x86_64/
http://mirrors.hust.edu.cn/centos/6.5/os/x86_64/
```
上記の場合は、国内のサイト(.jpドメインなど)が含まれているため、国内のサイトが選択対象となります。
海外サイトのURLのみがリストされる場合は、fastestmirrorプラグインでは対応できないため、ダウンロード先を直接指定する対応を行います。

* ダウンロード先を直接指定する

```repo:/etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://www.ftp.ne.jp/Linux/packages/CentOS/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

...(省略)...
```

「mirrorlist」行をコメントアウトし、「baseurl」行のコメントをはずします。
そして、「baseurl」にダウンロード先を直接指定することでダウンロードが遅い事象に対処します。

```shell
$ sudo yum clean all
$ yum repolist
```

## 参考

* [第6章 Yum](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-yum.html)
* [6.3. Yum と Yum リポジトリの設定](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Configuring_Yum_and_Yum_Repositories.html)
* [6.3.3. Yum 変数の使用](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Using_Yum_Variables.html)
* [6.4. Yum のプラグイン](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Yum_Plugins.html)