[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: How does yum work ??



On 16/01/2008, William Case <billlinux rogers com> wrote:
>
> In this case, what is metadata?

A high-level file format created to be used by various package resolver tools:
http://linux.duke.edu/projects/metadata/

> Where is it on a file (package)

It is stored in multiple files in a directory with the name "repodata"
in the same place where the RPM packages are stored. To create it you
would run createrepo in the top-level package directory to make it
fill the repodata directory with metadata for all found packages.
createrepo traverses the given directory and its sub-directories
recursively.

> and how does Yum read it?

Yum is pointed to repositories via config files in /etc/yum.repos.d/
and uses URLs to access the "repodata" directories and the files
within. Nowadays there's a metadata parser for these files:
http://linux.duke.edu/projects/yum/download/yum-metadata-parser/

> Does it use its own specialized instructions to access data or does it
> use some version of 'wget'?

 From the top of my head, it uses networking methods from Python
Standard Library, e.g. urllib, instead of an external tool.

> > that contain RPM packages plus the
> > corresponding metadata archives generated by the createrepo tool.
>
> How does the creatrepotool create an archive?  What is needed etc?

Put some RPM packages into a directory, run "createrepo" in or above
that directory. See "man createrepo". Notice the "repodata" directory
and the files within it which are created.

$ rpm -qf $(which createrepo)
createrepo-0.4.11-1.fc8

> I suppose analyzing how createreptool creates an archive answers most of
> the metadata questions?  Where would I find an *explanation* of how to
> go about creating a repo or a package for a repo?

You can put any RPM package into such a repository.  And yes, reading
the source would help here.

 $ rpm -ql createrepo | grep .py$
/usr/share/createrepo/dumpMetadata.py
/usr/share/createrepo/genpkgmetadata.py
/usr/share/createrepo/modifyrepo.py
/usr/share/createrepo/readMetadata.py

> Where, and more importantly what is the info regarding each package
> stored in the local RPM database?

It's similar to all the package details you can query with rpm, e.g.

$ rpm --query --requires glibc
glibc-common = 2.7-2
basesystem
libgcc
/usr/sbin/glibc_post_upgrade.i686
/sbin/ldconfig
rpmlib(PartialHardlinkSets) <= 4.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1

and the many other queries that are covered by "man rpm".
Yum/createrepo do it via the RPM Python API, however, instead of
low-level C/C++.

> How does yum find it and read it?

I've answered that in the previous reply. Yum parses repository
metadata files and also queries the local RPM database via RPM's API.

>       * What precisely is a package?

http://rpm.org/  answers that one the first page.

>       * What and Where is this temp directory?

That's implementation-dependent and a low-level question.

>       * What checks are it running (you have alluded to them above)?
>       * What exactly is a *transaction*?

Transaction is a database related term here and covers the full set of
changes to be applied to the local installation *and* in the RPM
database:
http://en.wikipedia.org/wiki/Database_transaction

>       * What does cleaning up (cleanall etc.) mean?  Is something being
>         removed or just changed?

Roughly, there's stuff to do *after* replacing an old version of a
package installed on your system with a newer version.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]