CentOS で yum が使えなくなった時の対処法 - 最終版


# 今さらながら古いCentOSにパッケージのインストールが必要になる

開発継続の終了がアナウンスされた CentOS ですが、振り返れば多くのサイトでCentOSを使用してきました。
さすがにCentOS4 のサイトはもう残していませんが、以前開発したアーカイブとして 仮想基盤(VirtualBox)上では CentOS5のサイトは残しています。

アーカイブする上でたまに必要になるのが、acpi 等のパッケージのインストールです。構築した際は電源を落とすことなど考えていなかったので、acpi(電源管理)のインストールは気にしていない、いや、なるべく不要なパッケージはインストールしないようにさえしていました。

なぜ古いサーバーに acpi が必要なのか？って、仮想基盤の管理画面からシャットダウンするのに信号(シグナル)を送って、簡単に停止させたいからです。
ログインしてシャットダウンのコマンドを打てばいいんでしょうけど、古いサーバーだとログインするのさえ、パスワードの管理を考えると面倒です。もう何年もログインしていないのですから。ちょっとサーバーを立ち上げて、WEBで画面がどうなっていたのか参照したいこともありますよね。

あるいは、mondo等のバックアップツールを使ってアーカイブを作成する上で、そもそもツールをインストールする際にも、足りないパッケージをインストールする必要もあります。

パッケージの追加インストールは、yum コマンドで簡単！。。。とはいかないのですね。

# yum が使えない(エラーが出る)場合の対処法は多数検索されるが

まえおきが長かったですが、現在は、CentOSはインストール時のままでは yum コマンドでエラーが出てパッケージのインストールができなくなっています。
検索すれば多数の対処法が出てきますし、私もお世話になってきましたが、多くの記事では対応できないことが多くなってきました。
そこで最終版として、今後もどんな環境でも yum が使用できるように、最終版として対処法の忘備録を残しておきます。

# なぜエラーが出るのかを場合分け

そもそも yum コマンドでエラーが出る原因を場合分けしておきます。

## 1. インターネットに繋がっていない

yumコマンドはインターネット上のCentOSのリポジトリ（repository）を参照してパッケージのインストールを行います。
ローカルファイルを参照する方法もありますが、今回は趣旨が異なるので省略します。

まずは、外部のインターネットに接続されてアクセスが出来ることを確認して下さい。
http/https/ftpが使えるようですが、後述しますが最低httpアクセスが可能なことを確認して下さい。
ポート番号は80が内部からアクセスできればOKです。
名前解決（サーバー名からIPアドレスへの変換）も必要です。

## 2. 新しい暗号化に対応していない

現在、https通信ではTLS1.2や1.3に移行しています。以前主流だった、TLS1.1以前の暗号化対応のサイトはほとんど存在しません。

CentOSのリポジトリやミラーサイトが、http ではなく https だった場合は、暗号化に対応できなくアクセスできない可能性もあります。

## 3. レポジトリサイトやミラーリストが変更された

これがエラーの原因の大半だと思われます。

例えば、
```
# yum install acpid
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
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/extras/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: extras
```
のようなエラーや、下記のような 404 エラーが出る場合もあるようです。
```
: [Errno 14] HTTP Error 404 - Not Found
```

ともかく、レポジトリまたはそのミラーサイトが見つからないということです。

# 対処法 - 最終版

前記の原因のうちネットワークの設定は確認してもらうとして、レポジトリの存在する場所を正確に指定すれば、 yum でパッケージのインストールは使用できるようになります。
暗号化は対応できませんので、https ではなく http のレポジトリを指定すれば問題ありません。

CentOS自体の存続が揺れている中、公式サイトの構成の変化が今後も有り得ると考えると、最終版とするからにはコピペで解決ではなく確認しながら進めていきます。

## 1. レポジトリのミラーサイトを確認

大元のCentOSのアーカイブ(古いバージョンも含め保存)サイトは以下です。
[https://vault.centos.org/](https://vault.centos.org/)

上記のミラーサイトが以下より検索できます。日本なら検索窓に「Japan」と入力します。
[https://www.centos.org/download/mirrors/](https://www.centos.org/download/mirrors/)

日本のサイトを抽出して下記を使用することにします。
ここで気をつけるのはhttpsではなく「http」 のリンクを使用することです。
例として、Jaist(北陸先端科学技術大学院大学)のサイトを使用します。
[http://ftp.jaist.ac.jp/pub/Linux/CentOS/](http://ftp.jaist.ac.jp/pub/Linux/CentOS/)

URL表示はftpのURL表示になっていますが、httpでの接続です。
![image1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59033/8f1312dd-9051-c4f3-8f4c-1042f511b8e5.jpeg)

**Parent Directory**をクリックして１つ上の階層を表示します。
![image1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59033/3c7564c4-75a6-e244-9931-ff8ce2e90ad5.jpeg)

**CentOS-Vault**をクリックします。
ここで自分のCentOSのバージョンを探します。

自分のCentOSバージョンがわからなければ、/etc/redhat-release を表示することで確認できます。
```
# cat /etc/redhat-release
CentOS release 5.10 (Final)
#
```
CentOSのバージョンがわかったら、そのバージョンのフォルダへのリンクをコピーしておきます。
![image1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59033/25d6d8ea-ab77-d21f-da22-faeae60cef12.jpeg)

この例では、
***http://ftp.jaist.ac.jp/pub/Linux/CentOS-vault/5.10/***
がコピーされました。

## 2.　/etc/yum.repos.d/CentOS-Base.repo ファイルの編集

レポジトリを参照しているファイルを編集します。CentOS5.10では以下のようになっていました。
```
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=https://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

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

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
```
この中で、取り急ぎ ***[base]*** セクションだけ編集します。
・ ***mirrorlist*** はコメントアウト
・ ***baseurl*** に先に調べたURLリンクに書き換え、末尾に ***/os/$basearch/*** を追加
```
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://ftp.jaist.ac.jp/pub/Linux/CentOS-vault/5.10/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
```

他のセクション、 ***[updates] [extras]*** では
・ ***enabled=0*** を追加すれば参照されなくなります
・ ***[base]*** 同様にURLを書き換えれば有効になります
・ 書き換える場合、***[updates]*** の ***baseurl*** の末尾には ***/updates/$basearch/*** 、***[extras]*** の ***baseurl*** の末尾には ***/extras/$basearch/*** を追加して下さい 

:::note info
$basearch にはアーキテクチャ(x86_64 または i386)が自動的に入ります
:::

## 3.パッケージのインストール

それでは当初の目的だった、acpid パッケージをインストールしてみます


```
# yum -y install acpid
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package acpid.x86_64 0:1.0.4-12.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================== Package            Arch                Version                   Repository         Size
==========================================================================================Installing:
 acpid              x86_64              1.0.4-12.el5              base               25 k

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

Total size: 25 k
Downloading Packages:
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
base/gpgkey                                                        | 1.5 kB     00:00     
Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) <centos-5-key@centos.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : acpid                                                              1/1 

Installed:
  acpid.x86_64 0:1.0.4-12.el5                                                             

Complete!
#
```
問題なくパッケージがインストールできました！

# まとめ
最終版とか大げさに記載しましたが、サーバー側のURLが変更されるので、URLを探して書き換え方法をまとめただけです。

CentOSの各バージョンや、未検証でうがyumを使用する他のLinuxでもで使えるはずです。

これによって古いOSでもパッケージの追加も問題ないので、メンテナンスや延命(?)にも役立つと思われます。