man rpmchk
NAME
rpmchk - compare "rpm -qa" or --qf files
SYNOPSIS
rpmchk [-options] [-filters]
DESCRIPTION
The rpmchk command compares "rpm -qa" or "rpm -qa --qf" files.
Files look something like (with "rpm -qa" output):
# Linux plagueis.arsc.edu 2.6.23.15-80.fc7 ... x86_64
arts-32bit-1.5.1-15.3
autoyast2-installation-2.13.69-0.3
compat-openssl097g-32bit-0.9.7g-11
The first line "host entry" is optional, seed files with:
print "# `uname -a`" > file
rpm -qa >>file
If the file(s) are not seeded the host name is extracted from the filename using
first dot delimited field not 'rpm' or 'txt'.
The recommended command for linux is:
rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" >`uname -n`.txt
This adds the ARCH field beyond generic 'rpm -qa' which is useful if the system
supports both i386 and x86_64.
OPTIONS
-files file1[,file2...]
Input "rpm -qa" listings, comma or white-space separated. If not provided
then will be prompted for file names. The following three variations all
accomplish the same thing:
ls *.qa | ./rpmchk -match
rpmchk -f "`ls *.qa`" -match
rpmchk -f berg.qa,b1n1.qa,b1n2.qa -match
-qf format
Identify "rpm --queryformat" used. The first character of format optionally
specifies field delimeter, default is space.
Recognized fields and associated "rpm --querytags":
N for NAME
V for VERSION
R for RELEASE
E for EPOCH
S for SERIAL
B for BUILDTIME
O for OS
A for ARCH
X to ignore a field (some other tag)
any other characters are ignored
With:
rpm -qa --qf "%{NAME}:%{VERSION}:%{ARCH}\n"
Use:
rpmchk -qf :NVA
A default "rpm -qa" is like:
rpm -qa --qf "%{NAME}-%{VERSION}-%{RELEASE}\n"
which can be problematic as NAME may contain dashes.
Default parsing assumes last field is RELEASE, next to last field is VER-
SION, and everything else is NAME. If somebody codes a "-" in VERSION or
RELEASE, well, that is unkind.
FILTERS, HOSTS
-Type version1[,version2...]
OS types to report (requires "uname -a" lines).
+Type version1[,version2...]
OS types to exclude.
-Version OS1[,OS2...]
OS versions to report (requires "uname -a" lines).
+Version OS1[,OS2...]
OS versions to exlcude.
-Arch arch1[,arch2...]
Linux architectures to report (requires "uname -a" lines).
+Arch arch1[,arch2...]
Linux architectures to exclude.
-host host1[,host2...]
Host name(s) to report.
+host host1[,host2...]
Host name(s) to exclude.
Note, the type, version, and architecture criteria are and-ed while host is or-ed.
FILTERS, PACKAGES
-name package1[,package2...]
Package name(s) to report.
+name package1[,package2...]
Package name(s) to exclude.
-parch arch1[,arch2...]
Package architectures to report.
+parch arch1[,arch2...]
Package architectures to exclude.
-OS os1[,os2...]
Package OSs to report.
+OS os1[,os2...]
Package OSs to exclude.
+version|!v
Ignore VERSION and RELEASE for matching packages.
+release|!r
Ignore RELEASE for matching packages.
+epoch|!e
Ignore EPOCH for matching packages.
+serial|!s
Ignore SERIAL for matching packages.
+buildt|!b
Ignore BUILDTIME for matching packages.
+os!!o Ignore OS for matching packages.
+arch|!a
Ignore ARCH for matching packages.
DISPLAY OPTIONS
-match Matched hosts (package/version/... on all hosts) not reported.
-single
No space between host columns. If display width exceeds 131 characters then
-single will be default.
-count Display number of hosts with RPM and first matching host instead of the host
matrix.
-list count
Display up to count nodes missing rpm. Use 0 for all.
+list count
Display up to count node missing rpm. Use 0 for all.
-xName value
Specify a maximum NAME length to display. Defaults as 20 and field maximum
is 64.
-xVer value
Specify a maximum VERSION length to display. Defaults as 12 and field maxi-
mum is 64.
-xRel value
Specify a maximum RELEASE length to display. Defaults as 12 and field maxi-
mum is 64.
-xEpo value
Specify a maximum EPOCH length to display. Defaults as 8 and field maximum
is 16.
-xSer value
Specify a maximum SERIAL length to display. Defaults as 8 and field maximum
is 16.
-xBui value
Specify a maximum BUILDTIME length to display. Defaults as 12 and field
maximum is 16.
-xOS value
Specify a maximum OS length to display. Defaults as 8 and field maximum is
16.
-xArc value
Specify a maximum ARCH length to display. Defaults as 8 and field maximum
is 16.
-output output-file
To specify output file, defaults to stdout.
-debug Debugging information.
-verbose
Verbose option to display filters.
-?
Display terse help message.
EXAMPLES
Show non-matching package/version from "rpm -qa" files:
#b b b : 3 hosts
#1 1 e : 58 total packages
#n n r :
#1 2 g :
# m :
# a :
# n :Name Version
#
- i i :AIX-rpm 5.2.0.85
i - - :AIX-rpm 5.2.0.91
- - i :atk 1.4.0
- - i :cdrecord 1.9
- - i :conserver 8.1.7
- - i :expat-devel 1.95.7
- - i :fontconfig 2.2.2
- - i :freetype2 2.1.7
- - i :gettext 0.10.40
- - i :glib 1.2.10
- - i :glib2 2.2.3
- - i :gtk+ 1.2.10
- - i :gtk2 2.2.4
- - i :libjpeg 6b
- - i :libpng 1.2.1
- - i :libtiff 3.6.1
- - i :mkisofs 1.13
- - i :openCIMOM 0.8
- - i :pango 1.2.5
- i i :tk 8.3.3
i - - :tk 8.3.4
- - i :xft 0.0
- - i :xrender 0.0
- - i :zlib 1.2.2
#
# 34 of 58 packages installed on all 3 hosts
Using files generated by (on a cluster of 400+ nodes):
$ pdsh -g all 'print "# `uname -a`" >`hostname`.qf'
$ pdsh -g all \
'rpm -qa --qf "%{NAME} %{VERSION} %{RELEASE} %{ARCH}\n" >>`hostname`.qf'
Reporting with various filters:
$ rpmchk -qf NV -f "`ls *.qf_mid`" -match -Ver "2.6.9" \
+host mn1sm,mpbs* +name sun-symon*
#Linux x86_64 2.6.9-55.0.9.EL_lustre.1
#
#m m m m m m m m : 8 hosts
#l l l l l l m m : 1470 total packages
#u u u u u u d d :
#s s s s s s s s :
#t t t t t t 1 2 :
#r r r r r r :
#e e e e e e :
#1 2 3 4 5 6 :Name Version
#
i i i i i i - - :TWeagent 7.1
i - - - - - - - :kernel-source 2.6.9
i - - - - - - - :lustre-autoconf 2.57
i - - - - - - - :lustre-automake 1.7.8
i - - - - - - - :lustre-source 1.4.7
i - - - - - - - :lustre-source 1.4.7.1
i i i i i i - - :mvSatalinux-2.6.9-55 3.6.3_2
i i i i i i - - :n1sm-linux-agent 1
- - - - - - i i :scli 1.06.16
#
# 1461 of 1470 packages installed on all 8 hosts
Report matching host count and first matching node:
$ ls mt*.qf_mid | rpmchk -qf NV -match -count
#Linux x86_64 2.6.5-7.276-smp-hdmb-pap
#
# : 358 hosts
# : 637 total packages
# First :Name Version
#
1 mt350 :TWeagent 7.1
354 mt001 :base-mgmt-client 3.0
71 mt261 :base-mgmt-grid 2.2
71 mt261 :base-mgmt-inventory 1.0
4 mt253 :dhcpcd 1.3.22pl4
354 mt001 :heartbeat 1.2.3
298 mt001 :herd 1.6
62 mt069 :mcelog 0.2
354 mt001 :n1sm-linux-agent 1
#
# 628 of 637 packages installed on all 358 hosts
Report up to 3 matching nodes:
$ ls mg*.qf_mid |
rpmchk -qf NV -match +h mg56,mg57 +l 3
#Linux x86_64 2.6.5-7.276-smp-hdmb-pap
#
#: 55 hosts
#: 636 total packages
#:Name Version : 55:Matched_On
#
#:base-mgmt-client 3.0 : 54:
:base-mgmt-grid 2.2 : 3:mg08 mg22 mg55
:base-mgmt-inventory 1.0 : 3:mg08 mg22 mg55
#:heartbeat 1.2.3 : 54:
:libapr0 2.0.49 : 1:mg45
#:libapr0 2.0.59 : 54:
:mcelog 0.2 : 3:mg22 mg39 mg55
#:n1sm-linux-agent 1 : 54:
#
# 628 of 636 packages installed on all 55 hosts
Report up to 3 missing nodes:
$ ls mg*.qf_mid |
rpmchk -qf NV -match +h mg56,mg57 -l 3
#Linux x86_64 2.6.5-7.276-smp-hdmb-pap
#
#: 55 hosts
#: 636 total packages
#:Name Version : 55:Missing_On
#
:base-mgmt-client 3.0 : 1:mg52
#:base-mgmt-grid 2.2 : 52:
#:base-mgmt-inventory 1.0 : 52:
:heartbeat 1.2.3 : 1:mg52
#:libapr0 2.0.49 : 54:
:libapr0 2.0.59 : 1:mg45
#:mcelog 0.2 : 52:
:n1sm-linux-agent 1 : 1:mg52
#
# 628 of 636 packages installed on all 55 hosts
NOTES
This command utilizes the cci command parser utilized by non-UNIX operating systems
instead of the traditional UNIX getopt() parsing. Options have been defined to
"look like" UNIX style options, but can be spelled out or generally abbreviated.
For example -o is the same as -output. Because of this multiple options must be
space separated and the hyphen is part of the option name. Also because of this
order of options is irrelevant.
ACKNOWLEDGEMENTS
Written at the University of Alaska Arctic Region Supercomputing Center (ARSC).
Ongoing maintenance via SourceForge by Denali Sun Consulting.
Suggestions or bug reports can be directed to denalisun907@gmail.com.