CentOS6のyumが死んでた件について

4 min read

事の発端

ちょっとした案件で現役バリバリで動いているCentOS6向けにPGを組む必要が出てきたので
Docker上のCentOS6に上げて軽く動作確認するか〜って軽く考えてたらハマりました

手癖でコンテナ起動したらyum updateしてしまう癖が出たのですがエラーになって
あれー?
ってなりました

$ docker run -it --rm centos:6.6 bash
Unable to find image 'centos:6.6' locally
6.6: Pulling from library/centos
5dd797628260: Pull complete 
Digest: sha256:32b80b90ba17ed16e9fa3430a49f53ff6de0d4c76ad8631717a1373d5921fa26
Status: Downloaded newer image for centos:6.6
[root@e0bfe0131583 /]# yum update
Loaded plugins: fastestmirror
Setting up Update Process
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
Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again

原因調査

ググったらみんなハマってますね
CentOS6系はEOL迎えたんだから使うな
だってさ

https://wiki.centos.org/About/Product

うちみたいな貧乏レガシー現場ではバリバリ現役なのに使うなとか言われてもな。。。
5のシステムも見たことあるぞ。。。

対処方法

みんな同じ事書いてますね

sedで死んでるリポジトリのURLを違うリポジトリに書き換えればいいよ

とのこと

$ sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo
$ sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo

うん、これで行けた

なんとなく気になったので置換先のvault.centos.orgも調べてみました

$ openssl s_client -connect vault.centos.org:443 -showcerts 2>/dev/null | grep issuer
issuer=C = US, O = Let's Encrypt, CN = R3
$ nslookup vault.centos.org
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   vault.centos.org
Address: 54.186.51.210

$ whois 54.186.51.210 | grep OrgName
OrgName:        Amazon Technologies Inc.
OrgName:        Amazon.com, Inc.

AWSで動いててLet's Encryptの証明書使ってる感じかな?
これだけじゃちょっと不安なのでサイト見てみよう

https://vault.centos.org/

あーなんか大丈夫そうだね

というわけで無事yumは動いたので今後このコンテナ使う時毎回この作業しなくていいようにDockerイメージを今の状態で上書きしてしまいます。

Dockerイメージの更新

$ docker ps -a
CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS          PORTS                     NAMES
e0bfe0131583   centos:6.6           "bash"                   23 minutes ago   Up 23 minutes                             hungry_bose
$ docker images centos
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       6.6       368c96d786ae   2 years ago   203MB
$ docker commit hungry_bose centos:6.6
sha256:902bb745164cd9e063e74eba7ece540ee5bd2c8460ef4c4dd509bcdfc9492df2
$ docker images centos:6.6 
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
centos       6.6       902bb745164c   37 minutes ago   490MB

これでcentos:6.6のイメージはリポジトリが変更された状態で以降使えるようになりました

$ docker run -ti --rm centos:6.6 bash
[root@4cc537e71a2a /]# yum update -y
Loaded plugins: fastestmirror
Setting up Update Process
Determining fastest mirrors
base                                           | 3.7 kB     00:00     
base/primary_db                                | 4.7 MB     00:03     
extras                                         | 3.4 kB     00:00     
extras/primary_db                              |  29 kB     00:00     
updates                                        | 3.4 kB     00:00     
updates/primary_db                             |  12 MB     00:07     
No Packages marked for Update

リポジトリのメンテナンス自体もうされないみたいなのでupdateしても何も取得されることはないでしょうが個人的にコンテナは毎回--rmで使い捨てしてるのでローカルイメージは更新しといたほうが利便性高いです。

以上、自分たちがEOLを迎えそうなレガシー現場からお送りしました

P.S.

そのうちDockerHubからもイメージ消されそうで怖い

てかなんで未だに6現役なんだよ。。。

昔作り逃げされたPerlのメンテナンスやらされたときに
すでにCPAN上からは削除されてるライブラリを使いまくられてた時の二の舞になりそう

イメージエクスポートしといてどっかに残しとくか
それともいっそのこと自分のDockerHubの垢にこの状態のイメージを上げといたほうがいいんだろうか
でも無料垢だと定期的に使ってないイメージは消されるみたいだしなぁ。。。