レンタルサーバーでよく使われている 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 コマンドでのエラーが発生したら、その都度追加していきます。
コメント