この記事では、CentOS6のサポート終了に伴って、
yumすら使えなくなったCentOS6環境で、どうにかyumを使えるようにしたときの作業メモを紹介します。
CentOS6をまだ保守していかないといけない方々もいると思うので、
その際の参考になれば幸いです。
/etc/yum.repos.d/配下のリポジトリURLを変更すれば、良いというのがほとんどなのですが、
CentOS6.6以下の環境の場合、nssとca-certificatesの更新をrpmコマンドで更新しないと
yumが使えないという現象もあるので、その対処方法も記載しておきます。
対処1.リポジトリURLの修正
何も対処していないと、yumコマンドを使ったときに、リポジトリのURLが参照できなくて、
以降で紹介するようなエラーメッセージが出てくると思います。
それぞれ、どこを修正したらよいか見ていきましょう。
エラー確認する際には、 yum check-update
のコマンドを使ってみて動作確認するのが良いと思います。
check-updateは、実際にはなにもせずパッケージの更新状況だけを確認してくれます。
CentOS-Base.repoの更新
エラー内容
$ sudo yum check-update
読み込んだプラグイン:etckeeper, fastestmirror, security
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
エラー: Cannot find a valid baseurl for repo: base
対応: CentOS-Base.repoを書き換える。
# ファイルのバックアップ
sudo cp -p /etc/yum.repos.d/CentOS-Base.repo{,_bak}
# repoファイルのURL書き換え
sudo sed -i -e "s/^mirrorlist=http:\\/\\/mirrorlist.centos.org/#mirrorlist=http:\\/\\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
sudo sed -i -e "s/^#baseurl=http:\\/\\/mirror.centos.org/baseurl=http:\\/\\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
.repoファイルのコピーをバックアップとして取ったあとに、
sedコマンドでURL設定をリプレースしています。
バックアップファイルを取る場合は、
cp の -p
オプションを使うと、ファイル属性情報をそのままコピーすることができます。
(最終更新日時などがそのまま維持される)
epel.repoの更新
エラー内容
$ sudo yum check-update
読み込んだプラグイン:etckeeper, fastestmirror, security
Determining fastest mirrors
Could not get metalink <https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=x86_64> error was
14: problem making ssl connection
* epel: ftp.riken.jp
* rpmforge: kartolo.sby.datautama.net.id
対応: epel.repoを書き換える。
# バックアップファイル取得
sudo cp -p /etc/yum.repos.d/epel.repo{,_bak}
sudo cp -p /etc/yum.repos.d/epel-testing.repo{,_bak}
# mirrorlistコメントアウト
sudo perl -i -pe 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/epel.repo
sudo perl -i -pe 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/epel-testing.repo
# baseurl差し替え
sudo perl -i -pe 's|#baseurl=http://download.fedoraproject.org/pub/|baseurl=http://archives.fedoraproject.org/pub/archive/|g' /etc/yum.repos.d/epel.repo
sudo perl -i -pe 's|#baseurl=http://download.fedoraproject.org/|baseurl=http://archives.fedoraproject.org/|g' /etc/yum.repos.d/epel-testing.repo
epel.repo だけでなく、
私の環境は、epel-testing.repoファイルもあったのでそちらも書き換えています。
もちろん、epelを使ってない(/etc/yum.repo.d/配下にepel*.repoがない)場合は、この対応は不要です。
対処2.証明書関連パッケージの更新
それでも、yumがまだ使えない場合は、nssと、 ca-certificates パッケージを更新する必要があります。
差し替えたリポジトリURLへのアクセスするために、
証明書認証が必要でTLS1.2に対応したモジュールがインストールされている必要があるためです。
因みに、nss, ca-certificates の更新が必要なケースは、CentOS6.6以下の場合です。
(CentOS6.7以上ではすでに更新されているようなので)
もし、下記のようなエラーが発生した場合に、試してもらえば良いと思います。
NSSの更新
NSSは、Network Security Servicesというセキュア通信用のモジュールです。
cURLや、wgetなどのコマンドもこのNSSを利用してSSL,TLSあたりの処理をしているそうです。
エラー内容
$ sudo yum check-update
読み込んだプラグイン:etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
* rpmforge: kartolo.sby.datautama.net.id
<http://vault.centos.org/centos/6/os/x86_64/repodata/repomd.xml:> [Errno 14] problem making ssl connection
他のミラーを試します。
<http://vault.centos.org/centos/6/extras/x86_64/repodata/repomd.xml:> [Errno 14] problem making ssl connection
他のミラーを試します。
<http://vault.centos.org/centos/6/updates/x86_64/repodata/repomd.xml:> [Errno 14] problem making ssl connection
他のミラーを試します。
problem making ssl connection
CentOS-Base.repoで差し替えた、http://vault.centos.org
に対して、ssl通信に失敗しています。
nssパッケージを更新すれば良いですが、
yumを使って更新しようとしても上記のエラーがでるのでyumでの更新ができないという状況に陥ります。
yumが無理なので、http://vault.centos.org
から、証明書認定なしでwgetコマンドを使ってrpmファイルを直接ダウンロードしてきます。
(wgetコマンドもなくてダウンロードできない場合は、ローカルPCなどからDLして、rpmファイルをサーバー上に持ってくる対応しかないと思います)
rpmファイルが用意できたら、インストールして反映させます。
対応: nssのパッケージをRPMでインストール
# 場所はどこでもよいです。
cd /usr/local/src
# パッケージダウンロード
# --no-check-certificateオプションをつけて実行する。
sudo wget --no-check-certificate https://vault.centos.org/centos/6/updates/x86_64/Packages/nspr-4.21.0-1.el6_10.x86_64.rpm
sudo wget --no-check-certificate https://vault.centos.org/centos/6/updates/x86_64/Packages/nss-3.44.0-7.el6_10.x86_64.rpm
sudo wget --no-check-certificate https://vault.centos.org/centos/6/updates/x86_64/Packages/nss-softokn-3.44.0-6.el6_10.x86_64.rpm
sudo wget --no-check-certificate https://vault.centos.org/centos/6/updates/x86_64/Packages/nss-softokn-freebl-3.44.0-6.el6_10.x86_64.rpm
sudo wget --no-check-certificate https://vault.centos.org/centos/6/updates/x86_64/Packages/nss-sysinit-3.44.0-7.el6_10.x86_64.rpm
sudo wget --no-check-certificate https://vault.centos.org/centos/6/updates/x86_64/Packages/nss-tools-3.44.0-7.el6_10.x86_64.rpm
sudo wget --no-check-certificate https://vault.centos.org/centos/6/updates/x86_64/Packages/nss-util-3.44.0-1.el6_10.x86_64.rpm
# インストール
sudo rpm -Uvh \
nspr-4.21.0-1.el6_10.x86_64.rpm \
nss-3.44.0-7.el6_10.x86_64.rpm \
nss-softokn-3.44.0-6.el6_10.x86_64.rpm \
nss-softokn-freebl-3.44.0-6.el6_10.x86_64.rpm \
nss-sysinit-3.44.0-7.el6_10.x86_64.rpm \
nss-tools-3.44.0-7.el6_10.x86_64.rpm \
nss-util-3.44.0-1.el6_10.x86_64.rpm
インストールされたか、確認しておこう。
$ rpm -q nss
nss-3.44.0-7.el6_10.x86_64
ca-certificatesの更新
次は、ca-certificates
認証局と証明書の認証をするためのモジュールです。
こちらも、yumが使えない状況に発生するので、
rpmをつかって直接インストールすることになります。
エラー内容
$ sudo yum check-update
読み込んだプラグイン:etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
* rpmforge: kartolo.sby.datautama.net.id
<http://vault.centos.org/centos/6/os/x86_64/repodata/repomd.xml:> [Errno 14] Peer cert cannot be verified or peer cert invalid
他のミラーを試します。
<http://vault.centos.org/centos/6/extras/x86_64/repodata/repomd.xml:> [Errno 14] Peer cert cannot be verified or peer cert invalid
他のミラーを試します。
<http://vault.centos.org/centos/6/updates/x86_64/repodata/repomd.xml:> [Errno 14] Peer cert cannot be verified or peer cert invalid
他のミラーを試します。
Peer cert cannot be verified or peer cert invalid
証明書の認証に失敗しています。
対応: ca-certificatesをRPMでインストール
# 場所はどこでもよいです。
cd /usr/local/src
# パッケージダウンロード
sudo wget ftp://ftp.pbone.net/mirror/vault.centos.org/6.10/updates/x86_64/Packages/ca-certificates-2020.2.41-65.1.el6_10.noarch.rpm
sudo wget http://ftp.iij.ad.jp/pub/linux/centos-vault/6.7/os/x86_64/Packages/p11-kit-0.18.5-2.el6_5.2.x86_64.rpm
sudo wget http://ftp.iij.ad.jp/pub/linux/centos-vault/6.7/os/x86_64/Packages/p11-kit-trust-0.18.5-2.el6_5.2.x86_64.rpm
# インストール
sudo rpm -Uhv \
p11-kit-0.18.5-2.el6_5.2.x86_64.rpm \
p11-kit-trust-0.18.5-2.el6_5.2.x86_64.rpm
sudo rpm -Uhv ca-certificates-2020.2.41-65.1.el6_10.noarch.rpm
まとめ
yum check-update
したときに、なにもエラーがでないようになれば成功です。
ほかにもエラーが出る場合は、/etc/yum.repos.d/配下の.repo ファイルを見てみて、
どのURLがもう使えないのか調べてみて対応する感じになります。