Red Hat RPM Guide
The Red Hat RPM Guide covers the RPM package format used on Red Hat, Centos, Fedora, OpenSUSE, and other Linux distributions. It covers how to use, download, create, manage, and work with packages in the RPM format.
With RPM packaging, you can release your software in a consistent manner across a huge number of Linux systems, automating the installation of your packages. In addition, the book delves into programming with RPM packages from C, Python, and Perl.
Available online on a separate site as the Fedora RPM Guide, this book is now released under the Open Publication License, Version 1.0.
Table of Contents
- Part I: RPM Basics
- Chapter 1: Introducing Package Management
- Chapter 2: Introduction to RPM
- Chapter 3: RPM Overview
- Chapter 4: Using RPM
- Chapter 5: Using the RPM Database
- Chapter 6: Package Dependencies
- Chapter 7: Transactions
- Chapter 8: RPM Management Software
- Part II: Creating RPMs
- Chapter 9: Creating RPMs: An Overview
- Chapter 10: Working with Spec Files
- Chapter 11: Advanced RPM Packaging
- Chapter 12: Controlling the Build with rpmbuild
- Chapter 13: Supplemental Packaging Software
- Chapter 14: Packaging Guidelines
- Part III: Programming RPM
- Chapter 15: Automating RPM with Scripts
- Chapter 16: Programming RPM with C
- Chapter 17: Programming RPM with Python
- Chapter 18: Programming RPM with Perl
- Part IV: Extending RPM
- Chapter 19: Using RPM on Non-Red Hat Linuxes
- Chapter 20: RPM on Other Operating Systems
- Chapter 21: Customizing RPM Behavior
- Part V: Appendices
- Appendix A: RPM Command Reference
- Appendix B: Spec File Syntax
- Appendix C: RPM Feature Evolution
- Appendix D: RPM Package File Structure
- Appendix E: RPM Resources
- Appendix F: Linux Text Editors and Development Tools
- Appendix G: Licensing RPM
Errata for Red Hat RPM Guide, Printed Edition
Thanks to Aaron Bennett, Peter Bowen, Jeff Johnson, Christian Krause, Kelwin Wylie, Richard Hitt, JP Vossen, and the wonderful people at Red Hat.
|Page||Errata & Corrections|
|35||In the third paragraph, just below the example, the warning comes from the fact that the packages is signed, but the key is not found. If the package hadn't been GPG signed at all it would have passed.|
|50||The description of the
.rpmorig is used to save copy of preexsiting, but not in a package, file.
.rpmsave is used to save modified, previously installed, contents.
.rpmnew is used to save incoming if
|51||In the 2nd paragraph under Installing over the Internet, FileTransfer Protocol should be three words: File Transfer Protocol. Duh. Dumb typo.|
|55||The default repackage directory isn't /var/spool, but /var/spool/repackage. Check your RPM settings to be sure of the directory configured on your system.|
|56||In the 3rd paragraph in the note, /etc/rpmrc should be used for local customizations rather than modifying /usr/lib/rpm/rpmrc. See page 427 for a more in-depth look at the chain of these files.|
|57||The default set of initialization files is missing /etc/rpmrc. It should be:
/usr/lib/rpm/rpmrc:/usr/lib/rpm/redhat/rpmrc:/etc/rpmrc:~/.rpmrc Note that it is actually listed without /etc/rpmrc in the rpm man page, too.
|61||In the first paragraph under Querying everything, it should be
|74||In table 5-2, there are some states that are missing. In RPM 4.1 there is a 'net shared' state, and RPM 4.2 adds 'wrong color' to the list.|
|77||In the changelog example, the last entry appears to have bogus formatting instructions at the beginning of the comment line. (The code 80 refers to a Wiley document style.)|
|91||In the Querying Package Files Remotely callout, all the exampes should have -qp not -qf.|
|102||In the 2nd to last paragraph, the text on the version should be clearer. The example shows a relationship of greater than or equal (such as >= the 2.2 version of python). This should have been called out more clearly.|
|124||In the caution, it suggests that you can use rpmbuild to make a repackaged package into a full package, but there are not any instructions on how to do so. (This is left as an exercise for the reader. See Chapters 10, 11, and 12 for more on building packages.)|
|125||The program rpmrebuild was given an extra "p" in a typo.|
|168||This section calls the first part of the spec file the introduction section. I combined a number of things into what I called the introduction, including the preamble.|
|168||The preamble example has several problems:
(Comment: This is a real spec file from the jikes Java compiler. I won't argue on the best practices, but I wanted to focus on examples people might really see, not made-up examples, since one target audience is Linux administrators. -Eric)
|182||In really old versions of RPM, which no one should be using, the deprectaed Serial directive was used in place of the version and release, not in addition to it.|
|183||The text should be more blatant about Copyright being deprecated. I wanted to show an example of both Copyright and License.|
|184||In the third paragraph, it states that lines in the
|186||The description of the
This example means that the first source item should not be included in the package.
This example means that the third source item should not be included in the package. The NoPatch directive works similarly. In addition, do not place more than one number on any given NoSource or NoPatch directive.
|189||In the second paragraph, the
|197||In the note, /usr/share/man would be a better example for the directory, as that is the one that red Hat Linux and FHS use.|
|202||The example directories uses the standard RPM macro file, /usr/lib/rpm/macros, instead of the Red Hat-specific file, /usr/lib/rpm/redhat/macros, which holds:
I should have used the Red Hat one.
|205||The XML format for spec files is not only expermimental, it is very experimental. Assume there will be changes.|
|485||Parts of RPM are available under the LGPL in addition to the GPL.|
|Section 9.5.5||The %verify attributes are now different than what was described in the book. The old list was: group, maj, md5, min, mode, mtime, owner, size, symlink. The current list, in Fedora Core 6, is: group, md5, mode, mtime, link, rdev, size, user, as shown following: