In the tools
directory packaged with the RPM sources,
are a number of small programs that use the RPM library to extract the
various sections of a package file. Normally used by the RPM developers
for debugging purposes, these tools can also be used to make it easier to
understand the RPM package file format. Here is a list of the programs,
and what they do:
rpmlead — Extracts the lead section from a
package file.
rpmsignature — Extracts the signature
section from a package file.
rpmheader — Extracts the header from a
package file.
rpmarchive — Extracts the archive from a
package file.
dump — Displays a header structure in an
easily readable format.
The first four programs take an RPM package file as their input. The
package file can be read either from standard input, or by including the
file name on the command line. In either case, the programs write to
standard output. Here is how
rpmlead can be used to
display the lead from a package file:
# rpmlead foo.rpm | od -x
0000000 abed dbee 0003 0000 0100 7072 2d6d 2e32
0000020 2e32 2d31 0031 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 0000 0000 0000 0000
…
0000100 0000 0000 0000 0000 0000 0000 0100 0500
0000120 0004 0000 e124 bfff b36b 0800 e600 bfff
0000140
#
|
Since each of these programs can also act as filters, the following
command is equivalent to the one above:
# cat foo.rpm | rpmlead | od -x
0000000 abed dbee 0003 0000 0100 7072 2d6d 2e32
0000020 2e32 2d31 0031 0000 0000 0000 0000 0000
0000040 0000 0000 0000 0000 0000 0000 0000 0000
…
0000100 0000 0000 0000 0000 0000 0000 0100 0500
0000120 0004 0000 e124 bfff b36b 0800 e600 bfff
0000140
#
|
The
dump program is used in conjunction with
rpmsignature or
rpmheader. It makes
decoding header structures a snap:
# rpmsignature foo.rpm | dump
Entry count: 3
Data count : 172
CT TAG TYPE OFSET COUNT
Entry : 000 (1000)NAME INT32_TYPE 0x00000000 00000001
Data: 000 0x00044c4f (281679)
Entry : 001 (1001)VERSION BIN_TYPE 0x00000004 00000016
Data: 000 b0 25 b0 97 15 97 01 32
Data: 008 df 35 d1 69 32 9c 53 75
Entry : 002 (1002)RELEASE BIN_TYPE 0x00000014 00000152
Data: 000 89 00 95 03 05 00 31 ed
Data: 008 63 90 a5 20 e8 f1 cb a2
Data: 016 9b f9 01 01 43 7b 04 00
Data: 024 9c 8e 0a d4 37 90 36 4e
Data: 032 df b0 9a 8a 22 b5 b0 b3
Data: 040 dc 30 4c 6f 91 b8 c1 50
Data: 048 70 4e 2c 64 d8 8a 8f ca
Data: 056 18 ab 5b 6f f0 41 eb c8
Data: 064 d1 8a 01 c9 36 01 66 f0
Data: 072 9d dd e9 56 31 42 61 b3
Data: 080 b1 da 84 94 6b ef 9c 19
Data: 088 45 74 c4 9f ee 17 35 e1
Data: 096 d1 05 fb 68 0c e6 71 5a
Data: 104 60 f1 c6 60 27 9f 03 06
Data: 112 28 ed 0b a0 08 55 9e 82
Data: 120 2b 1c 2e de e8 e3 50 90
Data: 128 62 60 0b 3c ba 04 69 a9
Data: 136 25 73 1b bb 5b 65 4d e1
Data: 144 b1 d2 c0 7f 8a fa 4a 9b
#
|
One aspect of dump worth noting, is that it is
optimized for decoding the header section of a package file. When used
with rpmsignature, it displays the tag names used in
the header, instead of the signature tag names. The data is displayed
properly in either case, however.