web-dev-qa-db-ja.com

スクリプトからyum接続を確認しますか?

Yumリポジトリへのアクセスに問題がある場合(たとえば、必要なプロキシが構成されていない場合)、「yum update」のようなコマンドを実行すると、多数の異なるミラーを試行するのに非常に長い時間がかかります。それで良いこともありますが、yumリポジトリへのアクセスに問題がないかどうかをすぐに確認したい場合もあります。

Yumが接続をすばやく確認し、リモートリポジトリへのアクセスがOKかどうかを示すステータスコードを取得する方法はありますか?

4
kdt

これを行う1つの方法は、yum repolistコマンドによって報告される* Repo-baseurl: "です。

# curl -s --dump-header - `yum repolist rhcd -v | grep Repo-baseurl | awk  '{print $2}'` -o  /dev/null

HTTP/1.1 200 OK
Date: Fri, 17 May 2013 09:58:30 GMT
Server: Apache/2.2.3 (CentOS)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=ISO-8859-1

その内訳:

 yum repolist rhcd -v
Loading "fastestmirror" plugin
Config time: 0.104
Yum Version: 3.2.22
Loading mirror speeds from cached hostfile
Repo-id     : rhcd
Repo-name   : rhcd
Repo-status : enabled:
Repo-updated: Mon Nov  1 14:37:19 2010
Repo-pkgs   : 2,599
Repo-size   : 3.7 G
Repo-baseurl: http://lochost:81/core_build/il31/centos/5Server/i386/CentOS/

Grepを使用してbaseurlを抽出し、URLのawkにパイプします。

curlのダンプヘッダーオプションを使用して、httpステータスを確認します。

HTTP/1.1 200 OK
Date: Fri, 17 May 2013 09:58:30 GMT
Server: Apache/2.2.3 (CentOS)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=ISO-8859-1

もちろん、yumは本当にうまくまとめられたpythonプログラムなので、yumの関連ビットをインポートするpythonユーティリティとしてまとめることもできます。

Reponameがない場合、yum repolistはすべてのyumリポジトリーをリストします。その後、それらをループで処理できます。

2
davey

Yumの接続を確認する一般的なコマンドはないと思います。あなたができることはこれです:/etc/yum.repos.d/test.repoにテストリポジトリを作成し、ミラーリスト全体ではなく単一の場所をチェックするだけで、より高速になります。

[test]
name= test
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&Arch=$basearch&repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled = 0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

次に、次の形式でyumコマンドを入力します

yum --disablerepo=* --enablerepo=test list available

接続エラーが発生した場合、インターネット接続に問題がある可能性があります。もちろん、上の例ではcentos.orgもダウンしている可能性がありますが、その可能性はより低くなっています。

0
thanosk

私にとって、次のコマンドが機能しました:

yum repolist -v | grep Repo-baseurl | awk  '{print $3}'

これの代わりに:

yum repolist rhcd -v | grep Repo-baseurl | awk  '{print $2}'

そして、複数のyum-reposの場合、以下を実行できます。

for repourl in $(yum repolist -v | grep Repo-baseurl | awk  '{print $3}') ; do echo $repourl; curl -s --dump-header - $repourl -o  /dev/null; done

結果は:

http://repo-url-1/
HTTP/1.1 200 OK
Date: Sat, 31 Aug 2019 08:32:35 GMT
Server: Apache/2.2.15 (CentOS)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=UTF-8

http://repo-url-2/
HTTP/1.1 200 OK
Date: Sat, 31 Aug 2019 08:32:36 GMT
Server: Apache/2.2.15 (CentOS)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html;charset=UTF-8
0
sMajeed