rpmの管理
現在稼動している多くのサーバについてそれぞれ未適用のアップデートパッケージは何かを管理したいということはしばしばあります。
yumを用いることで一覧を取得することは可能ですが整形済みということや、パッケージ名やバージョンの表示が下記の様に少々スクリプト処理をするには面倒な状態です。
$ sudo yum list updates > pkg.txt
1 2 3 4 5 6 7 8 9 |
$ cat pkg.txt Loaded plugins: priorities, update-motd, upgrade-helper Updated Packages aws-amitools-ec2.noarch 1.5.6-1.1.amzn1 amzn-updates aws-apitools-ec2.noarch 1.7.2.0-1.0.amzn1 amzn-updates aws-apitools-rds.noarch 1.18.001-1.0.amzn1 amzn-updates aws-cfn-bootstrap.noarch 1.4-3.amzn1 amzn-updates aws-cli.noarch 1.6.2-1.1.amzn1 amzn-updates bash.x86_64 4.1.2-15.23.amzn1 amzn-updates |
repoquery(1)コマンドの利用
yum-utilsパッケージに含まれているrepoquery(1)ではrpm(8)の様にリポジトリをクエリする事が可能になります。
rpmコマンドと同じように使えるということでフォーマット指定も可能なので、まさにスクリプトの処理にぴったりです。
1 2 3 4 5 6 7 |
$ /usr/bin/repoquery --pkgnarrow=updates --all --qf='%{name}\t%{arch}\t%{version}\t%{release}\t%{repo}' aws-amitools-ec2 noarch 1.5.6 1.1.amzn1 amzn-updates aws-apitools-ec2 noarch 1.7.2.0 1.0.amzn1 amzn-updates aws-apitools-rds noarch 1.18.001 1.0.amzn1 amzn-updates aws-cfn-bootstrap noarch 1.4 3.amzn1 amzn-updates aws-cli noarch 1.6.2 1.1.amzn1 amzn-updates bash x86_64 4.1.2 15.23.amzn1 amzn-updates |
ここまでで明かりがみえてきましたので、こんな感じでjsonにするスクリプトにしてみました。(最終行の扱いが微妙ですがサンプル程度ということで)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/usr/bin/python # -*- coding: utf-8 -*- import subprocess import sys import string import json format_string = '%{name}\t%{arch}\t%{version}\t%{release}\t%{repo}' title = ["name","arch","vaersion","release","repo"] (stdout, stderr) = subprocess.Popen(['/usr/bin/repoquery', '--all', '--pkgnarrow=updates', '--qf=%s' % format_string], stdout=subprocess.PIPE).communicate() yum_string = stdout.split("\n") d = {} pkgs = [] pkg_object = {} for l in yum_string: d = {} for t, f in zip(title, string.split(l.rstrip('rn'), sep="\t")): d[t] = f pkgs.append(d) pkg_object['pkgs'] = pkgs print json.dumps(pkg_object, indent=4) |
出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "pkgs": [ { "release": "1.1.amzn1", "repo": "amzn-updates", "arch": "noarch", "name": "aws-amitools-ec2", "vaersion": "1.5.6" }, { "release": "1.0.amzn1", "repo": "amzn-updates", "arch": "noarch", "name": "aws-apitools-ec2", "vaersion": "1.7.2.0" }, { "release": "1.0.amzn1", "repo": "amzn-updates", "arch": "noarch", "name": "aws-apitools-rds", "vaersion": "1.18.001" }, { "name": "" } ] } |
日々このjsonを処理すればパッケージ管理の前進ができそうです。
投稿者プロフィール
-
インフラ系のエンジニアです。
運用系のスクリプトを書いたり、オートメーションな世界に向かって日々精進しています。
最新の投稿
- Apache2016年6月24日ApacheWebServerで圧縮転送の設定
- AWS2016年5月17日SkyHopperのインストーラで作成するChef Serverについてのご注意
- AWS2016年3月29日SkyHopper v1.15.2の評価用AMI公開しました
- AWS2016年3月8日SkyHopperのプロダクトページを作成しました