【CentOS】【Linux】yum コマンド エラー集とその対策まとめ

レンタルサーバーでよく使われている Redhat Enterprise Linux のクローンである CentOS ですが、運用監視をしている中でパッケージのアップデート作業をすることがあると思います。

その際にリポジトリ関連やネットワーク関連が原因でエラーになる場合がありますが、yum コマンドでのエラー集とその対策をまとめてみました。

 

 

 

[Errno 14] HTTPS Error 404 - Not Found 他のミラーを試します。

yum コマンドを実行すると、毎回以下のようなメッセージが表示されます。

[root@SAKURA_VPS ~]# yum search python*
読み込んだプラグイン:fastestmirror, langpacks
http://repos.fedorapeople.org/repos/sic/qt48/epel-7/x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
他のミラーを試します。
To address this issue please refer to the below knowledge base article

https://access.redhat.com/articles/1320623

If above article doesn't help to resolve this issue please create a bug on https://bugs.centos.org/

Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * elrepo: ftp.yz.yamagata-u.ac.jp
 * epel: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * ius: hkg.mirror.rackspace.com
 * updates: ftp.iij.ad.jp

 

エラーではないですし、最終的に yum コマンドは最後まで実行される(インストールなど)ので問題ないのですが、毎回出力されるため調べました。

 

どのレポジトリが見つからないのか調べて原因を特定する

どのレポジトリが「[Errno 14] HTTPS Error 404 - Not Found」を出力しているのか調べます。

[root@SAKURA_VPS yum.repos.d]# pwd
/etc/yum.repos.d
[root@SAKURA_VPS yum.repos.d]# grep 'repos.fedorapeople.org/repos/sic/qt48' *
qt48.repo:baseurl=http://repos.fedorapeople.org/repos/sic/qt48/epel-$releasever/$basearch/
qt48.repo:baseurl=http://repos.fedorapeople.org/repos/sic/qt48/epel-$releasever/SRPMS
[root@SAKURA_VPS yum.repos.d]#

 

どのレポジトリがエラーを出力しているのか調べたところ、「qt48.repo」であることが分かりました。

更に「baseurl=http://repos.fedorapeople.org/repos/sic/qt48/epel-$releasever」「epel-6」しかありません。

 

調べたところ「qt48.repo」「capybara-webkit」などをインストールする時に利用できます。

しかし、現在は不要なため「無効」に設定します。

[root@SAKURA_VPS yum.repos.d]# pwd
/etc/yum.repos.d
[root@SAKURA_VPS yum.repos.d]# vi qt48.repo
[epel-qt48]
name=Software Collection for Qt 4.8
baseurl=http://repos.fedorapeople.org/repos/sic/qt48/epel-$releasever/$basearch/
#enabled=1 ← コメントアウトします。
enabled=0 ← disabled にします。
skip_if_unavailable=1
gpgcheck=0
[epel-qt48-source]
name=Software Collection for Qt 4.8 - Source
baseurl=http://repos.fedorapeople.org/repos/sic/qt48/epel-$releasever/SRPMS
enabled=0
skip_if_unavailable=1
gpgcheck=0

 

 

再度動作確認

再度「yum check-update」でエラーが出るか確認します。

今度は以下のようにエラーは出力されませんでした。

[root@SAKURA_VPS yum.repos.d]# yum check-update
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * elrepo: ftp.ne.jp
 * epel: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * ius: hkg.mirror.rackspace.com
 * updates: ftp.iij.ad.jp
[root@SAKURA_VPS yum.repos.d]#

 

Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

「Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again」を翻訳すると「epel リポジトリのメタリンクを取得できません。 パスを確認してもう一度お試しください」という意味になります。

つまり「リンクにアクセスできない」ということです。

 

例えば、以下のように yum コマンドを実行したところエラーが出たとします。

[root@test ~]# yum update net-tools
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

 

その場合は、以下のようにリポジトリファイルを開き、コメントアウトを外して「baseurl」を有効にして「mirrorlist」をコメントアウトをして無効にします。

[root@test ~]# cat /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch ← baseurl の URL のコメントアウトを外してこっちにアクセスする設定にします。
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch ← mirrorlist の URL はエラーでアクセスできなかったのでこちらはコメントアウトします。
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

 

そもそも「baseurl」と「mirrorlist」とは?

通常 yum のリポジトリではデフォルトで「mirrorlist」が選択されています。

様々な地域、様々な組織が mirrorlist を持っているので一番近いサーバーからダウンロードできます。

そのため、mirrorlist(ミラーリスト)は「スピード化」「負荷分散」に貢献していると言えます。

通常はミラーリストを指定すれば近いところからダウンロードされるはずですが、リポジトリが古すぎる場合はリンク切れを起こしてエラーになります。

その場合は上記のように「beseurl」を選択することでパッケージをダウンロードすることができます。

 

mirrorlist(ミラーリスト)について

mirrorlist Specifies a URL to a file containing a list of baseurls.

mirrorlist は baseurlsのリストを含むファイルへのURLを指定します。

 

This can be used instead of or with the baseurl option.

ミラーリストは、baseurlオプションのかわりか、一緒に使用することができます。

 

Substitution variables, described below, can be used with this option.

このオプションでは、後述する置換変数を使用できます。

 

As a special hack is the mirrorlist URL contains the word "metalink" then the value of mirrorlist is copied to metalink (if metalink is not set).

特別なハックとして、ミラーリストのURLに "metalink"という単語が含まれていると、mirrorlistの値がmetalinkにコピーされます(metalinkが設定されていない場合)。

 

 

beseurlについて

baseurl Must be a URL to the directory where the yum repository's `repodata' directory lives.

baseurl は、yumリポジトリの `repodata 'ディレクトリが存在するディレクトリへのURLでなければなりません。

 

Can be an http://, ftp:// or file:// URL. 

http://、ftp://、file:// のいずれのURLでもかまいません。

 

You can specify multiple URLs in one baseurl statement.

1つのbaseurlステートメントに複数のURLを指定できます。

 

The best way to do this is like this:

これを行う最善の方法は次のようなものです:

 

[repositoryid]
name=Some name for this repository
baseurl=url://server1/path/to/repository/
    url://server2/path/to/repository/
    url://server3/path/to/repository/

 

If you list more than one baseurl= statement in a repository you will find yum will ignore the earlier ones and probably act bizarrely.

リポジトリに複数の「baseurl=url」文を指定すると、yumは以前のものを無視し、おそらく奇妙な動作をするでしょう。

 

Don't do this, you've been warned.

これをしないでください、あなたは警告されるからです。

 

You can use HTTP basic auth by prepending "user:password@" to the server name in the baseurl line.

baseurl行のサーバー名に "user:password@" を付けてHTTP基本認証を使用することができます。

 

For example: "baseurl=http://user:passwd@example.com/".

 

 

 [Errno 14] problem making ssl connection

「 [Errno 14] problem making ssl connection」のエラーは「SSLコネクションに問題があります」と翻訳できるように SSL の問題が原因です。

[root@test ~]# yum net-tools
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                                                        | 3.7 kB     00:00
base/primary_db                                                                             | 4.7 MB     00:00
epel                                                                                        | 4.3 kB     00:00
http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/b64af668775f52c545a2df2a7dbe8c155239d47ac2107d37730a8d23d53ec8c9-primary.sqlite.bz2: [Errno 14] problem making ssl connection
Trying other mirror.
http://download.fedoraproject.org/pub/epel/6/x86_64/repodata/b64af668775f52c545a2df2a7dbe8c155239d47ac2107d37730a8d23d53ec8c9-primary.sqlite.bz2: [Errno 14] Peer cert cannot be verified or peer cert invalid
Trying other mirror.
Error: failure: repodata/b64af668775f52c545a2df2a7dbe8c155239d47ac2107d37730a8d23d53ec8c9-primary.sqlite.bz2 from epel: [Errno 256] No more mirrors to try.

 

解決策としては、以下のように「sslverify=0」を追加します。

[root@test ~]# cat /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch 
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

sslverify=0 ← 「sslverify=0」を追加します。

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

 

 

 

sslverifyとは

「sslverify」とはSSL証明書をチェックするかどうかを決める値です。

デフォルトはチェックするです。

sslverify Boolean - should yum verify SSL certificates/hosts at all. Defaults to True.

sslverify ブーリアン値 - yumは、SSL証明書/ホストを検証しなければいけません。デフォルトはTrueです。

 

しかし古いダウンロードサーバーになると、SSL証明書の期限が切れている場合があります。

その場合はSSL証明書のチェックでエラーになるのでリポジトリファイルに「sslverify=0」の値を入れてチェックをスキップさせる必要があります。

もっと厳密に言えば、SSL証明書の期限が切れているようなダウンロードサーバーは、ちゃんと管理されていないとも言えるので、ダウンロードを控えた方が安全です。

 

パッケージは認識するけどダウンロードでエラーになる

次は、リンクは間違ってなさそうで、パッケージまで認識するけど、ダウンロードでエラーになるパターンです。

[root@cnt07 ~]# yum update net-toolsResolving Dependencies
--> Running transaction check
---> Package net-tools-2.0-0.17.20131004git.el7.x86_64 will be updated
---> Package net-tools-2.0-0.17.20131004git.el7.x86_64 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================================
 Package                           Arch                   Version                       Repository            Size
===================================================================================================================
Updating:
net-tools                          noarch                 2.0-0.17.20131004git.el7      epel                  62 k

Transaction Summary
===================================================================================================================
Upgrade       1 Package(s)

Total download size: 62 k
Is this ok [y/N]: y ← ここまでは問題なさそうに見えますが・・・


Downloading Packages:
http://download.fedoraproject.org/pub/epel/7/x86_64/net-tools-2.0-0.17.20131004git.el7.x86_64: [Errno 14] Peer cert cannot be verified or peer cert invalid
Trying other mirror.

Error Downloading Packages:
  net-tools-2.0-0.17.20131004git.el7.x86_64: failure: net-tools-2.0-0.17.20131004git.el7.x86_64.rpm from epel: [Errno 256] No more mirrors to try.

 

 

その場合は、URLは間違ってないので「yum clean all」でキャッシュをクリアします。

[root@cnt07 ~]# yum clean all
読み込んだプラグイン:fastestmirror, langpacks
リポジトリーを清掃しています: base epel extras updates
Cleaning up everything
Cleaning up list of fastest mirrors
[root@cnt07 ~]#

 

「レポジトリ」と「リポジトリ」どっちがスタンダードか?

「レポジトリ」「リポジトリ」は、どちらも英語にすると「repository」です。

ちなみに「repository」のそもそもの意味は「容器、貯蔵庫、埋葬所」です。

「reposit」「動詞」「を保管する」という意味です。

「レ」か「リ」かの違いです。

 

単純に多数派はどちらでしょうか?(正しいか正しくないかは置いておいて)

 

Googleで検索を件数を比較してみると・・・

リポジトリ495万件

レポジトリ23万件

と圧倒的に「リポジトリ」が多数派でした。

「レポジトリ」と「リポジトリ」どっちがスタンダード

 

「レポジトリ」と「リポジトリ」どっちがスタンダード

 

まとめ

yum コマンドでのエラーは大体上記3パターンに収斂されると思います。

しかし今後新たな yum コマンドでのエラーが発生したら、その都度追加していきます。

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。