7.2 Managing Headers
One key skill in maintaining a repository is header management. Headers, stripped from RPM packages, allow yum to determine dependent packages. Unless the packages you download are identical to those on your selected mirror, you won’t be able to use the headers created on the mirror. You will have to learn to create your own headers. There are two major header creation commands, which we’ll review in this section and then use on a Fedora Core 4 repository.
7.2.1 Header Creation Commands
As noted earlier, there are two different commands associated with creating headers for a yum repository. Before Fedora Core 3, the key command was yum-arch. It may still be the primary command for the distribution for which you’re managing patches. The alternative, starting with Fedora Core 3, is createrepo.
yum-arch
The yum-arch command comes with the yum RPM and is the first method to strip headers from associated RPM packages and organize them in a headers subdirectory. When the headers are available, various yum commands described in Chapter 6 can use them to identify packages and package groups, along with any dependencies for the purposes of installation, upgrades, and removals.
There are several different options associated with the yum-arch command. While none are absolutely necessary, they can help you in various special cases. They do not always work. For more information on the options associated with the yum-arch command, see Table 7-1.
Table 7-1 The yum-arch command options
Option |
Description |
-d |
Checks for dependencies and conflicts from listed RPM packages |
-n |
Creates the database without headers; may be appropriate if you’ve already download headers |
-s |
Creates headers from source packages |
-c |
Checks package integrity against available checksums |
-l |
Follows any noted symlinks |
-z |
Compresses headers |
createrepo
The createrepo command now creates metadata from the headers in XML format. If you’re familiar with the Red Hat comps.xml file (available from the first installation CD’s RedHat/base or Fedora/base subdirectory), you understand how these distributions use XML to organize packages and their associated package groups for installation. As Fedora (and perhaps other Linux distributions) evolves, they might move toward XML as a Linux standard to organize packages and their associated package groups.
There are several different options associated with the createrepo command. While none are absolutely necessary, they can help you in various special cases. For more information on createrepo options, see Table 7-2.
Table 7-2 The createrepo command options
Option |
Description |
-g |
Supports commands associated with Red Hat/Fedora groups from the comps.xml file |
-p |
Supports output in XML format |
-s |
Selects the type of checksum to use, such as md5 |
-c |
Checks package integrity against available checksums |
-u |
Creates headers from a list of files at a specified URL |
-x |
Excludes specified files; wildcards are allowed |
If you want to see how the createrepo command works, you can analyze its code in the /usr/bin/createrepo script. As with yum, this command is written in Python.
7.2.2 Adding the Headers
As suggested earlier, there are two commands you can use to create the headers needed for a yum repository: yum-arch and createrepo. If you use yum-arch in Fedora Core 3 or above, you’ll see the following message:
THIS PROGRAM IS DEPRECATED! You should be generating xml metadata instead. Please see http://linux.duke.edu/metadata
If you’re running RHEL 4 or the associated rebuild distributions, you should use the createrepo command, because these distributions are based on Fedora Core 3. However, several other distributions still use yum-arch. If you don’t see the "deprecated" message, use the yum-arch command, which is a part of the yum RPM.
yum-arch
The yum-arch command is fairly straightforward. All you have to do is navigate to the directory with the RPMs and you can create the headers in the local directory with the following command (don’t forget the dot, which specifies the files in the current directory):
yum-arch .
As you can see in Figure 7-1, headers are generated and "digested." You’ll find the headers in the local headers/ subdirectory.
Figure 7-1 The yum-arch command digests RPMs and exhales headers
If you’re successful, the numbers associated with Total and Used in the output should match. In other words, Figure 7-1 tells me that there are 639 RPMs in this repository, and all were used to create headers.
If there are problems, there may be older RPMs in the repository. Updates to an update repository where older RPMs conflict with others could be the cause. Therefore, if you use the rsync command to synchronize your repository, you should take care to delete older RPMs. Alternatively, you can wipe the repository directories before downloading updates.
This repository is now ready. You’ll still need to share the directory with an FTP, Apache, or an NFS server.
createrepo
While the yum-arch command was developed for RPMs, Red Hat’s move to organize packages in XML files is fairly recent. The createrepo command consolidates headers in compressed XML files. It creates the headers that the yum command needs to specify dependencies.
As you can see in Figure 7-2, the createrepo -v <PATH> command creates metadata. You’ll find the headers in compressed XML files in the local repodata/ subdirectory.
Figure 7-2 The createrepo command
This repository is now ready. You’ll still need to share the directory with an FTP, Apache, or an NFS server.