Linux Cookbook [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Linux Cookbook [Electronic resources] - نسخه متنی

Carla Schroder

نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
افزودن یادداشت
افزودن یادداشت جدید








Recipe 2.9. Tracking Source-Built Libraries on an RPM-Based System



2.9.1 Problem


You 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 Solution


Use 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-find


Thank 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




/ 435