JonathanR
25th February 2009, 07:34 AM
I originally posted this http://forums.opensuse.org/archives/sf-archives/archives-tips-tricks-tweaks/337560-using-rpm-like-smart-yast-yum.html
You can add repos to rpm by following the man page for rpmcache. http://linux.die.net/man/8/rpmcache
Description
rpmcache walks a file tree, possibly remotely using FTP, filtering paths using glob(7) expressions, reading rpm package headers. The latest (i.e. comparing package epoch/version/release for identical package names and using the build time as a tie breaker) package headers, if they are unique, are cached in an rpm database. The rpm database cache can be used to provide suggested paths to packages that resolve unknown dependencies.
There are no rpmcache specific options, only common rpm options. See the rpmcache usage message for what is currently implemented.
The file tree path to be searched is configured using rpm macros. The final path is the concatenation of 5 individual elements. Here are the macro names used to configure rpmcache, in the same order that they will be concatenated to build the file tree path that will be walked:
%_bhpath
The "path" level contains the leading part of the file tree path (or URL) for the file tree to be walked. No glob(7) expressions, here, please.
%_bhcoll
The "collection" level contains a string (or glob(7) expression) to match sub-directories of %_bhpath.
%_bhN
The "name" level contains a string (or glob(7) expression) to match sub-directories of %_bhcoll. The PACKAGE_NAME arguments are used to construct a glob(7) expression that will match any of specific package names within the Red Hat build system, and are almost certainly not of use to anyone outside of Red Hat.
%_bhVR
The "version-release" level contains a string (or glob(7) expression) to match sub-directories of %_bhN.
%_bhA
The "arch" level contains a string (or glob(7) expression) to match sub-directories of %_bhVR.
The location of the cache database is also configured using an rpm macro:
%_cache_dbpath
The location of the cache database. The default value is /var/spool/up2date/cache.
The cache database is identical in format to an rpm database, and can be used with rpm from the command line. For example, to use the cache database to provide suggestions for packages that provide dependencies needed by a package install, the following macro should be configured in either /etc/rpm/macros or ~/.rpmmacros:
%_solve_dbpath
The location of the database that is used to provide suggested dependency resolutions.
Example (minimal) configuration for a Red Hat beehive tree:
%_cache_dbpath**/var/spool/up2date/cache
%_solve_dbpath**%{_cache_dbpath}
%_bhpath********file://localhost/mnt/redhat/beehive/comps/dist
%_bhcoll********7.3
%_bhN********** @(basesystem|bash|filesystem|glibc-common|glibc|ldconfig|libtermcap|mktemp|setup|term cap)
%_bhVR***********
%_bhA********** @(i[3456]86|noarch)
Example (minimal) configuration for a Red Hat FTP tree:
%_cache_dbpath**/var/spool/up2date/cache
%_solve_dbpath**%{_cache_dbpath}
%_bhpath********ftp://localhost/mnt/dist
%_bhcoll********@(7.3|7.2|7.1|7.0|6.2|6.1|6.0|5.2| 5.1|5.0)
%_bhN********** @(%{_arch})
%_bhVR***********
%_bhA********** @(i[3456]86|noarch)
Now with rpmcache set with repos, you can issue the rpm -U * command, and it will upgrade the packages on your system based off the repos you have added.
Here is more information on rpm macros http://docs.fedoraproject.org/drafts/rpm-g...mizing-rpm.html
Rpm macros allows you to control rpm, the way you'd like. It is part of rpmcache, which I gave above.
There are 3 places you may find the rpm macros;
1) /etc/rpm
2) /usr/lib/rpm
3) ~/.rpmmacros
I'd speculate, that the 3rd one is not created by default. The 3rd one would be good to customize per user, instead of global/system wide customizations.
There is a file called "macros" in /usr/lib/rpm
They advise not to make changes to macros in /usr/lib/rpm as it will be over written when rpm is upgraded.
The one in /user/lib/rpm is global. The ones in /etc/rpm are for specific packages, such as kernel, gtk, or jpackage.
So you can use macros for system wide changes, or for package specific settings, or user based settings.
I hopes this helps you gain more control, and understand your rpm distro better.
If you have questions or comments, ask.
You can add repos to rpm by following the man page for rpmcache. http://linux.die.net/man/8/rpmcache
Description
rpmcache walks a file tree, possibly remotely using FTP, filtering paths using glob(7) expressions, reading rpm package headers. The latest (i.e. comparing package epoch/version/release for identical package names and using the build time as a tie breaker) package headers, if they are unique, are cached in an rpm database. The rpm database cache can be used to provide suggested paths to packages that resolve unknown dependencies.
There are no rpmcache specific options, only common rpm options. See the rpmcache usage message for what is currently implemented.
The file tree path to be searched is configured using rpm macros. The final path is the concatenation of 5 individual elements. Here are the macro names used to configure rpmcache, in the same order that they will be concatenated to build the file tree path that will be walked:
%_bhpath
The "path" level contains the leading part of the file tree path (or URL) for the file tree to be walked. No glob(7) expressions, here, please.
%_bhcoll
The "collection" level contains a string (or glob(7) expression) to match sub-directories of %_bhpath.
%_bhN
The "name" level contains a string (or glob(7) expression) to match sub-directories of %_bhcoll. The PACKAGE_NAME arguments are used to construct a glob(7) expression that will match any of specific package names within the Red Hat build system, and are almost certainly not of use to anyone outside of Red Hat.
%_bhVR
The "version-release" level contains a string (or glob(7) expression) to match sub-directories of %_bhN.
%_bhA
The "arch" level contains a string (or glob(7) expression) to match sub-directories of %_bhVR.
The location of the cache database is also configured using an rpm macro:
%_cache_dbpath
The location of the cache database. The default value is /var/spool/up2date/cache.
The cache database is identical in format to an rpm database, and can be used with rpm from the command line. For example, to use the cache database to provide suggestions for packages that provide dependencies needed by a package install, the following macro should be configured in either /etc/rpm/macros or ~/.rpmmacros:
%_solve_dbpath
The location of the database that is used to provide suggested dependency resolutions.
Example (minimal) configuration for a Red Hat beehive tree:
%_cache_dbpath**/var/spool/up2date/cache
%_solve_dbpath**%{_cache_dbpath}
%_bhpath********file://localhost/mnt/redhat/beehive/comps/dist
%_bhcoll********7.3
%_bhN********** @(basesystem|bash|filesystem|glibc-common|glibc|ldconfig|libtermcap|mktemp|setup|term cap)
%_bhVR***********
%_bhA********** @(i[3456]86|noarch)
Example (minimal) configuration for a Red Hat FTP tree:
%_cache_dbpath**/var/spool/up2date/cache
%_solve_dbpath**%{_cache_dbpath}
%_bhpath********ftp://localhost/mnt/dist
%_bhcoll********@(7.3|7.2|7.1|7.0|6.2|6.1|6.0|5.2| 5.1|5.0)
%_bhN********** @(%{_arch})
%_bhVR***********
%_bhA********** @(i[3456]86|noarch)
Now with rpmcache set with repos, you can issue the rpm -U * command, and it will upgrade the packages on your system based off the repos you have added.
Here is more information on rpm macros http://docs.fedoraproject.org/drafts/rpm-g...mizing-rpm.html
Rpm macros allows you to control rpm, the way you'd like. It is part of rpmcache, which I gave above.
There are 3 places you may find the rpm macros;
1) /etc/rpm
2) /usr/lib/rpm
3) ~/.rpmmacros
I'd speculate, that the 3rd one is not created by default. The 3rd one would be good to customize per user, instead of global/system wide customizations.
There is a file called "macros" in /usr/lib/rpm
They advise not to make changes to macros in /usr/lib/rpm as it will be over written when rpm is upgraded.
The one in /user/lib/rpm is global. The ones in /etc/rpm are for specific packages, such as kernel, gtk, or jpackage.
So you can use macros for system wide changes, or for package specific settings, or user based settings.
I hopes this helps you gain more control, and understand your rpm distro better.
If you have questions or comments, ask.