yumで [Errno 14] PYCURL ERROR 22 - 'The requested URL returned error 404 Not Found' が表示された時の対応

背景

昔から動いているScientific Linuxにパッケージをインストールしたいと相談を受けたので、とりあえずyumコマンドでインストールしようとしたところ、以下のようなメッセージが表示されました

1
http://ftp.scientificlinux.org/linux/scientific/6.5/x86_64/os/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"

404となっていたので、リポジトリのURLが変わってしまったのかなと思って調査した内容を記載します。

情報の収集

まず、サーバーの情報を集めます。

ディストリビューションについて

/etc/redhat-releaseを確認します。

1
2
# more /etc/redhat-release
Scientific Linux release 6.5 (Carbon)

リポジトリについて

/etc/yum.repos.d/の下のファイルを確認します。

1
2
3
4
# ls /etc/yum.repos.d/
epel-testing.repo mirrors-rpmforge-extras sl-other.repo
epel.repo mirrors-rpmforge-testing sl.repo
mirrors-rpmforge rpmforge.repo sl6x.repo

試しにyum updateを実行してみます。

1
2
3
4
5
6
7
# yum update
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* sl: ftp.scientificlinux.org
* sl-security: ftp.scientificlinux.org
* sl6x: ftp.scientificlinux.org
* sl6x-security: ftp.scientificlinux.org

以上より、sl, sl-security, sl6x, sl6x-securityのみ有効になっていることがわかります。
それぞれsl.repo, sl6x.repoを修正すればよいことがわかります。

リポジトリのURLの修正

まず、既存のURLを確認します。

エラーになったURLは

1
http://ftp.scientificlinux.org/linux/scientific/6.5/x86_64/os/repodata/repomd.xml

でした。sl.repoでbaseurlが記載されていて

1
baseurl=http://ftp.scientificlinux.org/linux/scientific/$releasever/$basearch/os/

となっていました。なので、一旦http://ftp.scientificlinux.org/linux/scientific/にアクセスしてみます。

すると、バージョンのディレクトリ一覧が表示されました。ここの階層まではディレクトリは存在するようです。しかしバージョンの中には今回の対象である6.5はありませんでした(一番古くても7.0)

バージョン名以外のディレクトリもあったので漁ってみると、obsoleteというディレクトリの下に6.5というディレクトリが存在しました!6.5のディレクトリ内はアーキテクチャの一覧があるので、これでアクセスできそうです!

repoファイルの修正

URLのscientific6.5の間にobsoleteを追加すれば良いので、viで開いて一括置換します。

viで開いた後

1
:%s/\/scientific\//\/scientific\/obsolete\//g

というコマンドで一括置換し、保存します。sl.repo、sl6x.repoに対して行いました。

動作確認

正しくリポジトリにアクセスできるようになったか確認します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# yum update
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* sl: ftp.scientificlinux.org
* sl-security: ftp.scientificlinux.org
* sl6x: ftp.scientificlinux.org
* sl6x-security: ftp.scientificlinux.org
sl | 3.6 kB 00:00
sl-security | 2.9 kB 00:00
sl6x | 3.7 kB 00:00
sl6x-security | 2.9 kB 00:00
Setting up Update Process
Resolving Dependencies
...
(省略)
...
Is this ok [y/N]: N
Exiting on user Command

無事リポジトリへアクセスできるようになりました。

まとめ

今回は放置されていたサーバーで急な要件が発生して慌てて対応しました。しかし、本来は常日頃からメンテナンスを行い、日々のアップデートに追従していくのが重要だと思います。オンプレならではの問題と思われるかもしれませんが、クラウド移行してもコンテナやマシーンイメージのメンテナンスは重要だと思います。