< Day Day Up > |
Recipe 2.9. Tracking Source-Built Libraries on an RPM-Based System2.9.1 ProblemYou want to run both source-built programs and RPMs on the same system. But RPM does not know about the source-built libraries, so it incorrectly reports dependency errors. 2.9.2 SolutionUse the rpm-orphan-find script. This script searches for all the libraries on your system, then compares the results with the contents of the RPM database. Any orphaned libraries are then rolled into a new, virtual .rpm. There are no files in this .rpm, just a list of provides. Run this like any Bash script: # chmod +x rpm-orphan-find # ./rpm-orphan-find When the script is finished, install the shiny new .rpm, and your formerly orphaned libraries will be included in your RPM database. 2.9.3 Program: rpm-orphan-findThank you to Paul Heinlein and Peter Samuelson for this great script. #!/bin/bash ## rpm-orphan-find, a script that finds ## orphaned libs on an RPM-based system ## and rolls them into a virtual .rpm ## written by Paul Heinlein and Peter Samuelson ## Copyright 2003 ## You may use, distribute or modify this ## program under the terms of the GPL. OS=$(uname -s) LIBS="/lib /usr/lib $(cat /etc/ld.so.conf)" NAME=$(echo ${OS}-base-libs | tr '[A-Z]' '[a-z]') VER=1.0; REL=1 TMPSPEC=$(mktemp /tmp/${NAME}.spec.XXXXXX) exec 9>$TMPSPEC cat <<_ _eof_ _ >&9 Summary: $OS Base Virtual Package Name: $NAME Version: $VER Release: $REL Group: System Environment/Base License: None _ _eof_ _ found=0; orphan=0; echo "Scanning system libraries $NAME version $VER-$REL..." find $LIBS -type f \( -name '*.so.*' -o -name '*.so' \) | while read f do ((found++)) if ! rpm -qf $f >/dev/null 2>&1 then ((orphan++)) echo "Provides: $(basename $f)" >&9 fi echo -ne "Orphans found: $orphan/$found...\r" done echo ''; echo '' cat <<_ _eof_ _ >&9 %description This is a virtual RPM package. It contains no actual files. It uses the 'Provides' token from RPM 3.x and later to list many of the shared libraries that are part of the base operating system and associated subsets for this $OS environment. %prep # nothing to do %build # nothing to do %install # nothing to do %clean # nothing to do %post # nothing to do %files _ _eof_ _ exec 9>&- rpmbuild -ba $TMPSPEC; rm $TMPSPEC Note that rpmbuild has replaced rpm. Since when, you ask? Since the turn of the century. It first appeared in Red Hat 8, RPM Version 4.1. The old RPM commands often still work, though, because they are aliased in /etc/popt. Run rpm —version to see what version you have. If you have an older version of RPM, edit the last line of the script as follows: rpm -bb $TMPSPEC; rm $TMPSPEC 2.9.4 See Also
|
< Day Day Up > |