2.9. Отслеживание библиотек, построенных по исходным текстам, в системах на базе RPM

Проблема
В одной системе должны использоваться как программы, построенные по ис ходным текстам, так и пакеты RPM. Но RPM ничего не знает о библиотеках, по строенных по исходным текстам, и ошибочно выдает сообщения о неразрешен ных зависимостях.
Решение
Воспользуйтесь сценарием rpm-orphan-find. Сценарий находит все библиотеки в ва шей системе, а затем сравнивает результаты с содержимым базы данных RPM.
Все «бесхозные» библиотеки объединяются в новый, виртуальный пакет .rpm.
Пакет не содержит файлов, а только список обеспечиваемых зависимостей. Сце нарий запускается как любой сценарий Bash:
# chmod +x rpm-orphan-find
# ./rpm-orphan-find
После завершения работы сценария установите новый пакет, и прежде «бес хозные» библиотеки будут включены в базу данных RPM.
Спасибо Полу Хайнлайну (Paul Heinlein) и Питеру Сэмюэльсону (Peter Samuelson)
за этот замечательный сценарий.
Листинг 2.1. Программа rpm-orphan-find
#!/bin/bash
# rpm-orphan-find. сценарий для поиска
# "бесхозных" библиотек в системах на базе RPM
# и их преобразования в виртуальный пакет .rpm
## Авторы - Пол Хайнлайн и Питер Сэмюэльсон
# Copyright 2003
# Допускается использование, распространение или модификация
# программы на условиях GPL.
0S=$(uname -s)
LIBS="/lib / u s r / l ib $(cat /etc/Id.so.conf)"
NAME=$(echo ${OS}-base-libs | t r '[A-Z]1 ' [ a - z ] ' )
VER-1.0: REL=1
TMPSPEC=$(mktemp /tmp/${NAME}.spec.XXXXXX)
exec 9>$TMPSPEC
cat < < _ e o f _ >&9
Summary: SOS Base Virtual Package
Name: $NAME
Version: $VER
Release: $REL
продолжение тУ
Group: System Environment/Base
License: None
eof
found=0: orphan=0;
echo "Scanning system libraries SNAME version $VER-$REI "
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 « _ e o f _ >&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
sharedlibraries that are part of the base operating system and associated subsets for
this SOS environment.
«prep
# nothing
«build
# nothing
«install
# nothing
fclean
# nothing
2post
# nothing
«files
eof
exec 9>& rpmbuild
to
to
to
to
to
-ba
do
do
do
do
do
STMPSPEC; rm STMPSPEC
См. также
rpm(8), rpmbuild(8); Maximum PRM (http://www.rpm.org/max-rpm/index.html).