* [[RPM Queries|Querying the RPM database]]
=== Creating Packages ===
* [[RPM Packaging Process]]
=== Writing a specfile ===
* Run <code>rpmdev-newspec ''packagename''</code> in ~/rpmbuild/SPECS
* Edit the skeleton specfile.
* Test it: <code>rpmbuild -ba ''packagename''.spec</code>
** If successful, output will be binary RPM(s) in ~/rpmbuild/RPMS and source RPM in ~/rpmbuild/SRPMS
*** Can install binary RPM with: <code>rpm -i ''rpmname''</code>
** If unsuccessful, read the error messages carefully.
* Check it with rpmlint: <code>rpmlint ''packagename''*</code>
** Remember to check the spec file as well as the binary and source RPMs.
** Correct any errors found.
=== Layout of a specfile ===
** %makeinstall
=== rpmlint: Checking for a clean spec file, SRPM, and RPM ===
<code>rpmlint</code> is a spec file, SRPM (.src.rpm), and RPM (.rpm) checker. To use it, supply the names of the file(s) to be checked as argument(s):=== Creating Packages ===
rpmlint ''foo.spec foo*.rpm'' Notice that the checks performed vary based on the input file. For example, some errors in the spec file (such as the summary ending in a period ".") could be determined from the spec file, but only show up when the SRPM/[[RPM is checked. Each run will report the number of errors and warnings; errors are serious problems which should not be ignored, while warnings may be ignored depending on the context.Packaging Process]]
=== Demo: Creating a Simple Package ===
* Writing the specfile
* Testing the specfile
** Using rpmlint
=== Resources ===